9.9 KiB
การแปลงเสียงเป็นข้อความ - Raspberry Pi
ในส่วนนี้ของบทเรียน คุณจะเขียนโค้ดเพื่อแปลงเสียงในไฟล์เสียงที่บันทึกไว้เป็นข้อความโดยใช้บริการแปลงเสียง
ส่งไฟล์เสียงไปยังบริการแปลงเสียง
ไฟล์เสียงสามารถส่งไปยังบริการแปลงเสียงได้โดยใช้ REST API ในการใช้บริการแปลงเสียง คุณต้องขอ access token ก่อน จากนั้นใช้ token นั้นเพื่อเข้าถึง REST API โดย access token จะหมดอายุภายใน 10 นาที ดังนั้นโค้ดของคุณควรขอ token เป็นประจำเพื่อให้แน่ใจว่า token จะอัปเดตอยู่เสมอ
งาน - ขอ access token
-
เปิดโปรเจกต์
smart-timer
บน Raspberry Pi ของคุณ -
ลบฟังก์ชัน
play_audio
ออก เนื่องจากไม่จำเป็นอีกต่อไป เพราะคุณไม่ต้องการให้ smart timer พูดซ้ำสิ่งที่คุณพูด -
เพิ่มการ import ต่อไปนี้ที่ด้านบนของไฟล์
app.py
:import requests
-
เพิ่มโค้ดต่อไปนี้เหนือ loop
while True
เพื่อกำหนดค่าการตั้งค่าสำหรับบริการแปลงเสียง:speech_api_key = '<key>' location = '<location>' language = '<language>'
แทนที่
<key>
ด้วย API key สำหรับทรัพยากรบริการแปลงเสียงของคุณ แทนที่<location>
ด้วยตำแหน่งที่คุณใช้เมื่อสร้างทรัพยากรบริการแปลงเสียงแทนที่
<language>
ด้วยชื่อ locale สำหรับภาษาที่คุณจะพูด เช่นen-GB
สำหรับภาษาอังกฤษ หรือzn-HK
สำหรับภาษากวางตุ้ง คุณสามารถค้นหารายชื่อภาษาที่รองรับและชื่อ locale ได้ใน เอกสารสนับสนุนภาษาและเสียงบน Microsoft docs -
ด้านล่างนี้ เพิ่มฟังก์ชันต่อไปนี้เพื่อขอ access token:
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)
ฟังก์ชันนี้เรียก endpoint สำหรับออก token โดยส่ง API key เป็น header การเรียกนี้จะส่งคืน access token ที่สามารถใช้เรียกบริการแปลงเสียงได้
-
ด้านล่างนี้ กำหนดฟังก์ชันเพื่อแปลงเสียงในไฟล์เสียงที่บันทึกไว้เป็นข้อความโดยใช้ REST API:
def convert_speech_to_text(buffer):
-
ภายในฟังก์ชันนี้ ตั้งค่า URL และ headers สำหรับ REST API:
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 }
โค้ดนี้สร้าง URL โดยใช้ตำแหน่งของทรัพยากรบริการแปลงเสียง จากนั้นเติม headers ด้วย access token จากฟังก์ชัน
get_access_token
รวมถึง sample rate ที่ใช้ในการบันทึกเสียง สุดท้ายกำหนดพารามิเตอร์บางอย่างที่จะส่งไปพร้อมกับ URL ซึ่งระบุภาษาที่อยู่ในไฟล์เสียง -
ด้านล่างนี้ เพิ่มโค้ดต่อไปนี้เพื่อเรียก REST API และรับข้อความกลับมา:
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 ''
โค้ดนี้เรียก URL และถอดรหัสค่า JSON ที่มาจากการตอบกลับ ค่า
RecognitionStatus
ในการตอบกลับระบุว่าการเรียกสามารถแปลงเสียงเป็นข้อความได้สำเร็จหรือไม่ และหากค่าเป็นSuccess
ข้อความจะถูกส่งคืนจากฟังก์ชัน มิฉะนั้นจะส่งคืนสตริงว่าง -
เหนือ loop
while True:
กำหนดฟังก์ชันเพื่อประมวลผลข้อความที่ส่งคืนจากบริการแปลงเสียงเป็นข้อความ ฟังก์ชันนี้จะพิมพ์ข้อความลงในคอนโซลในตอนนี้def process_text(text): print(text)
-
สุดท้าย แทนที่การเรียก
play_audio
ใน loopwhile True
ด้วยการเรียกฟังก์ชันconvert_speech_to_text
โดยส่งข้อความไปยังฟังก์ชันprocess_text
:text = convert_speech_to_text(buffer) process_text(text)
-
รันโค้ด กดปุ่มและพูดใส่ไมโครโฟน ปล่อยปุ่มเมื่อคุณพูดเสร็จ และไฟล์เสียงจะถูกแปลงเป็นข้อความและพิมพ์ลงในคอนโซล
pi@raspberrypi:~/smart-timer $ python3 app.py Hello world. Welcome to IoT for beginners.
ลองพูดประโยคต่าง ๆ รวมถึงประโยคที่มีคำที่ออกเสียงเหมือนกันแต่มีความหมายต่างกัน ตัวอย่างเช่น หากคุณพูดภาษาอังกฤษ ให้พูดว่า 'I want to buy two bananas and an apple too' และสังเกตว่ามันจะใช้คำว่า to, two และ too ได้ถูกต้องตามบริบทของคำ ไม่ใช่แค่เสียงของคำ
💁 คุณสามารถค้นหาโค้ดนี้ได้ใน code-speech-to-text/pi โฟลเดอร์
😀 โปรแกรมแปลงเสียงเป็นข้อความของคุณสำเร็จแล้ว!
ข้อจำกัดความรับผิดชอบ:
เอกสารนี้ได้รับการแปลโดยใช้บริการแปลภาษา AI Co-op Translator แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยระบบอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามนุษย์ที่มีความเชี่ยวชาญ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้