From 3fd03700655236a5fa61ca4199a8cdaebb9180a4 Mon Sep 17 00:00:00 2001 From: "kalonb91@gmail.com" Date: Mon, 22 Jan 2018 23:42:20 +0000 Subject: [PATCH 1/6] adding adjustments to snowboy for matrix creator --- examples/Python/demo_arecord.py | 2 +- examples/Python/snowboydecoder_arecord.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/Python/demo_arecord.py b/examples/Python/demo_arecord.py index c14bf155..88b39fe5 100644 --- a/examples/Python/demo_arecord.py +++ b/examples/Python/demo_arecord.py @@ -24,7 +24,7 @@ def interrupt_callback(): # capture SIGINT signal, e.g., Ctrl+C signal.signal(signal.SIGINT, signal_handler) -detector = snowboydecoder_arecord.HotwordDetector(model, sensitivity=0.5) +detector = snowboydecoder_arecord.HotwordDetector(model, sensitivity=0.4) print('Listening... Press Ctrl+C to exit') # main loop diff --git a/examples/Python/snowboydecoder_arecord.py b/examples/Python/snowboydecoder_arecord.py index efa3be46..3c4aa118 100644 --- a/examples/Python/snowboydecoder_arecord.py +++ b/examples/Python/snowboydecoder_arecord.py @@ -92,7 +92,7 @@ def __init__(self, decoder_model, def record_proc(self): CHUNK = 2048 RECORD_RATE = 16000 - cmd = 'arecord -q -r %d -f S16_LE' % RECORD_RATE + cmd = 'arecord -D mic_channel8 -q -r %d -f S16_LE' % RECORD_RATE process = subprocess.Popen(cmd.split(' '), stdout = subprocess.PIPE, stderr = subprocess.PIPE) @@ -168,6 +168,7 @@ def start(self, detected_callback=play_audio_file, callback = detected_callback[ans-1] if callback is not None: callback() + os.system('/home/pi/record.sh') logger.debug("finished.") From 379ff20a2f250cb84ab76ccbff7f2bf4f278d99f Mon Sep 17 00:00:00 2001 From: "kalonb91@gmail.com" Date: Tue, 23 Jan 2018 01:04:34 +0000 Subject: [PATCH 2/6] moving wsk call to seperate method --- examples/Python/demo_arecord.py | 2 +- examples/Python/snowboydecoder_arecord.py | 24 +++++++++++++++++++++-- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/examples/Python/demo_arecord.py b/examples/Python/demo_arecord.py index 88b39fe5..c14bf155 100644 --- a/examples/Python/demo_arecord.py +++ b/examples/Python/demo_arecord.py @@ -24,7 +24,7 @@ def interrupt_callback(): # capture SIGINT signal, e.g., Ctrl+C signal.signal(signal.SIGINT, signal_handler) -detector = snowboydecoder_arecord.HotwordDetector(model, sensitivity=0.4) +detector = snowboydecoder_arecord.HotwordDetector(model, sensitivity=0.5) print('Listening... Press Ctrl+C to exit') # main loop diff --git a/examples/Python/snowboydecoder_arecord.py b/examples/Python/snowboydecoder_arecord.py index 3c4aa118..72db9fc1 100644 --- a/examples/Python/snowboydecoder_arecord.py +++ b/examples/Python/snowboydecoder_arecord.py @@ -110,6 +110,18 @@ def init_recording(self): self.record_thread = threading.Thread(target = self.record_proc) self.record_thread.start() + def wsk_transcribe_audio(audio): + sys.exit(0) + encoded_audio = open(audio, 'r').read().encode("base64") + # get the wsk values by running "wsk property get" + whisk_namespace = "" + whisk_action = "" + whisk_api = "https://openwhisk.ng.bluemix.net/api/v1/namespaces/" + whisk_namespace + "/actions/" + whisk_action + "?blocking=true&result=true" + whisk_auth = ("", "") + stt_username = "" + stt_password = "" + #r = requests.post(whisk_api, json={"content_type":"audio/flac","encoding":"base64","payload": encoded_audio ,"username":stt_username,"password":stt_password}, auth=whisk_auth) + def start(self, detected_callback=play_audio_file, interrupt_check=lambda: False, sleep_time=0.03): @@ -168,8 +180,16 @@ def start(self, detected_callback=play_audio_file, callback = detected_callback[ans-1] if callback is not None: callback() - os.system('/home/pi/record.sh') - + matrix_demos_dir = "/home/pi/matrix-creator-hal/build/demos/" + beamforming_result_path = "/tmp/beamforming_result.flac" + cwd = os.getcwd() + print("Running from " + cwd) + os.system(matrix_demos_dir + "micarray_recorder") + print("Voice recording complete") + os.system("sox -r 16000 -c 1 -e signed -b 16 " + cwd + "/mic_16000_s16le_channel_8.raw /tmp/channel_8.wav") + os.system("flac -f -s /tmp/channel_8.wav -o /tmp/beamforming_result.flac") + print("Conversion from raw to flac complete") + #wsk_transcribe_audio("/tmp/beamforming_result.flac") logger.debug("finished.") def terminate(self): From a4ca94db7f53fe9ec118f6015366a313b32cff39 Mon Sep 17 00:00:00 2001 From: Kalonji Bankole Date: Sun, 1 Apr 2018 15:31:45 -0700 Subject: [PATCH 3/6] updating demo.py to call whisk after wakeword is detected --- examples/Python/snowboydecoder.py | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/examples/Python/snowboydecoder.py b/examples/Python/snowboydecoder.py index 8bd1f3a2..4ae8119e 100644 --- a/examples/Python/snowboydecoder.py +++ b/examples/Python/snowboydecoder.py @@ -7,6 +7,8 @@ import wave import os import logging +import sys +import requests logging.basicConfig() logger = logging.getLogger("snowboy") @@ -56,6 +58,22 @@ def play_audio_file(fname=DETECT_DING): audio.terminate() +def wsk_transcribe_audio(): + rec_seconds = 3 + audio_path = "/tmp/input.flac" + os.system("rec /tmp/input.wav trim 0 " + str(rec_seconds)) + os.system("flac -f -s /tmp/input.wav -o " + audio_path ) + encoded_audio = open(audio_path, 'r').read().encode("base64") + # get the following wsk values by running "wsk property get" + whisk_namespace = "kkbankol%40us.ibm.com_dev" + whisk_action = "homeSequence" + whisk_api = "https://openwhisk.ng.bluemix.net/api/v1/namespaces/" + whisk_namespace + "/actions/" + whisk_action + "?blocking=true&result=true" + whisk_auth = ("", "") + r = requests.post(whisk_api, json={"content_type":"audio/flac","encoding":"base64","payload": encoded_audio}, auth=whisk_auth) + print("Listening... Press Ctrl+C to exit") + return + + class HotwordDetector(object): """ Snowboy decoder to detect whether a keyword specified by `decoder_model` @@ -114,7 +132,6 @@ def audio_callback(in_data, frame_count, time_info, status): frames_per_buffer=2048, stream_callback=audio_callback) - def start(self, detected_callback=play_audio_file, interrupt_check=lambda: False, sleep_time=0.03, @@ -188,6 +205,8 @@ def start(self, detected_callback=play_audio_file, message += time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) logger.info(message) + wsk_transcribe_audio() + logger.debug("finished.") callback = detected_callback[0] if callback is not None: callback() @@ -216,7 +235,6 @@ def start(self, detected_callback=play_audio_file, recordingCount = recordingCount + 1 self.recordedData.append(data) - logger.debug("finished.") def saveMessage(self): From 9327609cd4f53df16327776b05d4c5c8fce2f25a Mon Sep 17 00:00:00 2001 From: Kalonji Bankole Date: Sun, 1 Apr 2018 15:43:21 -0700 Subject: [PATCH 4/6] adding sample 'hello watson' model --- examples/Python/Hey_Watson_PI.pmdl | Bin 0 -> 11899 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/Python/Hey_Watson_PI.pmdl diff --git a/examples/Python/Hey_Watson_PI.pmdl b/examples/Python/Hey_Watson_PI.pmdl new file mode 100644 index 0000000000000000000000000000000000000000..bfeb168dff24686bbc4dcfa624f98a87d2034a9a GIT binary patch literal 11899 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 h-=yEG3hnTi#NHPIh>_@f Date: Sun, 1 Apr 2018 19:21:32 -0700 Subject: [PATCH 5/6] adding comments for wsk auth --- examples/Python/snowboydecoder.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/examples/Python/snowboydecoder.py b/examples/Python/snowboydecoder.py index 4ae8119e..304d87cd 100644 --- a/examples/Python/snowboydecoder.py +++ b/examples/Python/snowboydecoder.py @@ -68,7 +68,10 @@ def wsk_transcribe_audio(): whisk_namespace = "kkbankol%40us.ibm.com_dev" whisk_action = "homeSequence" whisk_api = "https://openwhisk.ng.bluemix.net/api/v1/namespaces/" + whisk_namespace + "/actions/" + whisk_action + "?blocking=true&result=true" - whisk_auth = ("", "") + # running "wsk property get" should deliver a string like 'd16f007f-d412-4511-87d9-ca34d40c6cce:OWosfg0EHHgTw4FPRxFaPDWS1IqNgihX8OazAZ9XO75VtbNQH1k5yfx7CXDdjr5a' + # replace the "auth" value below with the string printed by the wsk cli + auth = 'd16f007f-d412-4511-87d9-ca34d40c6cce:OWosfg0EHHgTw4FPRxFaPDWS1IqNgihX8OazAZ9XO75VtbNQH1k5yfx7CXDdjr5a' + whisk_auth = tuple(auth.split(":")) r = requests.post(whisk_api, json={"content_type":"audio/flac","encoding":"base64","payload": encoded_audio}, auth=whisk_auth) print("Listening... Press Ctrl+C to exit") return From 7d82c53435bf9730f45da71700335449cf046cce Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 15 Apr 2018 08:40:11 +0200 Subject: [PATCH 6/6] Fix Python syntax errors and undefined names --- examples/Python/demo4.py | 16 ++++++---------- examples/Python/demo_threaded.py | 9 +++++++-- examples/Python/snowboydecoder_arecord.py | 22 +++++++++++----------- examples/Python3/demo4.py | 6 ++---- examples/REST_API/training_service.py | 8 ++++---- 5 files changed, 30 insertions(+), 31 deletions(-) diff --git a/examples/Python/demo4.py b/examples/Python/demo4.py index a59eedaa..718e997e 100644 --- a/examples/Python/demo4.py +++ b/examples/Python/demo4.py @@ -18,7 +18,7 @@ def audioRecorderCallback(fname): - print "converting audio to text" + print("converting audio to text") r = sr.Recognizer() with sr.AudioFile(fname) as source: audio = r.record(source) # read the entire audio file @@ -29,9 +29,9 @@ def audioRecorderCallback(fname): # instead of `r.recognize_google(audio)` print(r.recognize_google(audio)) except sr.UnknownValueError: - print "Google Speech Recognition could not understand audio" + print("Google Speech Recognition could not understand audio") except sr.RequestError as e: - print "Could not request results from Google Speech Recognition service; {0}".format(e) + print("Could not request results from Google Speech Recognition service; {0}".format(e)) os.remove(fname) @@ -51,8 +51,8 @@ def interrupt_callback(): return interrupted if len(sys.argv) == 1: - print "Error: need to specify model name" - print "Usage: python demo.py your.model" + print("Error: need to specify model name") + print("Usage: python demo.py your.model") sys.exit(-1) model = sys.argv[1] @@ -61,7 +61,7 @@ def interrupt_callback(): signal.signal(signal.SIGINT, signal_handler) detector = snowboydecoder.HotwordDetector(model, sensitivity=0.38) -print "Listening... Press Ctrl+C to exit" +print("Listening... Press Ctrl+C to exit") # main loop detector.start(detected_callback=detectedCallback, @@ -70,7 +70,3 @@ def interrupt_callback(): sleep_time=0.01) detector.terminate() - - - - diff --git a/examples/Python/demo_threaded.py b/examples/Python/demo_threaded.py index ded146c7..2e202922 100644 --- a/examples/Python/demo_threaded.py +++ b/examples/Python/demo_threaded.py @@ -3,6 +3,11 @@ import signal import time +try: + raw_input # Python 2 +except NameError: + raw_input = input # Python 3 + stop_program = False # This a demo that shows running Snowboy in another thread @@ -40,8 +45,8 @@ def signal_handler(signal, frame): try: num1 = int(raw_input("Enter the first number to add: ")) num2 = int(raw_input("Enter the second number to add: ")) - print "Sum of number: {}".format(num1 + num2) + print("Sum of number: {}".format(num1 + num2)) except ValueError: - print "You did not enter a number." + print("You did not enter a number.") threaded_detector.terminate() diff --git a/examples/Python/snowboydecoder_arecord.py b/examples/Python/snowboydecoder_arecord.py index 72db9fc1..992c9d80 100644 --- a/examples/Python/snowboydecoder_arecord.py +++ b/examples/Python/snowboydecoder_arecord.py @@ -5,6 +5,7 @@ import time import wave import os +import sys import logging import subprocess import threading @@ -180,16 +181,16 @@ def start(self, detected_callback=play_audio_file, callback = detected_callback[ans-1] if callback is not None: callback() - matrix_demos_dir = "/home/pi/matrix-creator-hal/build/demos/" - beamforming_result_path = "/tmp/beamforming_result.flac" - cwd = os.getcwd() - print("Running from " + cwd) - os.system(matrix_demos_dir + "micarray_recorder") - print("Voice recording complete") - os.system("sox -r 16000 -c 1 -e signed -b 16 " + cwd + "/mic_16000_s16le_channel_8.raw /tmp/channel_8.wav") - os.system("flac -f -s /tmp/channel_8.wav -o /tmp/beamforming_result.flac") - print("Conversion from raw to flac complete") - #wsk_transcribe_audio("/tmp/beamforming_result.flac") + matrix_demos_dir = "/home/pi/matrix-creator-hal/build/demos/" + beamforming_result_path = "/tmp/beamforming_result.flac" + cwd = os.getcwd() + print("Running from " + cwd) + os.system(matrix_demos_dir + "micarray_recorder") + print("Voice recording complete") + os.system("sox -r 16000 -c 1 -e signed -b 16 " + cwd + "/mic_16000_s16le_channel_8.raw /tmp/channel_8.wav") + os.system("flac -f -s /tmp/channel_8.wav -o /tmp/beamforming_result.flac") + print("Conversion from raw to flac complete") + #wsk_transcribe_audio("/tmp/beamforming_result.flac") logger.debug("finished.") def terminate(self): @@ -199,4 +200,3 @@ def terminate(self): """ self.recording = False self.record_thread.join() - diff --git a/examples/Python3/demo4.py b/examples/Python3/demo4.py index dc52119e..11ea8b2f 100644 --- a/examples/Python3/demo4.py +++ b/examples/Python3/demo4.py @@ -1,3 +1,5 @@ +from __future__ import print_function + import snowboydecoder import sys import signal @@ -69,7 +71,3 @@ def interrupt_callback(): sleep_time=0.01) detector.terminate() - - - - diff --git a/examples/REST_API/training_service.py b/examples/REST_API/training_service.py index 0e842fff..314d0009 100644 --- a/examples/REST_API/training_service.py +++ b/examples/REST_API/training_service.py @@ -25,7 +25,7 @@ def get_wave(fname): try: [_, wav1, wav2, wav3, out] = sys.argv except ValueError: - print "Usage: %s wave_file1 wave_file2 wave_file3 out_model_name" % sys.argv[0] + print("Usage: %s wave_file1 wave_file2 wave_file3 out_model_name" % sys.argv[0]) sys.exit() data = { @@ -46,7 +46,7 @@ def get_wave(fname): if response.ok: with open(out, "w") as outfile: outfile.write(response.content) - print "Saved model to '%s'." % out + print("Saved model to '%s'." % out) else: - print "Request failed." - print response.text + print("Request failed.") + print(response.text)