Quotes Keberhasilan

Menambahkan suara ke proyek CircuitPython menggunakan Amazon Polly – idk.dev

Adafruit PyPortal menampilkan kutipan sambil mensintesis dan memainkan pidato menggunakan Amazon Polly.

Sebagai sarana komunikasi alami, suara adalah cara yang ampuh untuk memanusiakan pengalaman. Bagaimana jika Anda bisa membuat sesuatu bicara? Panduan ini membahas cara memanfaatkan cloud untuk menambahkan suara ke mikrokontroler yang tidak tersedia. Gunakan itu untuk mengembangkan ide-ide yang lebih maju, seperti pemanggang roti berbicara yang mendorong kebiasaan sarapan yang sehat atau tanaman rumah yang dapat mengekspresikan kebutuhannya.

Proyek ini menggunakan Adafruit PyPortal, sebuah layar sentuh sumber terbuka IoT yang diprogram menggunakan CircuitPython, versi ringan Python yang bekerja pada perangkat keras tertanam. Anda menyalin kode Anda ke PyPortal seperti yang Anda lakukan pada thumb drive dan itu berjalan. Kutipan acak dari PaperQuotes API secara berkala ditampilkan pada PyPortal LCD.

Mikrokontroler tidak dapat melakukan sintesis suara sendiri sehingga saya menggunakan Amazon Polly, layanan teks alami untuk sintesis suara, untuk menghasilkan audio. Menambahkan ucapan juga memperluas aksesibilitas bagi yang tunanetra. Proyek ini mencakup contoh untuk meminta ucapan sewenang-wenang di samping kutipan acak. Gunakan contoh ini untuk menambahkan suara ke proyek CircuitPython apa pun.

Adafruit PyPortal, speaker eksternal, dan kartu microSD.

Adafruit PyPortal, speaker eksternal, dan kartu microSD.

Saya menyebarkan backend ke AWS Cloud menggunakan AWS Serverless Application Repository. Kode pada PyPortal membuat panggilan REST ke backend untuk mengambil kutipan dan mensintesis audio ucapan untuk pemutaran pada perangkat.

Prasyarat

Anda perlu yang berikut ini untuk menyelesaikan proyek:

Menyebarkan aplikasi backend

Diagram arsitektur backend tanpa server saat meminta sintesis pidato string teks.

Diagram arsitektur backend tanpa server saat meminta sintesis pidato string teks.

Backend tanpa server terdiri dari titik akhir Amazon API Gateway yang menjalankan fungsi AWS Lambda. Jika dipanggil dengan objek JSON yang berisi teks dan voiceId atribut, menggunakan Amazon Polly untuk mensintesis pidato dan mengunggah file MP3 sebagai objek publik ke Amazon S3. Setelah selesai, ia mengembalikan URL untuk mengunduh file audio. Itu juga memproses teks yang dikirimkan dan menambahkan baris kembali sehingga itu bisa muncul terbungkus teks ketika ditampilkan di PyPortal. Untuk daftar suara lengkap, lihat dokumentasi Amazon Polly. Contoh respons:

Untuk mengambil kutipan alih-alih bidang teks, panggil titik akhir dengan daftar tag yang dipisahkan koma seperti yang ditunjukkan pada diagram berikut. Fungsi Lambda kemudian memanggil API PaperQuotes. Itu mengambil hingga 50 kutipan per tag dan memilih satu acak untuk disintesis sebagai ucapan. Seperti halnya teks arbitrer, ia mengembalikan URL dan representasi kutipan yang dibungkus teks.

Diagram arsitektur backend tanpa server saat meminta penawaran acak dari PaperQuotes API untuk disintesis sebagai ucapan.

Diagram arsitektur backend tanpa server saat meminta penawaran acak dari PaperQuotes API untuk disintesis sebagai ucapan.

