Introducci贸n al reconocimiento de voz con Python

    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.

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *