Menembus hambatan bahasa dengan Amazon Transcribe, Amazon Translate, dan Amazon Polly PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Menembus hambatan bahasa dengan Amazon Transcribe, Amazon Translate, dan Amazon Polly

Bayangkan seorang ahli bedah melakukan panggilan video dengan pasien di seluruh dunia tanpa perlu penerjemah manusia. Bagaimana jika startup yang masih baru dapat dengan mudah memperluas produk mereka melintasi batas dan ke pasar geografis baru dengan menawarkan dukungan dan penjualan pelanggan multibahasa yang lancar, akurat, dan semuanya tanpa memerlukan penerjemah langsung? Apa yang terjadi pada bisnis Anda ketika Anda tidak lagi terikat oleh bahasa?

Sudah umum hari ini untuk mengadakan pertemuan virtual dengan tim dan pelanggan internasional yang berbicara dalam banyak bahasa berbeda. Apakah itu rapat internal atau eksternal, makna sering hilang dalam diskusi yang rumit dan Anda mungkin menghadapi hambatan bahasa yang mencegah Anda menjadi seefektif mungkin.

Dalam posting ini, Anda akan mempelajari cara menggunakan tiga layanan AWS yang terkelola sepenuhnya (Amazon Transkripsikan, Amazon Terjemahan, dan Amazon Polly) untuk menghasilkan solusi penerjemah ucapan-ke-ucapan hampir real-time yang dapat dengan cepat menerjemahkan input suara langsung pembicara sumber ke dalam bahasa target yang diucapkan, akurat, diterjemahkan, semuanya tanpa pengalaman pembelajaran mesin (ML).

Ikhtisar solusi

Penerjemah kami terdiri dari tiga layanan AWS ML terkelola sepenuhnya yang bekerja bersama dalam satu skrip Python dengan menggunakan AWS SDK untuk Python (Boto3) untuk terjemahan teks dan bagian text-to-speech kami, dan SDK streaming asinkron untuk transkripsi input audio.

Amazon Transcribe: Streaming ucapan ke teks

Layanan pertama yang Anda gunakan di tumpukan kami adalah Amazon Transcribe, layanan ucapan-ke-teks yang terkelola sepenuhnya yang mengambil ucapan masukan dan menyalinnya ke teks. Amazon Transcribe memiliki metode penyerapan, batch, atau streaming yang fleksibel, karena menerima file audio yang disimpan atau data audio streaming. Dalam posting ini, Anda menggunakan SDK streaming Amazon Transcribe asinkron untuk Python, yang menggunakan protokol streaming HTTP/2 untuk melakukan streaming audio langsung dan menerima transkripsi langsung.

Saat kami pertama kali membuat prototipe ini, penyerapan streaming Amazon Transcribe tidak mendukung deteksi bahasa otomatis, tetapi hal ini tidak lagi berlaku mulai November 2021. Penyerapan batch dan streaming sekarang mendukung deteksi bahasa otomatis untuk semua bahasa yang didukung. Dalam posting ini, kami menunjukkan bagaimana solusi berbasis parameter melalui desain tanpa parameter multi-bahasa yang mulus dimungkinkan melalui penggunaan deteksi bahasa otomatis streaming. Setelah segmen ucapan kami yang ditranskripsi dikembalikan sebagai teks, Anda mengirim permintaan ke Amazon Translate untuk menerjemahkan dan mengembalikan hasilnya di Amazon Transcribe kami EventHandler Metode.

Amazon Translate: API terjemahan yang tercanggih dan terkelola sepenuhnya

Berikutnya dalam tumpukan kami adalah Amazon Translate, layanan terjemahan mesin saraf yang memberikan terjemahan bahasa yang cepat, berkualitas tinggi, terjangkau, dan dapat disesuaikan. Mulai Juni 2022, Amazon Translate mendukung terjemahan dalam 75 bahasa, dengan pasangan bahasa baru dan peningkatan yang terus dilakukan. Amazon Translate menggunakan model pembelajaran mendalam yang dihosting pada arsitektur AWS Cloud yang sangat skalabel dan tangguh untuk memberikan terjemahan yang akurat dengan cepat baik secara real time atau berkelompok, tergantung pada kasus penggunaan Anda. Menggunakan Amazon Translate sangat mudah dan tidak memerlukan pengelolaan arsitektur atau keterampilan ML yang mendasarinya. Amazon Translate memiliki beberapa fitur, seperti membuat dan menggunakan a terminologi khusus untuk menangani pemetaan antara istilah khusus industri. Untuk informasi lebih lanjut tentang batas layanan Amazon Translate, lihat Pedoman dan batasan. Setelah aplikasi menerima teks terjemahan dalam bahasa target kami, aplikasi akan mengirimkan teks terjemahan ke Amazon Polly untuk pemutaran audio terjemahan segera.

Amazon Polly: API text-to-speech yang terkelola sepenuhnya

Terakhir, Anda mengirim teks terjemahan ke Amazon Polly, layanan text-to-speech yang terkelola sepenuhnya yang dapat mengirim kembali respons klip audio yang nyata untuk pemutaran streaming langsung atau berkelompok dan disimpan di Layanan Penyimpanan Sederhana Amazon (Amazon S3) untuk digunakan nanti. Anda dapat mengontrol berbagai aspek ucapan seperti pengucapan, volume, nada, kecepatan bicara, dan lainnya menggunakan standar Bahasa Markup Sintesis Pidato (SSML).

Anda dapat mensintesis ucapan untuk Amazon Polly tertentu suara saraf menggunakan gaya Newscaster untuk membuatnya terdengar seperti penyiar TV atau radio. Anda juga dapat mendeteksi saat kata atau kalimat tertentu dalam teks diucapkan berdasarkan metadata yang disertakan dalam aliran audio. Ini memungkinkan pengembang untuk menyinkronkan penyorotan grafis dan animasi, seperti gerakan bibir avatar, dengan ucapan yang disintesis.

Anda dapat mengubah pengucapan kata-kata tertentu, seperti nama perusahaan, akronim, kata asing, atau neologisme, misalnya โ€œP!nkโ€, โ€œROTFLโ€, atau โ€œC'est la vieโ€ (bila diucapkan dalam bahasa non-Perancis suara), menggunakan leksikon khusus.

Tinjauan arsitektur

Diagram berikut menggambarkan arsitektur solusi kami.

Diagram ini menunjukkan aliran data dari perangkat klien ke Amazon Transcribe, Amazon Translate, dan Amazon Polly

Alur kerjanya adalah sebagai berikut:

  1. Audio diserap oleh Python SDK.
  2. Amazon Polly mengonversi ucapan menjadi teks, dalam 39 bahasa yang memungkinkan.
  3. Amazon Translate mengonversi bahasa.
  4. Amazon Live Transcribe mengonversi teks menjadi ucapan.
  5. Audio dikeluarkan ke speaker.

Prasyarat

Anda perlu menyiapkan mesin host dengan mikrofon, speaker, dan koneksi internet yang andal. Laptop modern seharusnya berfungsi dengan baik untuk ini karena tidak diperlukan perangkat keras tambahan. Selanjutnya, Anda perlu mengatur mesin dengan beberapa alat perangkat lunak.

Anda harus menginstal Python 3.7+ untuk menggunakan SDK streaming Amazon Transcribe asinkron dan untuk modul Python yang disebut pyaudio, yang Anda gunakan untuk mengontrol mikrofon dan speaker mesin. Modul ini bergantung pada pustaka C yang disebut portaudio.h. Jika Anda mengalami masalah dengan pyaudio kesalahan, kami sarankan untuk memeriksa OS Anda untuk melihat apakah Anda memiliki portaudio.h perpustakaan diinstal.

