41 lines
1.1 KiB
Python
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", ""))
|