X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=listen.py;h=56f32294b34c80d65b992b7a441b4beff6773ad9;hb=bfde32ea8f021da27fb2cdf535efb0e9c465d6a2;hp=11a4db33f58d76b4a1f5a7b4a8b9a4fa6d982e46;hpb=18913d6fecc43aeecfd5b617030e9cd3e840ef08;p=kiosk.git diff --git a/listen.py b/listen.py index 11a4db3..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,32 +57,41 @@ 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 ) - try: - command = recognizer.recognize_google(speech) - print('[%s] >>>>>>>>>>>>> Google says command was %s' % ( + command = recognizer.recognize_google(speech) + print( + '[%s] >>>>>>>>>>>>> Google says command was %s' % ( str(datetime.now()), command) - ) - except Exception: - command = 'weather' + ) self._queue.put(command) except Exception as e: @@ -114,12 +122,16 @@ 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( + [], keyword_paths, sensitivities, ).listen_forever() + if __name__ == '__main__': main()