SpeechRecognition: Una biblioteca integral de Python para conversión de voz a texto

Explora SpeechRecognition, una biblioteca versátil de Python que admite múltiples motores y API de reconocimiento de voz, tanto en línea como fuera de línea, con ejemplos prácticos y consejos para solucionar problemas.

Introducción

El reconocimiento de voz es un componente crítico en muchas aplicaciones modernas, desde asistentes virtuales y servicios de transcripción hasta herramientas de accesibilidad y flujos de trabajo automatizados. La biblioteca SpeechRecognition para Python proporciona una interfaz unificada para una amplia gama de motores y API de reconocimiento de voz, facilitando la integración de capacidades de conversión de voz a texto en tus proyectos. Ya sea que necesites reconocimiento fuera de línea con CMU Sphinx o precisión basada en la nube con Google, Azure u OpenAI Whisper, esta biblioteca te cubre.

Motores y API compatibles

SpeechRecognition admite un conjunto diverso de backends, lo que te permite elegir la mejor opción para tu caso de uso:

  • Motores fuera de línea:

    • CMU Sphinx (PocketSphinx): Funciona completamente fuera de línea, ideal para aplicaciones sensibles a la privacidad o de baja latencia.
    • API de Vosk: Otra opción fuera de línea con soporte para múltiples idiomas.
    • Whisper (local): El modelo Whisper de OpenAI se puede ejecutar localmente para transcripciones de alta calidad sin internet.
    • Faster Whisper: Una versión más optimizada de Whisper para inferencia más rápida.
    • Detección de palabra de activación Snowboy: Para detección de palabras de activación (fuera de línea).
  • API en la nube:

    • Reconocimiento de voz de Google: Nivel gratuito disponible, fácil de usar.
    • API de Google Cloud Speech: Más precisa y personalizable, requiere autenticación.
    • Microsoft Azure Speech: Reconocimiento de nivel empresarial.
    • Wit.ai: API de voz de Facebook.
    • Houndify: API de SoundHound.
    • IBM Speech to Text: Oferta de IBM Watson.
    • API de OpenAI Whisper: Whisper basado en la nube con alta precisión.
    • API de Groq Whisper: Inferencia rápida a través del hardware de Groq.
    • API de Cohere Transcribe: Servicio de transcripción de Cohere.
  • Puntos finales autoalojados:

    • Admite puntos finales compatibles con OpenAI como vLLM y Ollama, brindándote flexibilidad para ejecutar tu propio servidor de inferencia.

Primeros pasos

La instalación es sencilla con pip:

pip install SpeechRecognition

Para probarlo rápidamente, ejecuta:

python -m speech_recognition

Esto usará tu micrófono predeterminado e intentará reconocer el habla usando la API gratuita de Google.

Ejemplos de uso básico

Reconocer voz desde un micrófono

import speech_recognition as sr

# Inicializar reconocedor
r = sr.Recognizer()

# Usar el micrófono predeterminado como fuente
with sr.Microphone() as source:
    print("¡Di algo!")
    audio = r.listen(source)

# Reconocer voz usando el Reconocimiento de voz de Google
try:
    text = r.recognize_google(audio)
    print(f"Dijiste: {text}")
except sr.UnknownValueError:
    print("No se pudo entender el audio")
except sr.RequestError as e:
    print(f"Error: {e}")

Transcribir un archivo de audio

import speech_recognition as sr

r = sr.Recognizer()

with sr.AudioFile("ruta/al/audio.wav") as source:
    audio = r.record(source)

text = r.recognize_google(audio)
print(text)

Guardar datos de audio en un archivo

with sr.Microphone() as source:
    audio = r.listen(source)

# Guardar en un archivo WAV
with open("grabacion.wav", "wb") as f:
    f.write(audio.get_wav_data())

Calibrar para ruido ambiental

with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source)
    print("Ajustado para ruido ambiental. ¡Di algo!")
    audio = r.listen(source)

Escuchar en segundo plano

def callback(recognizer, audio):
    try:
        text = recognizer.recognize_google(audio)
        print(f"Dijiste: {text}")
    except sr.UnknownValueError:
        print("No se pudo entender")

r.listen_in_background(sr.Microphone(), callback)

# Mantener el programa en ejecución
import time
while True:
    time.sleep(1)

Detalles de instalación

PyAudio (para entrada de micrófono)

PyAudio es necesario para usar la clase Microphone. Instálalo con:

pip install SpeechRecognition[audio]

En Linux, es posible que necesites paquetes del sistema:

sudo apt-get install portaudio19-dev python3-all-dev

PocketSphinx (Sphinx fuera de línea)

pip install SpeechRecognition[pocketsphinx]

Vosk (Vosk fuera de línea)

pip install SpeechRecognition[vosk]

Luego descarga un modelo de Vosk desde aquí y colócalo en un directorio model.

Whisper (local)

pip install SpeechRecognition[whisper-local]

Faster Whisper

pip install SpeechRecognition[faster-whisper]

API de OpenAI Whisper

pip install SpeechRecognition[openai]

Establece la variable de entorno OPENAI_API_KEY antes de usar.

API de Groq Whisper

pip install SpeechRecognition[groq]

Establece GROQ_API_KEY.

API de Cohere Transcribe

pip install SpeechRecognition[cohere-api]

Establece CO_API_KEY.

Solución de problemas comunes

Reconocedor demasiado sensible o no lo suficientemente sensible

Ajusta la propiedad energy_threshold. Los valores típicamente van de 50 a 4000. Valores más altos significan menos sensibilidad, útil en entornos ruidosos.

r.energy_threshold = 3000

El reconocedor se cuelga en la primera escucha

Llama a adjust_for_ambient_noise antes de escuchar para establecer un umbral adecuado.

Sin dispositivo de entrada predeterminado

Enumera los micrófonos disponibles:

import speech_recognition as sr
for index, name in enumerate(sr.Microphone.list_microphone_names()):
    print(f"Micrófono con nombre \"{name}\" encontrado para `Microphone(device_index={index})`")

Luego usa Microphone(device_index=INDEX).

Problemas de idioma/dialecto

Establece el parámetro de idioma para mayor precisión. Por ejemplo, usa "en-GB" para inglés británico:

text = r.recognize_google(audio, language="en-GB")

Conclusión

SpeechRecognition es una biblioteca potente y flexible que abstrae las complejidades de diferentes backends de reconocimiento de voz. Ya sea que necesites capacidades fuera de línea para privacidad o precisión basada en la nube para producción, proporciona una API consistente que hace que el desarrollo sea rápido y mantenible. Con soporte para los modelos más recientes como Whisper y Groq, sigue siendo una opción principal para desarrolladores de Python que construyen aplicaciones activadas por voz.

Para más ejemplos y documentación detallada, visita el repositorio de GitHub.

Fuente

Uberi/speech_recognition: Módulo de reconocimiento de voz para Python, compatible con varios motores y API, en línea y fuera de línea.