#!/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()