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.
149 lines
14 KiB
149 lines
14 KiB
# വാചകത്തിൽ നിന്ന് സംസാരത്തിലേക്ക് - റാസ്ബെറി പൈ
|
|
|
|
പാഠത്തിന്റെ ഈ ഭാഗത്തിൽ, സംസാര സേവനം ഉപയോഗിച്ച് വാചകത്തിനെ സംസാരത്തിൽ മാറുന്ന കോഡ് നിങ്ങൾ എഴുതും.
|
|
|
|
## സംസാര സേവനം ഉപയോഗിച്ച് വാചകത്തിനെ സംസാരത്തിലേക്ക് മാറ്റുക
|
|
|
|
വാചകം REST API ഉപയോഗിച്ച് സംസാര സേവനത്തിലേക്ക് അയച്ചു, ഈ ഓഡിയോ ഫയലായി സബ്ക്ഷേപം ലഭിക്കും, ഇത് നിങ്ങളുടെ IoT ഉപകരണത്തിൽ പുനരവതരിപ്പിക്കാം. സംസാരത്തിനായി അഭ്യർത്ഥന ചെയ്യുമ്പോൾ, ഭാഷയുടെ വ്യത്യസ്ത ശബ്ദങ്ങളിൽ സംസാരമുണ്ടാക്കാനും ഉപയോഗിക്കുന്ന ശബ്ദം നൽകണമെന്ന് ആവശ്യമാണ്.
|
|
|
|
ഓരോ ഭാഷയും വിവിധ ശബ്ദങ്ങൾ പിന്തുണയ്ക്കുന്നു, ഈ ശബ്ദങ്ങളുടെ പട്ടിക ലഭിക്കാൻ സംസാര സേവനത്തിന് REST അഭ്യർത്ഥന നടത്താം.
|
|
|
|
### ജോലികൾ - ശബ്ദം നേടുക
|
|
|
|
1. VS Code-ൽ `smart-timer` പ്രോജക്ട് തുറക്കുക.
|
|
|
|
1. പ്രവർത്തനം `say` മേലെ താഴെ നൽകിയ കോഡ് ചേർത്ത് ഒരു ഭാഷയുടെ ശബ്ദങ്ങളുടെ പട്ടികക്കും അഭ്യർത്ഥിക്കൂ:
|
|
|
|
```python
|
|
def get_voice():
|
|
url = f'https://{location}.tts.speech.microsoft.com/cognitiveservices/voices/list'
|
|
|
|
headers = {
|
|
'Authorization': 'Bearer ' + get_access_token()
|
|
}
|
|
|
|
response = requests.get(url, headers=headers)
|
|
voices_json = json.loads(response.text)
|
|
|
|
first_voice = next(x for x in voices_json if x['Locale'].lower() == language.lower() and x['VoiceType'] == 'Neural')
|
|
return first_voice['ShortName']
|
|
|
|
voice = get_voice()
|
|
print(f'Using voice {voice}')
|
|
```
|
|
|
|
ഈ കോഡ് `get_voice` എന്ന പ്രവർത്തനം നിർവചിക്കുന്നു, ഇത് സംസാര സേവനം ഉപയോഗിച്ച് ശബ്ദങ്ങളുടെ പട്ടിക നേടുന്നു. തുടർന്ന് ഉപയോഗിക്കുന്ന ഭാഷയ്ക്ക് പൊരുത്തപ്പെടുന്ന ആദ്യ ശബ്ദം കണ്ടെത്തുന്നു.
|
|
|
|
ഈ പ്രവർത്തനം പിന്നീട് വിളിച്ച് ആദ്യം കിട്ടിയ ശബ്ദം സംഭരിച്ചു ശബ്ദത്തിന്റെ പേര് കോൺസോളിൽ പ്രിന്റ് ചെയ്യും. വാചകത്തിൽ നിന്ന് സംസാരത്തിലേക്ക് മാറ്റുന്നതിനുള്ള എല്ലാ വിളികൾക്കും ഈ ശബ്ദം ഒരിക്കൽ അഭ്യർത്ഥിച്ച് ഉപയോഗിക്കാം.
|
|
|
|
> 💁 നിങ്ങൾക്ക് [Microsoft ഡോക്സ്-ലെ ഭാഷയും ശബ്ദ പിന്തുണയും സംബന്ധിച്ച രേഖാമൂല്യങ്ങളിൽ](https://docs.microsoft.com/azure/cognitive-services/speech-service/language-support?WT.mc_id=academic-17441-jabenn#text-to-speech) നിന്ന് മുഴുവൻ പിന്തുണയുള്ള ശബ്ദങ്ങളുടെ പട്ടിക ലഭ്യമാണ്. നിർദ്ദിഷ്ട ശബ്ദം ഉപയോഗിക്കാനായാൽ, ഈ പ്രവർത്തനം ഒഴിവാക്കി രേഖാമൂല്യത്തിലുള്ള ശബ്ദനാമം കൊടുത്ത് ഹാർഡ് കോഡ് ചെയ്യാം. ഉദാഹരണത്തിന്:
|
|
>
|
|
> ```python
|
|
> voice = 'hi-IN-SwaraNeural'
|
|
> ```
|
|
|
|
### ജോലികൾ - വാചകത്തെ സംസാരത്തിലേക്ക് മാറുക
|
|
|
|
1. ഇതിന് കീഴിൽ, സംസാര സേവനങ്ങളിൽ നിന്ന് ലഭ്യമാക്കേണ്ട ഓഡിയോ ഫോർമാറ്റിനുള്ള സ്ഥിരമായ ഘടകം നിർവചിക്കുക. ഓഡിയോ അഭ്യർത്ഥന ചെയ്യുമ്പോൾ വിവിധ ഫോർമാറ്റുകളിൽ ലഭ്യമാണ്.
|
|
|
|
```python
|
|
playback_format = 'riff-48khz-16bit-mono-pcm'
|
|
```
|
|
|
|
നിങ്ങൾക്ക് ഉപയോഗിക്കാൻ കഴിയുന്ന ഫോർമാറ്റ് നിങ്ങളുടെ ഹാർഡ്വെയറിനെ ആശ്രയിച്ചിരിക്കും. ഓഡിയോ പ്ലേ ചെയ്യുമ്പോൾ `Invalid sample rate` പിശക് ലഭിച്ചാൽ മറ്റൊരു മൂല്യമാക്കി മാറ്റുക. പിന്തുണയുള്ള മൂല്യങ്ങളുടെ പട്ടിക [Microsoft ഡോക്സ്-യിലെ Text to speech REST API രേഖാമൂല്യത്തിൽ](https://docs.microsoft.com/azure/cognitive-services/speech-service/rest-text-to-speech?WT.mc_id=academic-17441-jabenn#audio-outputs) കാണാം. നിങ്ങൾക്ക് `riff` ഫോർമാറ്റ് ഓഡിയോ വേണ്ടിവരും, ഉപയോഗിക്കേണ്ട മൂല്യങ്ങൾ `riff-16khz-16bit-mono-pcm`, `riff-24khz-16bit-mono-pcm`, `riff-48khz-16bit-mono-pcm` എന്നിവയാണ്.
|
|
|
|
1. ഇതിന് താഴെ, `get_speech` എന്ന പ്രവർത്തനം പ്രഖ്യാപിക്കുക, ഇത് സംസാര സേവന REST API ഉപയോഗിച്ച് വാചകത്തിനെ സംസാരത്തിലേക്ക് മാറ്റും:
|
|
|
|
```python
|
|
def get_speech(text):
|
|
```
|
|
|
|
1. `get_speech` പ്രവർത്തനത്തിൽ, വിളിക്കേണ്ട URL-യും അയയ്ക്കേണ്ട ഹെഡറുകളും നിർവചിക്കുക:
|
|
|
|
```python
|
|
url = f'https://{location}.tts.speech.microsoft.com/cognitiveservices/v1'
|
|
|
|
headers = {
|
|
'Authorization': 'Bearer ' + get_access_token(),
|
|
'Content-Type': 'application/ssml+xml',
|
|
'X-Microsoft-OutputFormat': playback_format
|
|
}
|
|
```
|
|
|
|
ഇത് തലക്കെട്ടുകൾ സജ്ജമാക്കുന്നു, ജനറേറ്റഡ് ആക്സസ് ടോക്കൺ ഉപയോഗിക്കുന്നു, ഉള്ളടക്കം SSML-ആണെന്ന് തീരുവുന്നു, ആവശ്യമായ ഓഡിയോ ഫോർമാറ്റും നിർവചിക്കുന്നു.
|
|
|
|
1. ഇതിന് താഴെ, REST API-യിലേക്ക് അയക്കാനുള്ള SSML നിർവചിക്കുക:
|
|
|
|
```python
|
|
ssml = f'<speak version=\'1.0\' xml:lang=\'{language}\'>'
|
|
ssml += f'<voice xml:lang=\'{language}\' name=\'{voice}\'>'
|
|
ssml += text
|
|
ssml += '</voice>'
|
|
ssml += '</speak>'
|
|
```
|
|
|
|
ഈ SSML ഭാഷയും ഉപയോഗിക്കുന്ന ശബ്ദവും നിർവചിക്കുകയും, മാറ്റേണ്ട വാചകം സജ്ജമാക്കുകയും ചെയ്യുന്നു.
|
|
|
|
1. അവസാനം, ഈ പ്രവർത്തനത്തിൽ REST അഭ്യർത്ഥന നടത്തുകയും ബൈനറി ഓഡിയോ ഡാറ്റ തിരിച്ച് നൽകുകയും ചെയ്യുന്ന കോഡ് ചേർക്കുക:
|
|
|
|
```python
|
|
response = requests.post(url, headers=headers, data=ssml.encode('utf-8'))
|
|
return io.BytesIO(response.content)
|
|
```
|
|
|
|
### ജോലികൾ - ഓഡിയോ പ്ലേ ചെയ്യുക
|
|
|
|
1. `get_speech` പ്രവർത്തനത്തിനുശേഷം, REST API വിളിയിലൂടെ ലഭിച്ച ഓഡിയോ പ്ലേ ചെയ്യാനുള്ള പുതിയ പ്രവർത്തനം നിർവചിക്കുക:
|
|
|
|
```python
|
|
def play_speech(speech):
|
|
```
|
|
|
|
1. ഈ പ്രവർത്തനത്തിലേക്ക് ലഭിക്കുന്ന `speech` ബൈനറി ഓഡിയോ ഡാറ്റയാണ്. ഇത് ഒരു വെയ്വ് ഫയലായി തുറന്ന് PyAudio ഉപയോഗിച്ച് ഓഡിയോ പ്ലേ ചെയ്യാനായി താഴെ കൊടുത്തിരിക്കുന്ന കോഡ് ഉപയോഗിക്കുക:
|
|
|
|
```python
|
|
def play_speech(speech):
|
|
with wave.open(speech, 'rb') as wave_file:
|
|
stream = audio.open(format=audio.get_format_from_width(wave_file.getsampwidth()),
|
|
channels=wave_file.getnchannels(),
|
|
rate=wave_file.getframerate(),
|
|
output_device_index=speaker_card_number,
|
|
output=True)
|
|
|
|
data = wave_file.readframes(4096)
|
|
|
|
while len(data) > 0:
|
|
stream.write(data)
|
|
data = wave_file.readframes(4096)
|
|
|
|
stream.stop_stream()
|
|
stream.close()
|
|
```
|
|
|
|
ഈ കോഡ് PyAudio സ്ട്രീം ഉപയോഗിക്കുന്നു, ഓഡിയോ പിടിക്കുന്നതുപോലെ തന്നെ. വ്യത്യാസം സ്ട്രീം output ആയി സജ്ജമാക്കുകയും, ഓഡിയോ ഡാറ്റയിൽ നിന്ന് ഡാറ്റ വായിച്ച് സ്ട്രീമിലേക്ക് പുഷ് ചെയ്യുകയും ചെയ്യുകയാണ്.
|
|
|
|
സ്ട്രീം വിശദാംശങ്ങൾ ഹാർഡ് കോഡ് ചെയ്യാതെ അതു ഓഡിയോ ഡാറ്റയിൽനിന്ന് വായിക്കുന്നു.
|
|
|
|
1. `say` പ്രവർത്തനത്തിന്റെ ഉള്ളടക്കം താഴെ നൽകിയതുപോലെ മാറ്റുക:
|
|
|
|
```python
|
|
speech = get_speech(text)
|
|
play_speech(speech)
|
|
```
|
|
|
|
ഈ കോഡ് വാചകത്തിനെ ബൈനറി ഓഡിയോ ഡാറ്റയാക്കി മാറ്റുകയും, ഓഡിയോ പ്ലേ ചെയ്യുകയും ചെയ്യുന്നു.
|
|
|
|
1. ആപ്പ് റൺ ചെയ്തു, ഫംഗ്ഷൻ ആപ്പ് കൂടി ഓടുന്നുണ്ടെന്ന് ഉറപ്പാക്കുക. ടൈമറുകൾ സജ്ജമാക്കൂ, നിങ്ങൾക്ക് ടൈമർ സജ്ജീകരിച്ചതായി വാചിക പ്രതികരണം കേൾക്കാനും ടൈമർ പൂർത്തിയായപ്പോൾ മറ്റൊരു വാചിക പ്രതികരണവും കേൾക്കാനും കഴിയും.
|
|
|
|
`Invalid sample rate` പിശക് ലഭിച്ചാൽ, മുകളിലുള്ള രീതിയിൽ `playback_format` മാറ്റുക.
|
|
|
|
> 💁 ഈ കോഡ് [code-spoken-response/pi](../../../../../6-consumer/lessons/3-spoken-feedback/code-spoken-response/pi) ഫോളഡറിൽ ലഭ്യമാണ്.
|
|
|
|
😀 നിങ്ങളുടെ ടൈമർ പ്രോഗ്രാം വിജയകരമായി പൂർത്തിയായി!
|
|
|
|
---
|
|
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER START -->
|
|
**വിവരം**:
|
|
ഈ രേഖ AI പരിഭാഷ സേവനം [Co-op Translator](https://github.com/Azure/co-op-translator) ഉപയോഗിച്ച് പരിഭാഷ ചെയ്തതായാണ് സൂചിപ്പിക്കുന്നത്. ഞങ്ങൾ കൃത്യതയ്ക്കായി പരിശ്രമിക്കുന്നുവെങ്കിലും, യന്ത്രം ചെയ്ത പരിഭാഷകളിൽ പിശകുകൾ കൾ അല്ലെങ്കിൽ അശുദ്ധതകൾ ഉണ്ടായേക്കാമെന്ന് ദയവായി ശ്രദ്ധിക്കുക. സൂക്ഷ്മമായ വിവരങ്ങൾ ആവശ്യമായാൽ, ഒടുവിലാണ് പ്രൊഫഷണൽ മാനവ പരിഭാഷ ശുപാർശ ചെയ്യുന്നത്. ഈ പരിഭാഷ ഉപയോഗിച്ചുണ്ടാകാവുന്ന തെറ്റ് മനസ്സിലാക്കലുകളോ തെറ്റിദ്ധാരണകളോ സംബന്ധിച്ച് ഞങ്ങൾ ഉത്തരവാദിത്വം ഏറ്റെടുക്കുന്നില്ല.
|
|
<!-- CO-OP TRANSLATOR DISCLAIMER END --> |