6.0 KiB
Ucapan ke Teks - Raspberry Pi
Dalam bahagian pelajaran ini, anda akan menulis kod untuk menukar ucapan dalam audio yang dirakam kepada teks menggunakan perkhidmatan ucapan.
Hantar audio ke perkhidmatan ucapan
Audio boleh dihantar ke perkhidmatan ucapan menggunakan REST API. Untuk menggunakan perkhidmatan ucapan, pertama anda perlu meminta token akses, kemudian gunakan token tersebut untuk mengakses REST API. Token akses ini akan tamat tempoh selepas 10 minit, jadi kod anda perlu memintanya secara berkala untuk memastikan ia sentiasa terkini.
Tugasan - dapatkan token akses
-
Buka projek
smart-timer
pada Pi anda. -
Buang fungsi
play_audio
. Fungsi ini tidak lagi diperlukan kerana anda tidak mahu pemasa pintar mengulangi apa yang anda katakan. -
Tambahkan import berikut di bahagian atas fail
app.py
:import requests
-
Tambahkan kod berikut di atas gelung
while True
untuk mengisytiharkan beberapa tetapan untuk perkhidmatan ucapan:speech_api_key = '<key>' location = '<location>' language = '<language>'
Gantikan
<key>
dengan kunci API untuk sumber perkhidmatan ucapan anda. Gantikan<location>
dengan lokasi yang anda gunakan semasa mencipta sumber perkhidmatan ucapan.Gantikan
<language>
dengan nama lokal untuk bahasa yang akan anda gunakan, contohnyaen-GB
untuk Bahasa Inggeris, atauzn-HK
untuk Bahasa Kantonis. Anda boleh mencari senarai bahasa yang disokong dan nama lokal mereka dalam dokumentasi sokongan bahasa dan suara di Microsoft docs. -
Di bawah ini, tambahkan fungsi berikut untuk mendapatkan token akses:
def get_access_token(): headers = { 'Ocp-Apim-Subscription-Key': speech_api_key } token_endpoint = f'https://{location}.api.cognitive.microsoft.com/sts/v1.0/issuetoken' response = requests.post(token_endpoint, headers=headers) return str(response.text)
Fungsi ini memanggil endpoint pengeluaran token, menghantar kunci API sebagai header. Panggilan ini mengembalikan token akses yang boleh digunakan untuk memanggil perkhidmatan ucapan.
-
Di bawah ini, isytiharkan fungsi untuk menukar ucapan dalam audio yang dirakam kepada teks menggunakan REST API:
def convert_speech_to_text(buffer):
-
Di dalam fungsi ini, tetapkan URL REST API dan header:
url = f'https://{location}.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1' headers = { 'Authorization': 'Bearer ' + get_access_token(), 'Content-Type': f'audio/wav; codecs=audio/pcm; samplerate={rate}', 'Accept': 'application/json;text/xml' } params = { 'language': language }
Fungsi ini membina URL menggunakan lokasi sumber perkhidmatan ucapan. Ia kemudian mengisi header dengan token akses daripada fungsi
get_access_token
, serta kadar sampel yang digunakan untuk merakam audio. Akhirnya, ia mentakrifkan beberapa parameter untuk dihantar bersama URL yang mengandungi bahasa dalam audio. -
Di bawah ini, tambahkan kod berikut untuk memanggil REST API dan mendapatkan teks:
response = requests.post(url, headers=headers, params=params, data=buffer) response_json = response.json() if response_json['RecognitionStatus'] == 'Success': return response_json['DisplayText'] else: return ''
Fungsi ini memanggil URL dan menyahkod nilai JSON yang datang dalam respons. Nilai
RecognitionStatus
dalam respons menunjukkan sama ada panggilan berjaya mengekstrak ucapan kepada teks, dan jika ia adalahSuccess
, maka teks akan dikembalikan daripada fungsi, jika tidak, ia akan mengembalikan string kosong. -
Di atas gelung
while True:
, tentukan fungsi untuk memproses teks yang dikembalikan daripada perkhidmatan ucapan ke teks. Buat masa ini, fungsi ini hanya akan mencetak teks ke konsol.def process_text(text): print(text)
-
Akhir sekali, gantikan panggilan kepada
play_audio
dalam gelungwhile True
dengan panggilan kepada fungsiconvert_speech_to_text
, menghantar teks kepada fungsiprocess_text
:text = convert_speech_to_text(buffer) process_text(text)
-
Jalankan kod. Tekan butang dan bercakap ke mikrofon. Lepaskan butang apabila selesai, dan audio akan ditukar kepada teks dan dicetak ke konsol.
pi@raspberrypi:~/smart-timer $ python3 app.py Hello world. Welcome to IoT for beginners.
Cuba pelbagai jenis ayat, termasuk ayat di mana perkataan berbunyi sama tetapi mempunyai makna yang berbeza. Sebagai contoh, jika anda bercakap dalam Bahasa Inggeris, katakan 'I want to buy two bananas and an apple too', dan perhatikan bagaimana ia menggunakan to, two dan too yang betul berdasarkan konteks perkataan, bukan hanya bunyinya.
💁 Anda boleh mencari kod ini dalam folder code-speech-to-text/pi.
😀 Program ucapan ke teks anda berjaya!
Penafian:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk memastikan ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat yang kritikal, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.