8.7 KiB
Распознавание речи - Raspberry Pi
В этой части урока вы напишете код для преобразования речи из записанного аудио в текст с использованием службы распознавания речи.
Отправка аудио в службу распознавания речи
Аудио можно отправить в службу распознавания речи с помощью REST API. Чтобы использовать службу распознавания речи, сначала необходимо запросить токен доступа, а затем использовать этот токен для доступа к REST API. Эти токены доступа истекают через 10 минут, поэтому ваш код должен регулярно запрашивать их, чтобы они всегда были актуальными.
Задача - получение токена доступа
-
Откройте проект
smart-timer
на вашем Raspberry Pi. -
Удалите функцию
play_audio
. Она больше не нужна, так как умный таймер не должен повторять то, что вы сказали. -
Добавьте следующий импорт в начало файла
app.py
:import requests
-
Добавьте следующий код выше цикла
while True
, чтобы задать настройки для службы распознавания речи:speech_api_key = '<key>' location = '<location>' language = '<language>'
Замените
<key>
на ключ API для вашего ресурса службы распознавания речи. Замените<location>
на местоположение, которое вы указали при создании ресурса службы распознавания речи.Замените
<language>
на имя локали языка, на котором вы будете говорить, например,en-GB
для английского илиzn-HK
для кантонского. Список поддерживаемых языков и их локалей можно найти в документации о поддержке языков и голосов на сайте Microsoft. -
Ниже этого добавьте следующую функцию для получения токена доступа:
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)
Эта функция вызывает конечную точку выдачи токенов, передавая ключ API в заголовке. В ответе возвращается токен доступа, который можно использовать для вызова служб распознавания речи.
-
Ниже этого объявите функцию для преобразования речи из записанного аудио в текст с использованием REST API:
def convert_speech_to_text(buffer):
-
Внутри этой функции настройте URL 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, используя местоположение ресурса службы распознавания речи. Затем он заполняет заголовки токеном доступа из функции
get_access_token
, а также частотой дискретизации, используемой для записи аудио. Наконец, он определяет параметры, которые будут переданы с URL, содержащим язык аудио. -
Ниже этого добавьте следующий код для вызова 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" в зависимости от контекста слова, а не только его звучания.
💁 Этот код можно найти в папке code-speech-to-text/pi.
😀 Ваше приложение для преобразования речи в текст успешно работает!
Отказ от ответственности:
Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.