|
|
<!--
|
|
|
CO_OP_TRANSLATOR_METADATA:
|
|
|
{
|
|
|
"original_hash": "7966848a1f870e4c42edb4db67b13c57",
|
|
|
"translation_date": "2025-08-28T08:57:03+00:00",
|
|
|
"source_file": "6-consumer/lessons/3-spoken-feedback/virtual-device-text-to-speech.md",
|
|
|
"language_code": "bg"
|
|
|
}
|
|
|
-->
|
|
|
# Текст към реч - Виртуално IoT устройство
|
|
|
|
|
|
В тази част на урока ще напишете код за преобразуване на текст в реч, използвайки услугата за реч.
|
|
|
|
|
|
## Преобразуване на текст в реч
|
|
|
|
|
|
SDK за услуги за реч, който използвахте в предишния урок за преобразуване на реч в текст, може да се използва и за преобразуване на текст обратно в реч. Когато заявявате реч, трябва да посочите гласа, който да се използва, тъй като речта може да бъде генерирана с различни гласове.
|
|
|
|
|
|
Всеки език поддържа набор от различни гласове, и можете да получите списък с поддържаните гласове за всеки език чрез SDK за услуги за реч.
|
|
|
|
|
|
### Задача - преобразуване на текст в реч
|
|
|
|
|
|
1. Отворете проекта `smart-timer` в VS Code и се уверете, че виртуалната среда е заредена в терминала.
|
|
|
|
|
|
1. Импортирайте `SpeechSynthesizer` от пакета `azure.cognitiveservices.speech`, като го добавите към съществуващите импорти:
|
|
|
|
|
|
```python
|
|
|
from azure.cognitiveservices.speech import SpeechConfig, SpeechRecognizer, SpeechSynthesizer
|
|
|
```
|
|
|
|
|
|
1. Над функцията `say` създайте конфигурация за реч, която да се използва със синтезатора на реч:
|
|
|
|
|
|
```python
|
|
|
speech_config = SpeechConfig(subscription=speech_api_key,
|
|
|
region=location)
|
|
|
speech_config.speech_synthesis_language = language
|
|
|
speech_synthesizer = SpeechSynthesizer(speech_config=speech_config)
|
|
|
```
|
|
|
|
|
|
Това използва същия API ключ, местоположение и език, които са използвани от разпознавателя.
|
|
|
|
|
|
1. Под това добавете следния код, за да получите глас и да го зададете в конфигурацията за реч:
|
|
|
|
|
|
```python
|
|
|
voices = speech_synthesizer.get_voices_async().get().voices
|
|
|
first_voice = next(x for x in voices if x.locale.lower() == language.lower())
|
|
|
speech_config.speech_synthesis_voice_name = first_voice.short_name
|
|
|
```
|
|
|
|
|
|
Това извлича списък с всички налични гласове, след което намира първия глас, който съответства на използвания език.
|
|
|
|
|
|
> 💁 Можете да получите пълния списък с поддържаните гласове от [документацията за поддръжка на езици и гласове в Microsoft Docs](https://docs.microsoft.com/azure/cognitive-services/speech-service/language-support?WT.mc_id=academic-17441-jabenn#text-to-speech). Ако искате да използвате конкретен глас, можете да премахнете тази функция и да зададете гласа директно с името му от документацията. Например:
|
|
|
>
|
|
|
> ```python
|
|
|
> speech_config.speech_synthesis_voice_name = 'hi-IN-SwaraNeural'
|
|
|
> ```
|
|
|
|
|
|
1. Актуализирайте съдържанието на функцията `say`, за да генерирате SSML за отговора:
|
|
|
|
|
|
```python
|
|
|
ssml = f'<speak version=\'1.0\' xml:lang=\'{language}\'>'
|
|
|
ssml += f'<voice xml:lang=\'{language}\' name=\'{first_voice.short_name}\'>'
|
|
|
ssml += text
|
|
|
ssml += '</voice>'
|
|
|
ssml += '</speak>'
|
|
|
```
|
|
|
|
|
|
1. Под това спрете разпознаването на реч, произнесете SSML, след което отново стартирайте разпознаването:
|
|
|
|
|
|
```python
|
|
|
recognizer.stop_continuous_recognition()
|
|
|
speech_synthesizer.speak_ssml(ssml)
|
|
|
recognizer.start_continuous_recognition()
|
|
|
```
|
|
|
|
|
|
Разпознаването се спира, докато текстът се произнася, за да се избегне засичането на съобщението за стартиране на таймера, изпращането му към LUIS и евентуалното му интерпретиране като заявка за задаване на нов таймер.
|
|
|
|
|
|
> 💁 Можете да тествате това, като коментирате редовете за спиране и рестартиране на разпознаването. Задайте един таймер и може да откриете, че съобщението задава нов таймер, което води до ново съобщение, което задава нов таймер, и така нататък безкрайно!
|
|
|
|
|
|
1. Стартирайте приложението и се уверете, че функцията на приложението също работи. Задайте няколко таймера и ще чуете гласов отговор, който казва, че вашият таймер е зададен, а след това друг гласов отговор, когато таймерът приключи.
|
|
|
|
|
|
> 💁 Можете да намерите този код в папката [code-spoken-response/virtual-iot-device](../../../../../6-consumer/lessons/3-spoken-feedback/code-spoken-response/virtual-iot-device).
|
|
|
|
|
|
😀 Вашата програма за таймер беше успешна!
|
|
|
|
|
|
---
|
|
|
|
|
|
**Отказ от отговорност**:
|
|
|
Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. |