Amazon Transcribe, Amazon Translate ve Amazon Polly PlatoBlockchain Veri Zekası ile dil engellerini aşın. Dikey Arama. Ai.

Amazon Transcribe, Amazon Translate ve Amazon Polly ile dil engellerini aşın

Bir insan tercümana ihtiyaç duymadan dünyanın dört bir yanındaki hastalarla görüntülü görüşme yapan bir cerrah düşünün. Ya acemi bir girişim, canlı bir insan çevirmene ihtiyaç duymadan akıcı, doğru, çok dilli müşteri desteği ve satış sunarak ürünlerini sınırların ötesine ve yeni coğrafi pazarlara kolayca genişletebilseydi? Artık dile bağlı olmadığınızda işinize ne olur?

Birçok farklı dili konuşan uluslararası ekipler ve müşterilerle sanal toplantılar yapmak günümüzde yaygın bir uygulamadır. İster dahili ister harici toplantılar olsun, anlam genellikle karmaşık tartışmalarda kaybolur ve olabildiğince etkili olmanızı engelleyen dil engelleriyle karşılaşabilirsiniz.

Bu gönderide, tam olarak yönetilen üç AWS hizmetinin nasıl kullanılacağını öğreneceksiniz (Amazon Yazısı, Amazon Tercüme, ve Amazon Polly) tamamen sıfır makine öğrenimi (ML) deneyimi ile bir kaynak konuşmacının canlı ses girişini sözlü, doğru, çevrilmiş bir hedef dile hızla çevirebilen, gerçek zamanlıya yakın bir konuşmadan konuşmaya çevirmen çözümü üretmek.

Çözüme genel bakış

Çevirmenimiz, aşağıdakileri kullanarak tek bir Python betiğinde birlikte çalışan tam olarak yönetilen üç AWS ML hizmetinden oluşur: Python için AWS SDK (Boto3) metin çevirisi ve metinden konuşmaya bölümlerimiz ve ses girişi transkripsiyonu için eşzamansız akış SDK'sı için.

Amazon Transcribe: Konuşmayı metne aktarma

Yığınımızda kullandığınız ilk hizmet, giriş konuşmasını alıp metne dönüştüren, tam olarak yönetilen bir konuşmadan metne hizmet olan Amazon Transcribe'dır. Amazon Transcribe, depolanmış ses dosyalarını veya akışlı ses verilerini kabul ettiği için toplu veya akış şeklinde esnek alma yöntemlerine sahiptir. Bu gönderide, Python için eşzamansız Amazon Transcribe akış SDK'sı, canlı ses akışı yapmak ve canlı dökümleri almak için HTTP/2 akış protokolünü kullanan.

Bu prototipi ilk oluşturduğumuzda Amazon Transcribe akış alımı otomatik dil algılamayı desteklemiyordu, ancak Kasım 2021'den itibaren bu durum artık geçerli değil. Hem toplu hem de akış kullanımı artık herkes için otomatik dil algılamayı destekliyor desteklenen diller. Bu gönderide, akışlı otomatik dil algılamanın kullanılmasıyla sorunsuz çok dilli parametresiz bir tasarım olsa da parametre tabanlı bir çözümün nasıl mümkün olduğunu gösteriyoruz. Yazıya dökülmüş konuşma segmentimiz metin olarak döndürüldükten sonra, Amazon Translate'e tercüme etmesi ve sonuçları Amazon Transkripsiyonumuzda döndürmesi için bir istek gönderirsiniz. EventHandler yöntemi.

Amazon Translate: Son teknoloji ürünü, tam olarak yönetilen çeviri API'si

Yığınımızın bir sonraki durağı, hızlı, yüksek kaliteli, uygun fiyatlı ve özelleştirilebilir dil çevirisi sunan bir sinirsel makine çevirisi hizmeti olan Amazon Translate. Haziran 2022 itibarıyla Amazon Çeviri, sürekli olarak yeni dil çiftleri ve iyileştirmeler yapılarak 75 dilde çeviriyi desteklemektedir. Amazon Translate, kullanım durumunuza bağlı olarak gerçek zamanlı veya toplu olarak doğru çevirileri hızlı bir şekilde sunmak için yüksek düzeyde ölçeklenebilir ve esnek bir AWS Bulut mimarisinde barındırılan derin öğrenme modellerini kullanır. Amazon Translate'i kullanmak basittir ve temel mimarinin veya makine öğrenimi becerilerinin yönetimini gerektirmez. Amazon Translate'in bir dosya oluşturma ve kullanma gibi çeşitli özellikleri vardır. özel terminoloji sektöre özgü terimler arasındaki eşlemeyi işlemek için. Amazon Translate hizmet sınırları hakkında daha fazla bilgi için bkz. Yönergeler ve sınırlar. Uygulama, çevrilmiş metni hedef dilimizde aldıktan sonra, çevrilen metni anında çevrilmesi için Amazon Polly'ye gönderir.

