Introducción al reconocimiento de voz con Python

I

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

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 Speech
  • recognize_google(): Utiliza la API de Google Speech
  • recognize_google_cloud(): Utiliza la API de voz de Google Cloud
  • recognize_houndify(): Utiliza la API de Houndify de SoundHound
  • recognize_ibm(): Utiliza la API de IBM Speech to Text
  • recognize_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.

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con tus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad