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/km/6-consumer/lessons/1-speech-recognition/pi-speech-to-text.md

9.7 KiB

ពាក្យបំពង់ទៅអក្សរ - Raspberry Pi

ក្នុងផ្នែកនេះនៃមេរៀន អ្នកនឹងសរសេរកូដដើម្បីបម្លែងសូរ្យក្នុងសំឡេងដែលបានចាប់ក្នុងការប្រសង្កេតទៅជាអក្សរដោយប្រើសេវាសូរ្យ។

ផ្ញើសំឡេងទៅសេវាសូរ្យ

សំឡេងអាចត្រូវបានផ្ញើទៅសេវាសូរ្យដោយប្រើ REST API។ ដើម្បីប្រើសេវាសូរ្យ អ្នកត្រូវតែស្នើសុំ access token ជាជំហ៊ានដំបូង បន្ទាប់មកប្រើ token នោះដើម្បីចូលប្រើ REST API។ Access tokens ទាំងនេះនឹងផុតកំណត់បន្ទាប់ពី ១០ នាទី ពីដូចនេះកូដរបស់អ្នកគួរតែស្នើសុំជាប្រចាំដើម្បីធានាថាពួកវានៅតែទាន់សម័យ។

ភារកិច្ច - ទទួលបាន access token

  1. បើកគម្រោង smart-timer នៅលើ Pi របស់អ្នក។

  2. លុបមុខងារ play_audio ទៅ។ នេះមិនចាំបាច់ទៀតទេ ព្រោះអ្នកមិនចង់ឲ្យ smart timer ថ្លែងតាមឡើងវិញនូវអ្វីដែលអ្នកបាននិយាយឡើយ។

  3. បន្ថែម import ខាងក្រោមនៅលើកំពូលឯកសារ app.py

    import requests
    
  4. បន្ថែមកូដខាងក្រោមមុខ while True ដើម្បីប្រកាសការកំណត់ខ្លះសម្រាប់សេវាសូរ្យ៖

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

    ប្ដូរ <key> ជា key API សម្រាប់ធនធានសេវាសូរ្យរបស់អ្នក។ ប្ដូរ <location> ជាទីតាំងដែលអ្នកប្រើពេលបង្កើតធនធានសេវាសូរ្យ។

    ប្ដូរ <language> ជាមុខភាសាសម្រាប់ភាសាដែលអ្នកនឹងនិយាយ ដូចជា en-GB សម្រាប់ភាសាអង់គ្លេស ឬ zn-HK សម្រាប់ភាសាកាន់តូន។ អ្នកអាចរកបញ្ជីភាសា និងឈ្មោះមុខភាសាដែលគាំទ្របាននៅក្នុង ឯកសារគាំទ្រភាសា និងសំឡេងនៅលើ 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 ដោយផ្ញើ key API ជា header។ ការហៅនេះនឹងត្រឡប់ access token ដែលអាចប្រើបានក្នុងការហៅសេវាសូរ្យ។

  6. ក្រោមនេះ ប្រកាសមុខងារមួយ ដើម្បីបម្លែងសូរ្យក្នុងសំឡេងដែលបានចាប់ទៅជាអក្សរដោយប្រើ REST API៖

    def convert_speech_to_text(buffer):
    
  7. នៅក្នុងមុខងារនេះ កំណត់ URL និង header សម្រាប់ 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 ដោយប្រើទីតាំងរបស់ធនធានសេវាសូរ្យ។ បន្ទាប់មកវាបំពេញ header ជាមួយ access token ពីមុខងារ get_access_token ហើយបញ្ចូលអត្រាគំរូសម្រាប់ចាប់សំឡេង។ ចុងក្រោយ កំណត់ប៉ារ៉ាម៉ែត្រខ្លះសម្រាប់ភាសាក្នុងសំឡេង។

  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. លើស្រទាប់ while True: ប្រកាសមុខងារមួយចុះសម្រាប់ដំណើរការអក្សរដែលត្រូវបានត្រលប់ពីសេវាសេរ្យទៅអក្សរ។ មុខងារនេះ នឹងបោះពុម្ពអក្សរនៅកុងសូលជាផ្លូវការ។

    def process_text(text):
        print(text)
    
  10. ចុងក្រោយ ប្ដូរការហៅ play_audio នៅក្នុង 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 បានត្រឹមត្រូវដោយផ្អែកលើ context នៃពាក្យ មិនមែនត្រឹមតែសំឡេងទេ។

💁 អ្នកអាចរកមើលកូដនេះនៅក្នុងថត code-speech-to-text/pi

😀 ប្រសិនបើកម្មវិធី speech to text របស់អ្នកបានជោគជ័យ!


ការបដិសេធ
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាបកប្រែ AI Co-op Translator។ ខណៈពេលដែលយើងខិតខំសម្រាប់ភាពត្រឹមត្រូវ សូមយល់ឲ្យដឹងថា ការបកប្រែដោយស្វ័យប្រវត្តិអាចមានកំហុស ឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមក្នុងភាសាបុរាណរបស់វាគួរត្រូវបានគេកត់សម្គាល់ជាផ្លូវការជាដំណើរមូលដ្ឋាន។ សម្រាប់ព័ត៌មានសំខាន់ៗ យើងណែនាំឲ្យប្រើការបកប្រែដោយមនុស្សជំនាញវិជ្ជាជីវៈ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកប្រែខុសៗដែលកើតឡើងពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។