49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
#!/usr/bin/env python3
|
|
import sys
|
|
import numpy as np
|
|
import pyaudio
|
|
from openwakeword.model import Model
|
|
|
|
CHUNK = 1280 # 80ms bei 16kHz — von openwakeword erwartet
|
|
RATE = 16000
|
|
THRESHOLD = 0.5
|
|
|
|
def main():
|
|
import openwakeword
|
|
openwakeword.utils.download_models(["hey_jarvis"])
|
|
model = Model(
|
|
wakeword_models=["hey_jarvis"],
|
|
inference_framework="onnx"
|
|
)
|
|
|
|
pa = pyaudio.PyAudio()
|
|
stream = pa.open(
|
|
rate=RATE,
|
|
channels=1,
|
|
format=pyaudio.paInt16,
|
|
input=True,
|
|
frames_per_buffer=CHUNK,
|
|
)
|
|
|
|
print("Wakeword aktiv", flush=True)
|
|
|
|
try:
|
|
while True:
|
|
data = stream.read(CHUNK, exception_on_overflow=False)
|
|
audio = np.frombuffer(data, dtype=np.int16)
|
|
prediction = model.predict(audio)
|
|
for mdl, score in prediction.items():
|
|
if score > THRESHOLD:
|
|
print("WAKE", flush=True)
|
|
model.reset()
|
|
break
|
|
except KeyboardInterrupt:
|
|
pass
|
|
finally:
|
|
stream.stop_stream()
|
|
stream.close()
|
|
pa.terminate()
|
|
|
|
if __name__ == "__main__":
|
|
main()
|