You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/th/6-consumer/lessons/1-speech-recognition/pi-speech-to-text.md

9.9 KiB

การแปลงเสียงเป็นข้อความ - Raspberry Pi

ในส่วนนี้ของบทเรียน คุณจะเขียนโค้ดเพื่อแปลงเสียงในไฟล์เสียงที่บันทึกไว้เป็นข้อความโดยใช้บริการแปลงเสียง

ส่งไฟล์เสียงไปยังบริการแปลงเสียง

ไฟล์เสียงสามารถส่งไปยังบริการแปลงเสียงได้โดยใช้ REST API ในการใช้บริการแปลงเสียง คุณต้องขอ access token ก่อน จากนั้นใช้ token นั้นเพื่อเข้าถึง REST API โดย access token จะหมดอายุภายใน 10 นาที ดังนั้นโค้ดของคุณควรขอ token เป็นประจำเพื่อให้แน่ใจว่า token จะอัปเดตอยู่เสมอ

งาน - ขอ access token

  1. เปิดโปรเจกต์ smart-timer บน Raspberry Pi ของคุณ

  2. ลบฟังก์ชัน play_audio ออก เนื่องจากไม่จำเป็นอีกต่อไป เพราะคุณไม่ต้องการให้ smart timer พูดซ้ำสิ่งที่คุณพูด

  3. เพิ่มการ import ต่อไปนี้ที่ด้านบนของไฟล์ app.py:

    import requests
    
  4. เพิ่มโค้ดต่อไปนี้เหนือ loop while True เพื่อกำหนดค่าการตั้งค่าสำหรับบริการแปลงเสียง:

    speech_api_key = '<key>'
    location = '<location>'
    language = '<language>'
    

    แทนที่ <key> ด้วย API key สำหรับทรัพยากรบริการแปลงเสียงของคุณ แทนที่ <location> ด้วยตำแหน่งที่คุณใช้เมื่อสร้างทรัพยากรบริการแปลงเสียง

    แทนที่ <language> ด้วยชื่อ locale สำหรับภาษาที่คุณจะพูด เช่น en-GB สำหรับภาษาอังกฤษ หรือ zn-HK สำหรับภาษากวางตุ้ง คุณสามารถค้นหารายชื่อภาษาที่รองรับและชื่อ locale ได้ใน เอกสารสนับสนุนภาษาและเสียงบน Microsoft docs

  5. ด้านล่างนี้ เพิ่มฟังก์ชันต่อไปนี้เพื่อขอ 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 ที่สามารถใช้เรียกบริการแปลงเสียงได้

  6. ด้านล่างนี้ กำหนดฟังก์ชันเพื่อแปลงเสียงในไฟล์เสียงที่บันทึกไว้เป็นข้อความโดยใช้ REST API:

    def convert_speech_to_text(buffer):
    
  7. ภายในฟังก์ชันนี้ ตั้งค่า 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 ซึ่งระบุภาษาที่อยู่ในไฟล์เสียง

  8. ด้านล่างนี้ เพิ่มโค้ดต่อไปนี้เพื่อเรียก 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 ข้อความจะถูกส่งคืนจากฟังก์ชัน มิฉะนั้นจะส่งคืนสตริงว่าง

  9. เหนือ loop while True: กำหนดฟังก์ชันเพื่อประมวลผลข้อความที่ส่งคืนจากบริการแปลงเสียงเป็นข้อความ ฟังก์ชันนี้จะพิมพ์ข้อความลงในคอนโซลในตอนนี้

    def process_text(text):
        print(text)
    
  10. สุดท้าย แทนที่การเรียก play_audio ใน loop while True ด้วยการเรียกฟังก์ชัน convert_speech_to_text โดยส่งข้อความไปยังฟังก์ชัน process_text:

    text = convert_speech_to_text(buffer)
    process_text(text)
    
  11. รันโค้ด กดปุ่มและพูดใส่ไมโครโฟน ปล่อยปุ่มเมื่อคุณพูดเสร็จ และไฟล์เสียงจะถูกแปลงเป็นข้อความและพิมพ์ลงในคอนโซล

    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 แม้ว่าเราจะพยายามให้การแปลมีความถูกต้องมากที่สุด แต่โปรดทราบว่าการแปลโดยระบบอัตโนมัติอาจมีข้อผิดพลาดหรือความไม่ถูกต้อง เอกสารต้นฉบับในภาษาดั้งเดิมควรถือเป็นแหล่งข้อมูลที่เชื่อถือได้ สำหรับข้อมูลที่สำคัญ ขอแนะนำให้ใช้บริการแปลภาษามนุษย์ที่มีความเชี่ยวชาญ เราไม่รับผิดชอบต่อความเข้าใจผิดหรือการตีความที่ผิดพลาดซึ่งเกิดจากการใช้การแปลนี้