Amazon Polly: Tümüyle yönetilen metinden konuşmaya API

Son olarak, çevrilmiş metni, anında akış oynatma için gerçeğe yakın ses klibi yanıtları gönderebilen veya toplu olarak ve kaydedilerek geri gönderebilen, tam olarak yönetilen bir metinden konuşmaya hizmeti olan Amazon Polly'ye gönderirsiniz. Amazon Basit Depolama Hizmeti (Amazon S3) daha sonra kullanmak üzere. Telaffuz, ses düzeyi, perde, konuşma hızı ve daha fazlası gibi konuşmanın çeşitli yönlerini standartlaştırılmış kullanarak kontrol edebilirsiniz. Konuşma Sentezi İşaretleme Dili (SSML).

Belirli Amazon Polly için konuşma sentezleyebilirsiniz sinirsel sesler TV veya radyo haber spikeri gibi ses çıkarmak için Haber spikeri stilini kullanma. Ayrıca, ses akışına dahil edilen meta verilere dayalı olarak metindeki belirli kelimelerin veya cümlelerin ne zaman söylendiğini de tespit edebilirsiniz. Bu, geliştiricinin, bir avatarın dudak hareketleri gibi grafik vurgulamaları ve animasyonları sentezlenmiş konuşmayla senkronize etmesine olanak tanır.

Şirket adları, kısaltmalar, yabancı kelimeler veya neolojizmler gibi belirli kelimelerin telaffuzunu değiştirebilirsiniz, örneğin “P!nk”, “ROTFL” veya “C'est la vie” (Fransızca olmayan bir dilde konuşulduğunda). ses), özel sözlükler kullanarak.

Mimariye genel bakış

Aşağıdaki şema çözüm mimarimizi göstermektedir.

Bu şema, istemci cihazdan Amazon Transcribe, Amazon Translate ve Amazon Polly'ye veri akışını gösterir.

İş akışı aşağıdaki gibidir:

  1. Ses, Python SDK tarafından alınır.
  2. Amazon Polly, konuşmayı 39 olası dilde metne dönüştürür.
  3. Amazon Translate, dilleri dönüştürür.
  4. Amazon Live Transcribe, metni konuşmaya dönüştürür.
  5. Ses hoparlörlere verilir.

Önkoşullar

Mikrofon, hoparlör ve güvenilir internet bağlantısı ile kurulmuş bir ana makineye ihtiyacınız var. Modern bir dizüstü bilgisayar bunun için iyi çalışmalıdır çünkü ek bir donanıma ihtiyaç yoktur. Ardından, makineyi bazı yazılım araçlarıyla kurmanız gerekir.

Eşzamansız Amazon Transcribe akış SDK'sını kullanmak ve adlı bir Python modülü için Python 3.7+ yüklü olmalıdır. pyaudio, makinenin mikrofonunu ve hoparlörlerini kontrol etmek için kullanırsınız. Bu modül adı verilen bir C kitaplığına bağlıdır. portaudio.h. ile ilgili sorunlarla karşılaşırsanız pyaudio hatalara sahip olup olmadığınızı görmek için işletim sisteminizi kontrol etmenizi öneririz. portaudio.h kitaplık kuruldu.

Servis çağrılarının yetkilendirilmesi ve doğrulanması için bir AWS Kimlik ve Erişim Yönetimi (IAM) gerekli AWS hizmetlerini çağırma izinlerine sahip hizmet rolü. yapılandırarak AWS Komut Satırı Arayüzü (AWS CLI) bu IAM hizmet rolüyle, AWS kitaplıkları yapılandırılmış AWS CLI kullanıcısının kimlik bilgilerini kullanacak şekilde yazıldığından, anahtarları veya parolaları girmek zorunda kalmadan komut dosyamızı makinenizde çalıştırabilirsiniz. Bu, hızlı prototipleme için uygun bir yöntemdir ve hizmetlerimizin yetkili bir kimlik tarafından çağrılmasını sağlar. Her zaman olduğu gibi, bir IAM kullanıcısı veya rolü oluştururken IAM politikaları atarken en az ayrıcalık ilkesini izleyin.

Özetlemek gerekirse, aşağıdaki ön koşullara ihtiyacınız var:

  • Mikrofon, hoparlör ve internet bağlantısı olan bir PC, Mac veya Linux makinesi
  • The portaudio.h İşletim sisteminiz için pyaudio'nun çalışması için gerekli olan C kitaplığı (brew, apt get, wget)
  • AWS CLI'de aws configuration çalıştırılarak yapılandırılmış, uygun şekilde yetkilendirilmiş IAM kullanıcısı olan AWS CLI 2.0
  • piton 3.7+
  • Eşzamansız Amazon Transcribe Python SDK'sı
  • Aşağıdaki Python kitaplıkları:
    • boto3
    • amazon-transcribe
    • pyaudio
    • asyncio
    • concurrent

Çözümü uygula

Başlangıç ​​noktası olarak Python için eşzamansız Amazon Transcribe akış SDK'sına büyük ölçüde güveneceksiniz ve bu belirli SDK'nın üzerine inşa edeceksiniz. Python için akış SDK'sını denedikten sonra, akış mikrofonu kullanarak giriş pyaudio, ses verilerini işlemek için kullanılan yaygın olarak kullanılan bir Python açık kaynak kitaplığı. Ardından, çeviri ve metin okuma işlevimiz için Amazon Translate ve Amazon Polly'ye Boto3 çağrıları eklersiniz. Son olarak, çevrilmiş konuşmayı yeniden bilgisayarın hoparlörlerinden aktarırsınız. pyaudio. Python modülü concurrent size, iade edilen Amazon Polly konuşmanızı kesintisiz, engellenmeyen bir şekilde oynatmak için kendi eşzamansız iş parçacığında engelleme kodu çalıştırma olanağı sağlar.

Gerekli tüm modüllerimizi içe aktaralım, akış sınıflarını kopyalayalım ve bazı globalleri somutlaştıralım:

import boto3
 import asyncio
 import pyaudio
 import concurrent
 from amazon_transcribe.client import TranscribeStreamingClient
 from amazon_transcribe.handlers import TranscriptResultStreamHandler
 from amazon_transcribe.model import TranscriptEvent


 polly = boto3.client('polly', region_name = 'us-west-2')
 translate = boto3.client(service_name='translate', region_name='us-west-2', use_ssl=True)
 pa = pyaudio.PyAudio()

 #for mic stream, 1024 should work fine
 default_frames = 1024

 #current params are set up for English to Mandarin, modify to your liking
 params['source_language'] = "en"
 params['target_language'] = "zh"
 params['lang_code_for_polly'] = "cmn-CN"
 params['voice_id'] = "Zhiyu"
 params['lang_code_for_transcribe'] = "en-US"

İlk olarak, kullanırsın pyaudio giriş cihazının örnekleme oranını, cihaz indeksini ve kanal sayısını elde etmek için:

#try grabbing the default input device and see if we get lucky
 default_indput_device = pa.get_default_input_device_info()

 # verify this is your microphone device 
 print(default_input_device)

 #if correct then set it as your input device and define some globals
 input_device = default_input_device

 input_channel_count = input_device["maxInputChannels"]
 input_sample_rate = input_device["defaultSampleRate"]
 input_dev_index = input_device["index"]

Bu işe yaramazsa, aşağıdaki kodda gösterildiği gibi aygıtlarınız arasında geçiş yapabilir ve aygıtlarınızı yazdırabilir ve ardından aygıt bilgilerini almak için aygıt dizinini kullanabilirsiniz. pyaudio:

print ("Available devices:n")
 for i in range(0, pa.get_device_count()):
     info = pa.get_device_info_by_index(i)
     print (str(info["index"])  + ": t %s n t %s n" % (info["name"], p.get_host_api_info_by_index(info["hostApi"])["name"]))

 # select the correct index from the above returned list of devices, for example zero
 dev_index = 0 
 input_device = pa.get_device_info_by_index(dev_index)

 #set globals for microphone stream
 input_channel_count = input_device["maxInputChannels"]
 input_sample_rate = input_device["defaultSampleRate"]
 input_dev_index = input_device["index"]

Kullan channel_count, sample_rate, ve dev_index bir mikrofon akışında parametreler olarak. Bu akışın geri arama işlevinde, bir asyncio mikrofon akışının giriş baytlarını bir asyncio giriş kuyruğu. İle oluşturulan döngü ve input_queue nesnelerini not alın asyncio ve aşağıdaki kodda nasıl kullanıldıkları:

async def mic_stream():
     # This function wraps the raw input stream from the microphone forwarding
     # the blocks to an asyncio.Queue.
     
     loop = asyncio.get_event_loop()
     input_queue = asyncio.Queue()
     
     def callback(indata, frame_count, time_info, status):
         loop.call_soon_threadsafe(input_queue.put_nowait, indata)
         return (indata, pyaudio.paContinue)
         
     # Be sure to use the correct parameters for the audio stream that matches
     # the audio formats described for the source language you'll be using:
     # https://docs.aws.amazon.com/transcribe/latest/dg/streaming.html
     
     print(input_device)
     
     #Open stream
     stream = pa.open(format = pyaudio.paInt16,
                 channels = input_channel_count,
                 rate = int(input_sample_rate),
                 input = True,
                 frames_per_buffer = default_frames,
                 input_device_index = input_dev_index,
                 stream_callback=callback)
     # Initiate the audio stream and asynchronously yield the audio chunks
     # as they become available.
     stream.start_stream()
     print("started stream")
     while True:
         indata = await input_queue.get()
         yield indata

Şimdi jeneratör işlevi mic_stream() çağrılırsa, giriş kuyruğunda mikrofon giriş verileri olduğu sürece sürekli olarak giriş baytları verir.

Artık mikrofondan giriş baytlarını nasıl alacağınızı bildiğinize göre, Amazon Polly çıkış ses baytlarının bir hoparlör çıkış akışına nasıl yazılacağına bakalım:

#text will come from MyEventsHandler
 def aws_polly_tts(text):

     response = polly.synthesize_speech(
         Engine = 'standard',
         LanguageCode = params['lang_code_for_polly'],
         Text=text,
         VoiceId = params['voice_id'],
         OutputFormat = "pcm",
     )
     output_bytes = response['AudioStream']
     
     #play to the speakers
     write_to_speaker_stream(output_bytes)
     
 #how to write audio bytes to speakers

 def write_to_speaker_stream(output_bytes):
     """Consumes bytes in chunks to produce the response's output'"""
     print("Streaming started...")
     chunk_len = 1024
     channels = 1
     sample_rate = 16000
     
     if output_bytes:
         polly_stream = pa.open(
                     format = pyaudio.paInt16,
                     channels = channels,
                     rate = sample_rate,
                     output = True,
                     )
         #this is a blocking call - will sort this out with concurrent later
         while True:
             data = output_bytes.read(chunk_len)
             polly_stream.write(data)
             
         #If there's no more data to read, stop streaming
             if not data:
                 output_bytes.close()
                 polly_stream.stop_stream()
                 polly_stream.close()
                 break
         print("Streaming completed.")
     else:
         print("Nothing to stream.")

Şimdi gönderide oluşturduğunuz şeyi genişletelim Python için Eşzamansız Amazon Transcribe Akış SDK'sı. Aşağıdaki kodda, kullanarak bir yürütücü nesnesi yaratırsınız. ThreadPoolExecutor eşzamanlı üç işçi ile alt sınıf. Daha sonra EventHandler'da kesin olarak döndürülen döküme bir Amazon Translate çağrısı eklersiniz ve bu çevrilen metni, yürütücü nesneyi ve aws_polly_tts() bir işleve asyncio ile döngü loop.run_in_executor(), Amazon Polly işlevimizi (çevrilmiş giriş metniyle birlikte) bir sonraki yinelemenin başlangıcında eşzamansız olarak çalıştırır. asyncio döngü.

#use concurrent package to create an executor object with 3 workers ie threads
 executor = concurrent.futures.ThreadPoolExecutor(max_workers=3)

 class MyEventHandler(TranscriptResultStreamHandler):
     async def handle_transcript_event(self, transcript_event: TranscriptEvent):

         #If the transcription is finalized, send it to translate
 
         results = transcript_event.transcript.results
         if len(results) > 0:
             if len(results[0].alternatives) > 0:
                 transcript = results[0].alternatives[0].transcript
                 print("transcript:", transcript)

                 print(results[0].channel_id)
                 if hasattr(results[0], "is_partial") and results[0].is_partial == False:
                     
                     #translate only 1 channel. the other channel is a duplicate
                     if results[0].channel_id == "ch_0":
                         trans_result = translate.translate_text(
                             Text = transcript,
                             SourceLanguageCode = params['source_language'],
                             TargetLanguageCode = params['target_language']
                         )
                         print("translated text:" + trans_result.get("TranslatedText"))
                         text = trans_result.get("TranslatedText")

                         #we run aws_polly_tts with a non-blocking executor at every loop iteration
                         await loop.run_in_executor(executor, aws_polly_tts, text)  

