El reconocimiento de voz, como su nombre indica, se refiere al reconocimiento autom谩tico del habla humana. El reconocimiento de voz es una de las tareas m谩s importantes en el dominio de la interacci贸n entre humanos y computadoras. Si alguna vez ha interactuado con Alexa o le ha pedido a Siri que complete una tarea, ya ha experimentado el poder del reconocimiento de voz.
El reconocimiento de voz tiene varias aplicaciones que van desde la transcripci贸n autom谩tica de datos de voz (como mensajes de voz) hasta la interacci贸n con robots a trav茅s del habla.
En este tutorial, ver谩 c贸mo podemos desarrollar una aplicaci贸n de reconocimiento de voz muy simple que es capaz de reconocer voz de archivos de audio, as铆 como en vivo desde un micr贸fono. Entonces, comencemos sin m谩s pre谩mbulos.
Se han desarrollado varias bibliotecas de reconocimiento de voz en Python. Sin embargo, usaremos el Reconocimiento de voz library, que es la m谩s simple de todas las bibliotecas.
Instalaci贸n de la biblioteca SpeechRecognition
Contenido
Ejecute el siguiente comando para instalar la biblioteca:
$ pip install SpeechRecognition
Reconocimiento de voz de archivos de audio
En esta secci贸n, ver谩 c贸mo podemos traducir el habla de un archivo de audio a texto. El archivo de audio que usaremos como entrada se puede descargar desde este enlace. Descargue el archivo a su sistema de archivos local.
El primer paso, como siempre, es importar las bibliotecas necesarias. En este caso, solo necesitamos importar el speech_recognition
biblioteca que acabamos de descargar.
import speech_recognition as speech_recog
Para convertir voz en texto, la 煤nica clase que necesitamos es la Recognizer
clase de la speech_recognition
m贸dulo. Dependiendo de la API subyacente utilizada para convertir voz en texto, el Recognizer
la clase tiene los siguientes m茅todos:
recognize_bing()
: Utiliza la API de Microsoft Bing Speechrecognize_google()
: Utiliza la API de Google Speechrecognize_google_cloud()
: Utiliza la API de voz de Google Cloudrecognize_houndify()
: Utiliza la API de Houndify de SoundHoundrecognize_ibm()
: Utiliza la API de IBM Speech to Textrecognize_sphinx()
: Utiliza la API de PocketSphinx
Entre todos los m茅todos anteriores, el recognize_sphinx()
El m茅todo se puede utilizar sin conexi贸n para traducir voz a texto.
Para reconocer el habla de un archivo de audio, tenemos que crear un objeto del AudioFile
clase de la speech_recognition
m贸dulo. La ruta del archivo de audio que desea traducir a texto se pasa al constructor del AudioFile
clase. Ejecute el siguiente script:
sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav')
En el c贸digo anterior, actualice la ruta del archivo de audio que desea transcribir.
Estaremos usando el recognize_google()
m茅todo para transcribir nuestros archivos de audio. sin embargo, el recognize_google()
El m茅todo requiere el AudioData
objeto de la speech_recognition
m贸dulo como par谩metro. Para convertir nuestro archivo de audio a un AudioData
objeto, podemos usar el record()
m茅todo del Recognizer
clase. Necesitamos pasar el AudioFile
objetar al record()
m茅todo, como se muestra a continuaci贸n:
with sample_audio as audio_file:
audio_content = recog.record(audio_file)
Ahora, si marca el tipo de audio_content
variable, ver谩s que tiene el tipo speech_recognition.AudioData
.
type(audio_content)
Salida:
speech_recognition.AudioData
Ahora podemos simplemente pasar el audio_content
objetar al recognize_google()
m茅todo del Recognizer()
objeto de clase y el archivo de audio se convertir谩 en texto. Ejecute el siguiente script:
recog.recognize_google(audio_content)
Salida:
'Bristol O2 left shoulder take the winding path to reach the lake no closely the size of the gas tank degrees office 30 face before you go out the race was badly strained and hung them the stray cat gave birth to kittens the young girl gave no clear response the meal was called before the bells ring what weather is in living'
La salida anterior muestra el texto del archivo de audio. Puede ver que el archivo no se ha transcrito correctamente al 100%, pero la precisi贸n es bastante razonable.
Configuraci贸n de valores de duraci贸n y compensaci贸n
En lugar de transcribir el discurso completo, tambi茅n puede transcribir un segmento particular del archivo de audio. Por ejemplo, si desea transcribir solo los primeros 10 segundos del archivo de audio, debe pasar 10 como valor para el duration
par谩metro de la record()
m茅todo. Mira el siguiente gui贸n:
sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav')
with sample_audio as audio_file:
audio_content = recog.record(audio_file, duration=10)
recog.recognize_google(audio_content)
Salida:
'Bristol O2 left shoulder take the winding path to reach the lake no closely the size of the gas'
De la misma manera, puede omitir alguna parte del archivo de audio desde el principio utilizando el offset
par谩metro. Por ejemplo, si no desea transcribir los primeros 4 segundos del audio, pase 4 como el valor de la offset
atributo. Como ejemplo, la siguiente secuencia de comandos omite los primeros 4 segundos del archivo de audio y luego transcribe el archivo de audio durante 10 segundos.
sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav')
with sample_audio as audio_file:
audio_content = recog.record(audio_file, offset=4, duration=10)
recog.recognize_google(audio_content)
Salida:
'take the winding path to reach the lake no closely the size of the gas tank web degrees office dirty face'
Manejo del ruido
Un archivo de audio puede contener ruido debido a varias razones. El ruido puede afectar la calidad de la traducci贸n de voz a texto. Para reducir el ruido, el Recognizer
la clase contiene adjust_for_ambient_noise()
m茅todo, que toma el AudioData
objeto como par谩metro. La siguiente secuencia de comandos muestra c贸mo puede mejorar la calidad de la transcripci贸n eliminando el ruido del archivo de audio:
sample_audio = speech_recog.AudioFile('E:/Datasets/my_audio.wav')
with sample_audio as audio_file:
recog.adjust_for_ambient_noise(audio_file)
audio_content = recog.record(audio_file)
recog.recognize_google(audio_content)
Salida:
'Bristol O2 left shoulder take the winding path to reach the lake no closely the size of the gas tank web degrees office 30 face before you go out the race was badly strained and hung them the stray cat gave birth to kittens the younger again no clear response the mail was called before the bells ring what weather is in living'
La salida es bastante similar a la que obtuvimos antes; esto se debe al hecho de que el archivo de audio ya ten铆a muy poco ruido.
Reconocimiento de voz desde micr贸fono en vivo
En esta secci贸n, ver谩 c贸mo puede transcribir audio en vivo recibido a trav茅s de un micr贸fono en su sistema.
Hay varias formas de procesar la entrada de audio recibida a trav茅s del micr贸fono y se han desarrollado varias bibliotecas para hacerlo. Una de esas bibliotecas es PyAudio. Ejecute el siguiente script para instalar el PyAudio
biblioteca:
$ pip install PyAudio
Ahora, la fuente para la transcripci贸n del audio es un micr贸fono. Para capturar el audio de un micr贸fono, primero debemos crear un objeto del Microphone
clase de la Speach_Recogniton
m贸dulo, como se muestra aqu铆:
mic = speech_recog.Microphone()
Para ver la lista de todos los micr贸fonos de su sistema, puede utilizar el list_microphone_names()
m茅todo:
speech_recog.Microphone.list_microphone_names()
Salida:
['Microsoft Sound Mapper - Input',
'Microphone (Realtek High Defini',
'Microsoft Sound Mapper - Output',
'Speakers (Realtek High Definiti',
'Microphone Array (Realtek HD Audio Mic input)',
'Speakers (Realtek HD Audio output)',
'Stereo Mix (Realtek HD Audio Stereo input)']
Esta es una lista de micr贸fonos disponibles en mi sistema. Tenga en cuenta que es probable que su lista se vea diferente.
El siguiente paso es capturar el audio del micr贸fono. Para hacerlo, debe llamar al listen()
m茅todo del Recognizer()
clase. Como el record()
m茅todo, el listen()
El m茅todo tambi茅n devuelve el speech_recognition.AudioData
objeto, que luego se puede pasar al recognize_google()
m茅todo.
El siguiente script solicita al usuario que diga algo en el micr贸fono y luego imprime lo que el usuario ha dicho:
with mic as audio_file:
print("Speak Please")
recog.adjust_for_ambient_noise(audio_file)
audio = recog.listen(audio_file)
print("Converting Speech to Text...")
print("You said: " + recog.recognize_google(audio))
Una vez que ejecute el script anterior, ver谩 el siguiente mensaje:
Please say something
En este momento, diga lo que quiera y luego haga una pausa. Una vez que haya hecho una pausa, ver谩 la transcripci贸n de lo que dijo. Aqu铆 est谩 el resultado que obtuve:
Converting Speech to Text...
You said: hello this is normally from stack abuse abuse this is an article on speech recognition I hope you will like it and this is just a test speech and when I will stop speaking are you in today thank you for Reading
Es importante mencionar que si recognize_google()
El m茅todo no puede hacer coincidir las palabras que habla con ninguna de las palabras en su repositorio, se lanza una excepci贸n. Puede probar esto diciendo algunas palabras ininteligibles. Deber铆a ver la siguiente excepci贸n:
Speak Please
Converting Speech to Text...
---------------------------------------------------------------------------
UnknownValueError Traceback (most recent call last)
<ipython-input-27-41218bc8a239> in <module>
8 print("Converting Speech to Text...")
9
---> 10 print("You said: " + recog.recognize_google(audio))
11
12
~Anaconda3libsite-packagesspeech_recognition__init__.py in recognize_google(self, audio_data, key, language, show_all)
856 # return results
857 if show_all: return actual_result
--> 858 if not isinstance(actual_result, dict) or len(actual_result.get("alternative", [])) == 0: raise UnknownValueError()
859
860 if "confidence" in actual_result["alternative"]:
UnknownValueError:
Un mejor enfoque es utilizar el try
bloquear cuando el recognize_google()
se llama al m茅todo como se muestra a continuaci贸n:
with mic as audio_file:
print("Speak Please")
recog.adjust_for_ambient_noise(audio_file)
audio = recog.listen(audio_file)
print("Converting Speech to Text...")
try:
print("You said: " + recog.recognize_google(audio))
except Exception as e:
print("Error: " + str(e))
Conclusi贸n
El reconocimiento de voz tiene varias aplicaciones 煤tiles en el dominio de la interacci贸n humana con la computadora y la transcripci贸n autom谩tica de voz. Este art铆culo explica brevemente el proceso de transcripci贸n de voz en Python a trav茅s de speech_recognition
biblioteca y explica c贸mo traducir voz a texto cuando la fuente de audio es un archivo de audio o un micr贸fono en vivo.