1b-funcuinal-capturar audio del micrófono y transcribir en tiempo real con Python y Vosk

 Siguientes pasos si sigue lento:

  1. Prueba con blocksize=2000

  2. Usa micrófono externo si puedes

  3. Verifica CPU: evita tener apps pesadas abiertas

  4. Reduce ruido ambiental

¡Perfecto! Aquí tienes la versión final optimizada y funcional de tu transcriptor con Vosk, que:

✅ Usa la estructura que te funcionó bien
✅ Transcribe audio de forma clara y fluida
✅ Guarda automáticamente lo transcrito en un archivo transcripcion.txt
✅ Tiene control para evitar imprimir parciales repetidos
✅ Puedes detener con Ctrl + C


🧠 transcriptor.py (versión final y confiable)

python
import queue import sounddevice as sd from vosk import Model, KaldiRecognizer import json import os import sys from datetime import datetime # Ruta al modelo Vosk MODEL_PATH = "models/vosk-model-small-es-0.42" # Frecuencia y bloque recomendados SAMPLE_RATE = 16000 BLOCK_SIZE = 4000 # 4000 frames = 0.25s # Archivo para guardar transcripciones ARCHIVO_SALIDA = "transcripcion.txt" # Cola de audio q = queue.Queue() def audio_callback(indata, frames, time, status): if status: print(f"⚠️ Estado: {status}", file=sys.stderr) q.put(bytes(indata)) def main(): if not os.path.exists(MODEL_PATH): print(f"❌ No se encontró el modelo en: {MODEL_PATH}") print("🔗 Descárgalo desde: https://alphacephei.com/vosk/models") return print("📦 Cargando modelo...") model = Model(MODEL_PATH) recognizer = KaldiRecognizer(model, SAMPLE_RATE) print("🎤 Dictado iniciado. Habla por el micrófono...\n(CTRL+C para detener)\n") # Prepara archivo de salida with open(ARCHIVO_SALIDA, "a", encoding="utf-8") as f_out: f_out.write("\n\n📅 Inicio de dictado: " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n") last_partial = "" try: with sd.RawInputStream(samplerate=SAMPLE_RATE, blocksize=BLOCK_SIZE, dtype='int16', channels=1, callback=audio_callback): while True: data = q.get() if recognizer.AcceptWaveform(data): resultado = json.loads(recognizer.Result()) texto = resultado.get("text", "").strip() if texto: print("📝 Texto:", texto) f_out.write(texto + "\n") f_out.flush() else: parcial = json.loads(recognizer.PartialResult()).get("partial", "").strip() if parcial and parcial != last_partial: print("⏳", parcial, end='\r') last_partial = parcial except KeyboardInterrupt: print("\n🛑 Dictado detenido por el usuario.") f_out.write("🛑 Dictado finalizado: " + datetime.now().strftime("%Y-%m-%d %H:%M:%S") + "\n") except Exception as e: print(f"💥 Error: {e}") print("🧪 Verifica que tu micrófono esté disponible o prueba:\nimport sounddevice as sd\nprint(sd.query_devices())") if __name__ == "__main__": main()

✅ ¿Qué hace esta versión?

FunciónDescripción
🎧 Captura audioDesde el micrófono en tiempo real (bloques de 0.25s)
🧠 Transcribe con VoskFrases completas y claras
📝 Guarda textoTodo lo transcrito va a transcripcion.txt
💬 Muestra parcial dinámicoSolo si cambia (limpia consola)
🔌 Detiene con Ctrl + CY marca hora de finalización en el archivo

🧪 Requisitos recordatorio:

bash
pip install vosk sounddevice

Descarga modelo español desde:
🔗 https://alphacephei.com/vosk/models
Modelo recomendado: vosk-model-small-es-0.42
Ubicación esperada:

bash
models/vosk-model-small-es-0.42/

¿Quieres que el texto también se copie al portapapeles o mostrar una interfaz simple con Tkinter? Puedo ayudarte con eso también.

Comentarios

Entradas más populares de este blog

b-Web Speech API

captura video con audio del sistema (como música o sonidos del navegador) pero sin usar el micrófono

EL audio lo envia el navegador-Transcripción de Voz con Whisper