Sonunda, loop_me() işlev. İçinde sen tanımla write_chunks(), bir Amazon Transcribe akışını argüman olarak alır ve eşzamansız olarak akış mikrofon girişi parçalarını buna yazar. sonra kullanırsın MyEventHandler() argümanı olarak çıktı transkripsiyon akışı ile ve bir işleyici nesnesi oluşturun. O zaman beklemeyi kullanırsın asyncio.gather() ve bu eşyordamların nihai geleceklerini işlemek için write_chunks() ve işleyiciyi handle_events() yöntemiyle iletin. Son olarak, tüm olay döngülerini toplarsınız ve loop_me() ile çalışmak run_until_complete(). Aşağıdaki koda bakın:

async def loop_me():
 # Setup up our client with our chosen AWS region

     client = TranscribeStreamingClient(region="us-west-2")
     stream = await client.start_stream_transcription(
         language_code=params['lang_code_for_transcribe'],
         media_sample_rate_hz=int(device_info["defaultSampleRate"]),
         number_of_channels = 2,
         enable_channel_identification=True,
         media_encoding="pcm",
     )
     recorded_frames = []
     async def write_chunks(stream):
         
         # This connects the raw audio chunks generator coming from the microphone
         # and passes them along to the transcription stream.
         print("getting mic stream")
         async for chunk in mic_stream():
             t.tic()
             recorded_frames.append(chunk)
             await stream.input_stream.send_audio_event(audio_chunk=chunk)
             t.toc("chunks passed to transcribe: ")
         await stream.input_stream.end_stream()

     handler = MyEventHandler(stream.output_stream)
     await asyncio.gather(write_chunks(stream), handler.handle_events())

 #write a proper while loop here
 loop = asyncio.get_event_loop()
 loop.run_until_complete(loop_me())
 loop.close()

Yukarıdaki kod hatasız bir şekilde birlikte çalıştırıldığında, mikrofona konuşabilir ve sesinizin Mandarin Çincesine çevrildiğini hızlı bir şekilde duyabilirsiniz. Amazon Transcribe ve Amazon Translate için otomatik dil algılama özelliği, desteklenen herhangi bir giriş dilini hedef dile çevirir. Oldukça uzun bir süre konuşabilirsiniz ve işlev çağrılarının engellenmeyen doğası nedeniyle, tüm konuşma girdileriniz çevrilir ve konuşulur, bu da bunu canlı konuşmaları çevirmek için mükemmel bir araç haline getirir.

Sonuç

Bu gönderi, tam olarak yönetilen bu üç AWS API'sinin birlikte sorunsuz bir şekilde nasıl çalışabileceğini gösterse de, bu hizmetleri, mevcut maliyetin çok küçük bir kısmı için hizmetler veya çok dilli kapalı altyazı gibi ortamlar için çok dilli destek sağlamak üzere başka şekillerde nasıl kullanabileceğinizi düşünmenizi öneririz. . Tıp, ticaret ve hatta diplomatik ilişkiler, sürekli gelişen, düşük maliyetli, az bakım gerektiren bir çeviri hizmetinden yararlanabilir.

Bu kullanım senaryosu için kavram kodu tabanı kanıtı hakkında daha fazla bilgi için sayfamıza göz atın. Github.


Yazarlar Hakkında

Amazon Transcribe, Amazon Translate ve Amazon Polly PlatoBlockchain Veri Zekası ile dil engellerini aşın. Dikey Arama. Ai.Michael Trans Amazon Web Services'de Envision Engineering ekibiyle birlikte bir Çözüm Mimarıdır. Teknik rehberlik sağlar ve mümkün olanın sanatını AWS'de göstererek müşterilerin yenilik yapma becerilerini hızlandırmalarına yardımcı olur. Müşterilerimiz için AI/ML ve IoT etrafında çok sayıda prototip oluşturdu. Twitter'da @Mike_Trann ile iletişime geçebilirsiniz.

Amazon Transcribe, Amazon Translate ve Amazon Polly PlatoBlockchain Veri Zekası ile dil engellerini aşın. Dikey Arama. Ai.Cameron Wilkes AWS Industry Accelerator ekibinde bir Prototip Oluşturma Mimarıdır. Ekipteyken, AWS'de ML'nin "Mümkün olanın Sanatı"nı göstermek için müşterilere birkaç ML tabanlı prototip teslim etti. Müzik prodüksiyonu, arazi sürüşü ve tasarımdan hoşlanıyor.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi