X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=listen.py;h=56f32294b34c80d65b992b7a441b4beff6773ad9;hb=6cd5b068127501d2b48e8ac67b7432bffc5fce53;hp=70d19855df1b0307a835924f874bdadb99758867;hpb=5c39d86ebc075ccb7be98b1dfab8040b72ff9134;p=kiosk.git diff --git a/listen.py b/listen.py index 70d1985..56f3229 100755 --- a/listen.py +++ b/listen.py @@ -3,14 +3,12 @@ import os import struct from datetime import datetime -from threading import Thread -import numpy as np import pvporcupine import pyaudio -import soundfile import speech_recognition as sr + class HotwordListener(object): def __init__(self, command_queue, @@ -19,7 +17,6 @@ class HotwordListener(object): input_device_index=None, library_path=pvporcupine.LIBRARY_PATH, model_path=pvporcupine.MODEL_PATH): - super(HotwordListener, self).__init__() self._queue = command_queue self._library_path = library_path self._model_path = model_path @@ -30,7 +27,9 @@ class HotwordListener(object): def listen_forever(self): keywords = list() for x in self._keyword_paths: - keywords.append(os.path.basename(x).replace('.ppn', '').split('_')[0]) + keywords.append( + os.path.basename(x).replace('.ppn', '').split('_')[0] + ) porcupine = None pa = None @@ -58,28 +57,40 @@ class HotwordListener(object): print('}') while True: - raw = audio_stream.read(porcupine.frame_length, exception_on_overflow=False) + raw = audio_stream.read( + porcupine.frame_length, + exception_on_overflow=False + ) pcm = struct.unpack_from("h" * porcupine.frame_length, raw) result = porcupine.process(pcm) if result >= 0: - os.system('/usr/bin/aplay /var/www/kiosk/attention.wav') + cmd = 'aplay /var/www/kiosk/attention.wav' + print(f'Running {cmd}...') + x = os.system(cmd) + print(f'---- (done {x}) ----') print('[%s] >>>>>>>>>>>>> Detected wakeword %s' % ( str(datetime.now()), keywords[result]) ) print('>>>>>>>>>>>>>>> Listening for command now...') raw = bytearray() - for i in range(0, int(porcupine.sample_rate / porcupine.frame_length * 4)): + for i in range( + 0, + int(porcupine.sample_rate / porcupine.frame_length * 4) + ): raw += audio_stream.read(porcupine.frame_length, exception_on_overflow=False) - print(f'>>>>>>>>>>>>>> Recognizing command... {len(raw)} bytes') + print( + f'>>>>>>>>>>>>>> Recognizing command... {len(raw)} bytes' + ) speech = sr.AudioData( frame_data = bytes(raw), sample_rate = porcupine.sample_rate, sample_width = 2, # 16 bits ) command = recognizer.recognize_google(speech) - print('[%s] >>>>>>>>>>>>> Google says command was %s' % ( - str(datetime.now()), command) + print( + '[%s] >>>>>>>>>>>>> Google says command was %s' % ( + str(datetime.now()), command) ) self._queue.put(command) @@ -111,7 +122,9 @@ class HotwordListener(object): def main(): - keyword_paths = [pvporcupine.KEYWORD_PATHS[x] for x in ["blueberry", "bumblebee"]] + keyword_paths = [ + pvporcupine.KEYWORD_PATHS[x] for x in ["blueberry", "bumblebee"] + ] sensitivities = [0.85, 0.95] HotwordListener( [], @@ -119,5 +132,6 @@ def main(): sensitivities, ).listen_forever() + if __name__ == '__main__': main()