Saya menggunakan AWS Serverless Application Model (AWS SAM) untuk membuat template backend. Meskipun dapat digunakan menggunakan AWS SAM CLI, Anda juga dapat menggunakan dari Konsol Manajemen AWS:

  1. Hasilkan kunci PaperQuotes API gratis di paperquotes.com. Backend tanpa server mengharuskan ini untuk mengambil kutipan.
  2. Arahkan ke aplikasi aws-serverless-pyportal-polly di AWS Serverless Application Repository.
  3. Dibawah Pengaturan aplikasi, masukkan parameter, PaperQuotesAPIKey.
  4. Memilih Menyebarkan.
  5. Setelah selesai, pilih Lihat CloudFormation Stack.
  6. Pilih menu Keluaran tab dan buat catatan dari SpeechApiUrl. Ini diperlukan untuk mengkonfigurasi PyPortal.
  7. Klik tautan yang tercantum untuk SpeechApiKey dalam Keluaran tab.
  8. Klik Menunjukkan untuk mengungkapkan Kunci API. Catat ini. Ini diperlukan untuk mengautentikasi permintaan dari PyPortal ke SpeechApiUrl.

Pengaturan PyPortal

Instruksi berikut berjalan melalui menginstal versi terbaru dari perpustakaan dan firmware Adafruit CircuityPython. Ini juga menunjukkan cara mengaktifkan modul speaker eksternal.

  1. Ikuti instruksi ini dari Adafruit untuk menginstal versi terbaru dari loadloader CircuitPython. Pada saat penulisan, versi terbaru adalah 5.3.0.
  2. Ikuti petunjuk ini untuk menginstal bundel perpustakaan Adafruit CircuitPython terbaru. saya menggunakan bundel versi 5.x.
  3. Masukkan kartu microSD ke dalam slot yang terletak di bagian belakang perangkat.
  4. Potong jumper pad di bagian belakang perangkat yang berlabel A0. Ini memungkinkan Anda untuk menggunakan speaker eksternal alih-alih speaker internal.
  5. Pasang konektor speaker eksternal ke port berlabel PEMBICARA di bagian belakang perangkat.
  6. Secara opsional instal Editor Mu, editor kode multi-platform, dan debugger serial yang kompatibel dengan papan Adafruit CircuitPython. Ini dapat membantu dengan masalah pemecahan masalah.
  7. Opsional jika Anda memiliki printer 3D di rumah, Anda dapat mencetak kasing untuk PyPortal Anda. Ini dapat melindungi dan menampilkan proyek Anda.

Kode PyPortal

Seperti halnya Python biasa, CircuitPython tidak perlu dikompilasi untuk dieksekusi. Anda dapat mem-flash firmware baru di PyPortal dengan menyalin file Python dan aset yang diperlukan ke volume yang terpasang. Bootloader menjalankan code.py kapan saja perangkat mulai atau file apa pun diperbarui.

  1. Gunakan kabel USB untuk menyambungkan PyPortal ke komputer Anda dan tunggu hingga tersedia CIRCUITPY volume yang baru.
  2. Unduh proyek dari GitHub. Di dalam proyek, salin isi / circuit-python ke volume CIRCUITPY.
  3. Di dalam volume, buka dan edit file secrets.py. Sertakan kredensial Wi-Fi Anda bersama dengan SpeechApiKey dan SpeechApiUrl Titik akhir API Gateway. Ini dapat ditemukan di bawah Keluaran dalam tumpukan AWS CloudFormation yang dibuat oleh AWS Serverless Application Repository.
  4. Simpan file, dan perangkat restart. Diperlukan beberapa saat untuk terhubung ke Wi-Fi dan membuat permintaan pertama.
    Secara opsional, jika Anda menginstal Editor Mu, Anda dapat mengklik “Serial” untuk mengikuti log perangkat.

PyPortal membutuhkan beberapa saat untuk terhubung ke jaringan Wi-Fi dan membuat permintaan pertamanya. Pada kesuksesan, Anda mendengarnya menyambut Anda dan menggambarkan dirinya sendiri. Interval default diatur untuk kemudian menampilkan dan membaca kutipan setiap lima menit.

Memahami kode CircuitPython

Lihat bagian bawah circuit-python / code.py dari proyek GitHub. Ketika PyPortal terhubung ke Wi-Fi, hal pertama yang dilakukannya adalah mensintesis teks “hello world” yang sewenang-wenang untuk ditampilkan. Itu kemudian mulai secara berkala menampilkan dan “berbicara” kutipan.

# Hubungkan ke WiFi
cetak (“Menghubungkan ke WiFi …”)
wifi.connect ()
cetak (“Terhubung!”)

displayQuote (“Siap!”)

speakText ('Hello world! Saya seorang Python Adafruit menjalankan Circuit Python berbicara kepada Anda menggunakan AWS Serverless', 'Joanna')

sementara Benar:
speakQuote ('kesetaraan, kemanusiaan', 'Joanna')
time.sleep (60 * rahasia ('interval'))

Keduanya speakText dan berbicaraKutipan panggilan fungsi synthesizeSpeech fungsi. Perbedaannya adalah apakah teks atau tag diteruskan ke API.

def speakText (teks, suara):
data = {“text”: text, “voiceId”: voice}
synthesizeSpeech (data)

def speakQuote (tag, voice):
data = {“tag”: tag, “voiceId”: voice}
synthesizeSpeech (data)

Itu synthesizeSpeech fungsi memposting data ke titik akhir API Gateway. Kemudian memanggil fungsi Lambda dan mengembalikan URL MP3 dan teks yang diformat. Itu Unduh berkas fungsi dipanggil untuk mengambil file MP3 dan menyimpannya di kartu SD. displayQuote dipanggil untuk menampilkan kutipan pada LCD. Akhirnya, playMP3 membuka file dan memutar audio ucapan menggunakan speaker internal atau eksternal.

def synthesizeSpeech (data):
response = postToAPI (rahasia ('endpoint'), data)
downloadfile (response ('url'), '/sd/cache.mp3')
displayQuote (response ('text'))
playMP3 (“/ sd / cache.mp3”)

Memodifikasi fungsi Lambda

Aplikasi tanpa server mencakup fungsi Lambda, SynthesizeSpeechFunction, yang dapat dimodifikasi secara langsung di konsol Lambda. Templat AWS SAM yang digunakan untuk menyebarkan aplikasi AWS Serverless Application Repository menambahkan kebijakan untuk mengakses bucket S3 tempat audio disimpan. Ini juga memberikan akses ke Amazon Polly untuk mensintesis ucapan. Itu juga menambahkan token PaperQuote API sebagai variabel lingkungan dan menetapkan API Gateway sebagai sumber acara.

Fungsi SynthesizeSpeech:
Tipe: AWS :: Serverless :: Function
Properti:
CodeUri: lambda_functions / SynthesizeSpeech /
Handler: app.lambda_handler
Runtime: python3.8
Kebijakan:
– S3FullAccessPolicy:
BucketName:! Sub “$ {AWS :: StackName} -audio”
– Versi: '2012-10-17'
Pernyataan:
– Efek: Izinkan
Tindakan:
– polly: *
Sumberdaya: '*'
Lingkungan Hidup:
Variabel:
BUCKET_NAME:! Sub “$ {AWS :: StackName} -audio”
PAPER_QUOTES_TOKEN:! Ref PaperQuotesAPIKey
Acara:
Pidato:
Jenis: Api
Properti:
RestApiId:! Ref SpeechApi
Jalan: / pidato
Metode: posting

Untuk mengedit fungsi Lambda, navigasikan kembali ke tumpukan CloudFormation dan klik pada Fungsi SpeechSintesis di bawah Sumber daya tab.

Dari sini, Anda dapat mengedit kode fungsi Lambda secara langsung. Mengklik Menyimpan menyebarkan kode baru.

Itu getQuotes fungsi dipanggil untuk mengambil kutipan dari API PaperQuotes. Anda dapat mengubah ini untuk menelepon dari sumber yang berbeda, seperti pilihan kutipan khusus. Cobalah memodifikasinya untuk mengambil posting media sosial atau mempelajari pertanyaan.

Kesimpulan

Saya menunjukkan cara menambahkan teks yang terdengar alami ke pidato pada mikrokontroler menggunakan backend serverless. Ini dilakukan dengan menyebarkan aplikasi melalui AWS Serverless Application Repository. API yang digunakan menggunakan API Gateway untuk secara aman menjalankan fungsi Lambda yang mengambil kutipan dari PaperQuotes API dan menghasilkan pidato menggunakan Amazon Polly. Audio ucapan diunggah ke S3.

Saya kemudian menunjukkan cara memprogram mikrokontroler, Python Adafruit, menggunakan CircuitPython. Kode secara berkala memanggil API tanpa server untuk mengambil kuotasi dan mengunduh audio ucapan untuk pemutaran. Kode sampel juga menunjukkan mensintesis teks sewenang-wenang, yang berarti dapat digunakan untuk proyek apa pun yang Anda bayangkan. Lihat panduan saya sebelumnya tentang menggunakan PyPortal untuk membuat tampilan cuaca Mars untuk inspirasi.

Related Articles

Tinggalkan Balasan

Close
Close