9.7 KiB
ពាក្យបំពង់ទៅអក្សរ - Raspberry Pi
ក្នុងផ្នែកនេះនៃមេរៀន អ្នកនឹងសរសេរកូដដើម្បីបម្លែងសូរ្យក្នុងសំឡេងដែលបានចាប់ក្នុងការប្រសង្កេតទៅជាអក្សរដោយប្រើសេវាសូរ្យ។
ផ្ញើសំឡេងទៅសេវាសូរ្យ
សំឡេងអាចត្រូវបានផ្ញើទៅសេវាសូរ្យដោយប្រើ REST API។ ដើម្បីប្រើសេវាសូរ្យ អ្នកត្រូវតែស្នើសុំ access token ជាជំហ៊ានដំបូង បន្ទាប់មកប្រើ token នោះដើម្បីចូលប្រើ REST API។ Access tokens ទាំងនេះនឹងផុតកំណត់បន្ទាប់ពី ១០ នាទី ពីដូចនេះកូដរបស់អ្នកគួរតែស្នើសុំជាប្រចាំដើម្បីធានាថាពួកវានៅតែទាន់សម័យ។
ភារកិច្ច - ទទួលបាន access token
-
បើកគម្រោង
smart-timerនៅលើ Pi របស់អ្នក។ -
លុបមុខងារ
play_audioទៅ។ នេះមិនចាំបាច់ទៀតទេ ព្រោះអ្នកមិនចង់ឲ្យ smart timer ថ្លែងតាមឡើងវិញនូវអ្វីដែលអ្នកបាននិយាយឡើយ។ -
បន្ថែម import ខាងក្រោមនៅលើកំពូលឯកសារ
app.py៖import requests -
បន្ថែមកូដខាងក្រោមមុខ
while Trueដើម្បីប្រកាសការកំណត់ខ្លះសម្រាប់សេវាសូរ្យ៖speech_api_key = '<key>' location = '<location>' language = '<language>'ប្ដូរ
<key>ជា key API សម្រាប់ធនធានសេវាសូរ្យរបស់អ្នក។ ប្ដូរ<location>ជាទីតាំងដែលអ្នកប្រើពេលបង្កើតធនធានសេវាសូរ្យ។ប្ដូរ
<language>ជាមុខភាសាសម្រាប់ភាសាដែលអ្នកនឹងនិយាយ ដូចជាen-GBសម្រាប់ភាសាអង់គ្លេស ឬzn-HKសម្រាប់ភាសាកាន់តូន។ អ្នកអាចរកបញ្ជីភាសា និងឈ្មោះមុខភាសាដែលគាំទ្របាននៅក្នុង ឯកសារគាំទ្រភាសា និងសំឡេងនៅលើ 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 ដោយផ្ញើ key API ជា header។ ការហៅនេះនឹងត្រឡប់ access token ដែលអាចប្រើបានក្នុងការហៅសេវាសូរ្យ។
-
ក្រោមនេះ ប្រកាសមុខងារមួយ ដើម្បីបម្លែងសូរ្យក្នុងសំឡេងដែលបានចាប់ទៅជាអក្សរដោយប្រើ REST API៖
def convert_speech_to_text(buffer): -
នៅក្នុងមុខងារនេះ កំណត់ 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ហើយបញ្ចូលអត្រាគំរូសម្រាប់ចាប់សំឡេង។ ចុងក្រោយ កំណត់ប៉ារ៉ាម៉ែត្រខ្លះសម្រាប់ភាសាក្នុងសំឡេង។ -
ក្រោមនេះ បន្ថែមកូដដើម្បីហៅ 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អក្សរនឹងត្រូវបានត្រលប់ពីមុខងារ ប្រសិនបើមិនដូច្នោះ វានឹងត្រលប់ជាខ្សែអក្សរពីរ។ -
លើស្រទាប់
while True:ប្រកាសមុខងារមួយចុះសម្រាប់ដំណើរការអក្សរដែលត្រូវបានត្រលប់ពីសេវាសេរ្យទៅអក្សរ។ មុខងារនេះ នឹងបោះពុម្ពអក្សរនៅកុងសូលជាផ្លូវការ។def process_text(text): print(text) -
ចុងក្រោយ ប្ដូរការហៅ
play_audioនៅក្នុងwhile 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 បានត្រឹមត្រូវដោយផ្អែកលើ context នៃពាក្យ មិនមែនត្រឹមតែសំឡេងទេ។
💁 អ្នកអាចរកមើលកូដនេះនៅក្នុងថត code-speech-to-text/pi។
😀 ប្រសិនបើកម្មវិធី speech to text របស់អ្នកបានជោគជ័យ!
ការបដិសេធ៖
ឯកសារនេះត្រូវបានបកប្រែដោយប្រើសេវាបកប្រែ AI Co-op Translator។ ខណៈពេលដែលយើងខិតខំសម្រាប់ភាពត្រឹមត្រូវ សូមយល់ឲ្យដឹងថា ការបកប្រែដោយស្វ័យប្រវត្តិអាចមានកំហុស ឬភាពមិនត្រឹមត្រូវ។ ឯកសារដើមក្នុងភាសាបុរាណរបស់វាគួរត្រូវបានគេកត់សម្គាល់ជាផ្លូវការជាដំណើរមូលដ្ឋាន។ សម្រាប់ព័ត៌មានសំខាន់ៗ យើងណែនាំឲ្យប្រើការបកប្រែដោយមនុស្សជំនាញវិជ្ជាជីវៈ។ យើងមិនទទួលខុសត្រូវចំពោះការយល់ច្រឡំ ឬការបកប្រែខុសៗដែលកើតឡើងពីការប្រើប្រាស់ការបកប្រែនេះឡើយ។