Untuk otorisasi dan otentikasi panggilan layanan, Anda membuat Identitas AWS dan Manajemen Akses (IAM) peran layanan dengan izin untuk memanggil layanan AWS yang diperlukan. Dengan mengkonfigurasi Antarmuka Baris Perintah AWS (AWS CLI) dengan peran layanan IAM ini, Anda dapat menjalankan skrip kami di mesin Anda tanpa harus memasukkan kunci atau kata sandi, karena pustaka AWS ditulis untuk menggunakan kredensial pengguna AWS CLI yang dikonfigurasi. Ini adalah metode yang nyaman untuk pembuatan prototipe cepat dan memastikan layanan kami dipanggil oleh identitas resmi. Seperti biasa, ikuti prinsip hak istimewa paling rendah saat menetapkan kebijakan IAM saat membuat pengguna atau peran IAM.

Untuk meringkas, Anda memerlukan prasyarat berikut:

  • Mesin PC, Mac, atau Linux dengan mikrofon, speaker, dan koneksi internet
  • Grafik portaudio.h C library untuk OS Anda (brew, apt get, wget), yang diperlukan agar pyaudio berfungsi
  • AWS CLI 2.0 dengan pengguna IAM resmi yang dikonfigurasi dengan benar dengan menjalankan aws configure di AWS CLI
  • Piton 3.7+
  • Amazon Transcribe Python SDK asinkron
  • Pustaka Python berikut:
    • boto3
    • amazon-transcribe
    • pyaudio
    • asyncio
    • concurrent

Terapkan solusinya

Anda akan sangat bergantung pada Amazon Transcribe streaming SDK untuk Python sebagai titik awal, dan akan membangun di atas SDK khusus tersebut. Setelah Anda bereksperimen dengan streaming SDK untuk Python, Anda menambahkan mikrofon streaming masukan dengan menggunakan pyaudio, pustaka sumber terbuka Python yang umum digunakan untuk memanipulasi data audio. Kemudian Anda menambahkan panggilan Boto3 ke Amazon Translate dan Amazon Polly untuk fungsi terjemahan dan text-to-speech kami. Akhirnya, Anda mengalirkan pidato yang diterjemahkan melalui speaker komputer lagi dengan pyaudio. Modul Python concurrent memberi Anda kemampuan untuk menjalankan kode pemblokiran di utas asinkronnya sendiri untuk memutar kembali ucapan Amazon Polly Anda dengan cara yang mulus dan tanpa pemblokiran.

Mari impor semua modul yang diperlukan, transkripsikan kelas streaming, dan buat instance beberapa global:

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"

Pertama, Anda menggunakan pyaudio untuk mendapatkan laju pengambilan sampel perangkat input, indeks perangkat, dan jumlah saluran:

#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"]

Jika ini tidak berhasil, Anda juga dapat mengulang dan mencetak perangkat Anda seperti yang ditunjukkan dalam kode berikut, dan kemudian menggunakan indeks perangkat untuk mengambil informasi perangkat dengan 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"]

Kau gunakan channel_count, sample_rate, dan dev_index sebagai parameter dalam aliran mic. Dalam fungsi panggilan balik aliran itu, Anda menggunakan asyncio nonblocking thread-safe callback untuk memasukkan byte input aliran mikrofon ke dalam asyncio antrian masukan. Catat objek loop dan input_queue yang dibuat dengan asyncio dan bagaimana mereka digunakan dalam kode berikut:

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

Sekarang ketika generator berfungsi mic_stream() dipanggil, itu terus menghasilkan byte input selama ada data input mikrofon dalam antrian input.

Sekarang setelah Anda mengetahui cara mendapatkan byte input dari mikrofon, mari kita lihat cara menulis byte audio output Amazon Polly ke aliran output speaker:

#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.")

Sekarang mari kita kembangkan apa yang Anda buat di pos Amazon Transcribe Streaming SDK asinkron untuk Python. Dalam kode berikut, Anda membuat objek eksekutor menggunakan: ThreadPoolExecutor subclass dengan tiga pekerja dengan bersamaan. Anda kemudian menambahkan panggilan Amazon Translate pada transkrip akhir yang dikembalikan di EventHandler dan meneruskan teks terjemahan itu, objek pelaksana, dan aws_polly_tts() berfungsi menjadi asyncio lingkaran dengan loop.run_in_executor(), yang menjalankan fungsi Amazon Polly kami (dengan teks masukan yang diterjemahkan) secara asinkron di awal iterasi berikutnya asyncio Loop.

#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)  

Akhirnya, kita punya loop_me() fungsi. Di dalamnya, Anda mendefinisikan write_chunks(), yang mengambil aliran Amazon Transcribe sebagai argumen dan secara asinkron menulis potongan input mic streaming ke dalamnya. Anda kemudian menggunakan MyEventHandler() dengan aliran transkripsi output sebagai argumennya dan buat objek handler. Kemudian Anda menggunakan menunggu dengan asyncio.gather() dan berikan write_chunks() dan handler dengan metode handle_events() untuk menangani masa depan coroutine ini. Terakhir, Anda mengumpulkan semua loop acara dan loop loop_me() berfungsi dengan run_until_complete(). Lihat kode berikut:

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()

Ketika kode sebelumnya dijalankan bersama-sama tanpa kesalahan, Anda dapat berbicara ke mikrofon dan dengan cepat mendengar suara Anda diterjemahkan ke dalam bahasa Mandarin. Fitur deteksi bahasa otomatis untuk Amazon Transcribe dan Amazon Translate menerjemahkan semua bahasa input yang didukung ke dalam bahasa target. Anda dapat berbicara untuk beberapa waktu dan karena sifat panggilan fungsi yang tidak memblokir, semua input ucapan Anda diterjemahkan dan diucapkan, menjadikannya alat yang sangat baik untuk menerjemahkan pidato langsung.

Kesimpulan

Meskipun postingan ini menunjukkan bagaimana ketiga AWS API yang terkelola sepenuhnya ini dapat berfungsi bersama dengan mulus, kami mendorong Anda untuk memikirkan tentang bagaimana Anda dapat menggunakan layanan ini dengan cara lain untuk memberikan dukungan multibahasa untuk layanan atau media seperti teks tertutup multibahasa untuk sebagian kecil dari biaya saat ini . Kedokteran, bisnis, dan bahkan hubungan diplomatik semuanya dapat memperoleh manfaat dari layanan terjemahan yang terus meningkat, berbiaya rendah, dan rendah pemeliharaan.

Untuk informasi lebih lanjut tentang bukti basis kode konsep untuk kasus penggunaan ini, lihat kami Github.


Tentang Penulis

Menembus hambatan bahasa dengan Amazon Transcribe, Amazon Translate, dan Amazon Polly PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Michael Trans adalah Arsitek Solusi dengan tim Envision Engineering di Amazon Web Services. Dia memberikan panduan teknis dan membantu pelanggan mempercepat kemampuan mereka untuk berinovasi dengan menunjukkan seni dari kemungkinan di AWS. Dia telah membangun beberapa prototipe seputar AI/ML, dan IoT untuk pelanggan kami. Anda dapat menghubungi saya @Mike_Trann di Twitter.

Menembus hambatan bahasa dengan Amazon Transcribe, Amazon Translate, dan Amazon Polly PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Cameron Wilkes adalah Arsitek Pembuatan Prototipe di tim AWS Industry Accelerator. Saat berada di tim, dia mengirimkan beberapa prototipe berbasis ML kepada pelanggan untuk mendemonstrasikan โ€œSeni Kemungkinanโ€ ML di AWS. Dia menikmati produksi musik, off-road dan desain.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS