#!/usr/bin/env python3 """Transcribe un WAV a texto con faster-whisper local. Nada sale de la maquina. escucha_transcribe.py fichero.wav Es la mitad "oido" del puente de voz del verde: el TUI de Hermes no tiene micro, asi que grabamos aparte (escucha-verde.sh) y transcribimos aqui, en local, con el mismo faster-whisper 'small' en espanol que usa el STT de Hermes. En CPU a proposito: el 4B ocupa la tarjeta y el margen de VRAM es de 223 MiB; whisper en CPU tarda un par de segundos mas y no arriesga un out-of-memory. """ import os import sys MODELO = os.environ.get("VERDE_WHISPER_MODELO", "small") IDIOMA = os.environ.get("VERDE_WHISPER_IDIOMA", "es") _modelo = None def carga(): global _modelo if _modelo is None: from faster_whisper import WhisperModel # int8 en CPU: rapido y sin tocar la VRAM del modelo del agente. _modelo = WhisperModel(MODELO, device="cpu", compute_type="int8") return _modelo def transcribe(ruta_wav): m = carga() segmentos, _ = m.transcribe( ruta_wav, language=IDIOMA, vad_filter=True, # el silencio no llega a whisper vad_parameters={"min_silence_duration_ms": 500}, ) return " ".join(s.text.strip() for s in segmentos).strip() def main(): if len(sys.argv) < 2 or not os.path.exists(sys.argv[1]): print("uso: escucha_transcribe.py fichero.wav", file=sys.stderr) return 2 print(transcribe(sys.argv[1])) return 0 if __name__ == "__main__": sys.exit(main())