2025-11-11 13:38:25 +01:00

41 lines
1.1 KiB
Python

import subprocess
import json
import vosk
# Modèle Vosk
model_path = "vosk-model/vosk-model-small-fr-0.22"
model = vosk.Model(model_path)
# Commande arecord : stéréo 44100 Hz → conversion nécessaire
# On utilise ffmpeg pour convertir à la volée : stéréo 44100 → mono 16000
command = [
"arecord", "-f", "cd", "-D", "hw:1"
]
# Démarrage d'arecord, redirigé vers ffmpeg en pipe
arecord = subprocess.Popen(command, stdout=subprocess.PIPE)
ffmpeg = subprocess.Popen(
[
"ffmpeg", "-loglevel", "quiet", "-i", "pipe:0",
"-ac", "1", "-ar", "16000", "-f", "s16le", "pipe:1"
],
stdin=arecord.stdout, stdout=subprocess.PIPE
)
# Initialisation Vosk
rec = vosk.KaldiRecognizer(model, 16000)
print("🎙️ Parle en français...")
# Boucle de lecture + reconnaissance
while True:
data = ffmpeg.stdout.read(4000)
if len(data) == 0:
break
if rec.AcceptWaveform(data):
result = json.loads(rec.Result())
print("📝", result.get("text", ""))
else:
partial = json.loads(rec.PartialResult())
# print("... ", partial.get("partial", ""))