6.1 KiB
De voz a texto - Raspberry Pi
En esta parte de la lección, escribirás código para convertir el habla del audio capturado en texto utilizando el servicio de voz.
Envía el audio al servicio de voz
El audio puede enviarse al servicio de voz utilizando la API REST. Para usar el servicio de voz, primero necesitas solicitar un token de acceso y luego usar ese token para acceder a la API REST. Estos tokens de acceso expiran después de 10 minutos, por lo que tu código debe solicitarlos regularmente para asegurarse de que siempre estén actualizados.
Tarea - obtener un token de acceso
-
Abre el proyecto
smart-timer
en tu Raspberry Pi. -
Elimina la función
play_audio
. Ya no es necesaria, ya que no quieres que el temporizador inteligente repita lo que dijiste. -
Agrega la siguiente importación al inicio del archivo
app.py
:import requests
-
Añade el siguiente código encima del bucle
while True
para declarar algunas configuraciones para el servicio de voz:speech_api_key = '<key>' location = '<location>' language = '<language>'
Sustituye
<key>
con la clave API de tu recurso del servicio de voz. Sustituye<location>
con la ubicación que usaste al crear el recurso del servicio de voz.Sustituye
<language>
con el nombre de la configuración regional del idioma en el que hablarás, por ejemplo,en-GB
para inglés ozn-HK
para cantonés. Puedes encontrar una lista de los idiomas admitidos y sus nombres de configuración regional en la documentación de soporte de idiomas y voces en Microsoft Docs. -
Debajo de esto, agrega la siguiente función para obtener un token de acceso:
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)
Esto llama a un endpoint de emisión de tokens, pasando la clave API como un encabezado. Esta llamada devuelve un token de acceso que puede usarse para llamar a los servicios de voz.
-
Debajo de esto, declara una función para convertir el habla del audio capturado en texto utilizando la API REST:
def convert_speech_to_text(buffer):
-
Dentro de esta función, configura la URL de la API REST y los encabezados:
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 }
Esto construye una URL utilizando la ubicación del recurso del servicio de voz. Luego, llena los encabezados con el token de acceso de la función
get_access_token
, así como la frecuencia de muestreo utilizada para capturar el audio. Finalmente, define algunos parámetros que se pasarán con la URL, incluyendo el idioma del audio. -
Debajo de esto, agrega el siguiente código para llamar a la API REST y obtener el texto:
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 ''
Esto llama a la URL y decodifica el valor JSON que viene en la respuesta. El valor
RecognitionStatus
en la respuesta indica si la llamada pudo extraer con éxito el habla en texto, y si este esSuccess
, entonces el texto se devuelve desde la función; de lo contrario, se devuelve una cadena vacía. -
Encima del bucle
while True:
, define una función para procesar el texto devuelto por el servicio de voz a texto. Por ahora, esta función solo imprimirá el texto en la consola.def process_text(text): print(text)
-
Finalmente, reemplaza la llamada a
play_audio
en el buclewhile True
con una llamada a la funciónconvert_speech_to_text
, pasando el texto a la funciónprocess_text
:text = convert_speech_to_text(buffer) process_text(text)
-
Ejecuta el código. Presiona el botón y habla al micrófono. Suelta el botón cuando termines, y el audio se convertirá en texto y se imprimirá en la consola.
pi@raspberrypi:~/smart-timer $ python3 app.py Hello world. Welcome to IoT for beginners.
Prueba diferentes tipos de oraciones, junto con oraciones donde las palabras suenen igual pero tengan significados diferentes. Por ejemplo, si estás hablando en inglés, di "I want to buy two bananas and an apple too" y observa cómo utiliza correctamente "to", "two" y "too" según el contexto de la palabra, no solo por su sonido.
💁 Puedes encontrar este código en la carpeta code-speech-to-text/pi.
😀 ¡Tu programa de voz a texto fue un éxito!
Descargo de responsabilidad:
Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Si bien nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción.