mirror of
https://github.com/wassname/BitLit_test1.git
synced 2026-06-27 15:13:28 +08:00
ding, logger
This commit is contained in:
+9
-7
@@ -1,17 +1,20 @@
|
||||
#### RUNNING THE MODEL
|
||||
# Michels-MacBook-Pro:~ ShebMichel$ cd documents/pmlg/wake/decoder
|
||||
# Michels-MacBook-Pro:decoder ShebMichel$ python demo.py resources/HiBitLit.pmdl
|
||||
# cd documents/pmlg/wake/decoder
|
||||
# python demo.py resources/HiBitLit.pmdl
|
||||
from __future__ import print_function
|
||||
import os
|
||||
import sys
|
||||
|
||||
import snowboydecoder
|
||||
from snowboydecoder import play_ding, play_dong
|
||||
import signal
|
||||
|
||||
import numpy as np
|
||||
import time
|
||||
import numpy as np
|
||||
|
||||
import BitLit_main
|
||||
|
||||
|
||||
t0 = time.time() ## Time counter
|
||||
interrupted = False
|
||||
|
||||
@@ -36,10 +39,9 @@ model = sys.argv[1]
|
||||
# capture SIGINT signal, e.g., Ctrl+C
|
||||
signal.signal(signal.SIGINT, signal_handler)
|
||||
|
||||
|
||||
detector = snowboydecoder.HotwordDetector(model, sensitivity=0.75)
|
||||
print("Listening for hotword (Hi BitLit)... Press Ctrl+C to exit")
|
||||
snowboydecoder.play_audio_file()
|
||||
play_ding()
|
||||
detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5)
|
||||
print("Listening... Press Ctrl+C to exit")
|
||||
|
||||
|
||||
detector.start(
|
||||
|
||||
+35
-23
@@ -23,7 +23,7 @@ import hashlib
|
||||
import tempfile
|
||||
from logger import logger
|
||||
|
||||
from snowboydecoder import play_audio_file
|
||||
from snowboydecoder import play_ding, play_dong
|
||||
|
||||
import speech_recognition as sr ## Packages for voice recognizer
|
||||
for index, name in enumerate(sr.Microphone.list_microphone_names()):
|
||||
@@ -42,11 +42,11 @@ except:
|
||||
|
||||
def play_mp3(mp3_file):
|
||||
"""Play mp3 file with pyglet."""
|
||||
# FIXME (wassname) It currently plays in background but we want to wait untill it's finished
|
||||
source = pyglet.media.load(filename=mp3_file, streaming=False)
|
||||
source.play()
|
||||
time.sleep(source.duration*2 + 2) # TODO must be a better way to wait untill the media has played
|
||||
|
||||
print(mp3_file, source.duration)
|
||||
time.sleep(source.duration + 4) # must be a better way to wait untill the media has played
|
||||
print(mp3_file, source.duration)
|
||||
|
||||
def cache_gtts(text, lang="en-nz", cache_file=None):
|
||||
"""
|
||||
@@ -71,7 +71,7 @@ def cache_gtts(text, lang="en-nz", cache_file=None):
|
||||
en: English
|
||||
|
||||
"""
|
||||
print('say:', text)
|
||||
logger.debug('say: %s', text)
|
||||
if not cache_file:
|
||||
hash_filename = hashlib.md5(text.encode()).hexdigest() + '.mp3'
|
||||
cache_file = os.path.join(tempfile.gettempdir(), hash_filename)
|
||||
@@ -85,49 +85,61 @@ def generate_poem():
|
||||
|
||||
|
||||
############ AUDIO CONVERSION TO TEST
|
||||
play_audio_file()
|
||||
play_dong()
|
||||
t0 = time.time()
|
||||
r = sr.Recognizer()
|
||||
with sr.Microphone() as source:
|
||||
outfile1 = cache_gtts(text="Hi! My Name is BIT-LIT. PLEASE SPEAK SOME IDEAS FOR A POEM between the beeps.")
|
||||
|
||||
# print(r.energy_threshold)
|
||||
# r.adjust_for_ambient_noise(source)
|
||||
# print('energy_threshold', r.energy_threshold)
|
||||
r.energy_threshold=50
|
||||
|
||||
|
||||
print('mic', source)
|
||||
outfile1 = cache_gtts(text="Hi! My Name is BIT-LIT. PLEASE SPEAK SOME IDEAS FOR A POEM AFTER THE BEEP.")
|
||||
play_mp3(outfile1)
|
||||
play_ding()
|
||||
|
||||
play_audio_file()
|
||||
print('speak now', time.time())
|
||||
audio = r.listen(source)
|
||||
logger.debug('done recording %s', time.time())
|
||||
logger.info('recorded %s s', len(audio.frame_data)/audio.sample_rate)
|
||||
|
||||
audio = r.listen(source, phrase_time_limit=20)
|
||||
play_audio_file()
|
||||
|
||||
outfile2 = cache_gtts(text="BEEP. THANK YOU! GIVE ME A MINUTE TO GENERATE AND READ YOUR POEM. BEEP")
|
||||
play_dong()
|
||||
outfile2 = cache_gtts(text="BEEP. THANK YOU! GIVE ME A MINUTE TO GENERATE AND READ YOUR POEM")
|
||||
play_mp3(outfile2)
|
||||
|
||||
t1 = time.time()
|
||||
print('listen took', t1 - t0)
|
||||
logger.debug('listen took %s', t1 - t0)
|
||||
|
||||
try:
|
||||
print("using google speech to text...")
|
||||
logger.debug("using google speech to text...")
|
||||
USER_INPUT = r.recognize_google_cloud(audio, credentials_json=GOOGLE_CLOUD_SPEECH_CREDENTIALS)
|
||||
print("Google thinks you said: " + USER_INPUT)
|
||||
logger.info("Google thinks you said: " + USER_INPUT)
|
||||
except sr.UnknownValueError as e:
|
||||
print("Could not understand audio. {}".format(e))
|
||||
logger.error("Could not understand audio. {}".format(e))
|
||||
return
|
||||
except sr.RequestError as e:
|
||||
print("Could not request results; {0}".format(e))
|
||||
logger.error("Could not request results; {0}".format(e))
|
||||
return
|
||||
|
||||
t1b = time.time()
|
||||
print('transcribe took', t1b - t1)
|
||||
logger.debug('transcribe took %s', t1b - t1)
|
||||
|
||||
return
|
||||
|
||||
# Generate poem from user seed
|
||||
text_generated = poem(USER_INPUT)
|
||||
t2 = time.time()
|
||||
logger.info("ML POEM is: %s", text_generated)
|
||||
logger.info('poem and rhyme generation took %s', t2 - t1)
|
||||
logger.debug('poem and rhyme generation took %s', t2 - t1)
|
||||
|
||||
# TEXT CONVERSION IN AUDIO
|
||||
# FEED POEM TO TRANSCRIBER
|
||||
tts = gTTS(text=text_generated)
|
||||
# ts = datetime.datetime.utcnow().strftime('%Y%m%d_%H-%M-%S')
|
||||
poem_mp3 = "outputs/BitLit_poem.mp3"#.format(ts)
|
||||
ts = datetime.datetime.utcnow().strftime('%Y%m%d_%H-%M-%S')
|
||||
poem_mp3 = "outputs/BitLit_{}.mp3".format(ts)
|
||||
tts.save(poem_mp3)
|
||||
play_mp3(poem_mp3)
|
||||
|
||||
@@ -136,8 +148,8 @@ def generate_poem():
|
||||
|
||||
######
|
||||
t3 = time.time()
|
||||
logger.info('Poem to speech took %s', t3 - t2)
|
||||
logger.info("Time spent is about: %s seconds")
|
||||
logger.debug('Poem to speech took %s', t3 - t2)
|
||||
logger.debug("Total time spent is about: %s seconds", np.round(t3 - t0))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
|
||||
Forked from https://github.com/ShebMichel/BitLit_test1
|
||||
|
||||
# Run
|
||||
To run the program once installed
|
||||
@@ -42,43 +42,35 @@ API Keys:
|
||||
|
||||
When setup the layout should look something like
|
||||
|
||||
```
|
||||
├── BitLit_decoder.py
|
||||
├── BitLit_main.py
|
||||
├── BitLit_main.pyc
|
||||
├── BitLit_model_param.py
|
||||
├── BitLit_model_param.pyc
|
||||
├── HiBitLit.pmdl
|
||||
├── README.md
|
||||
├── logger.py
|
||||
├── logger.pyc
|
||||
├── outputs
|
||||
├── poem_generator.py
|
||||
├── poem_generator.pyc
|
||||
├── requirements.txt
|
||||
├── secrets
|
||||
│ ├── google_cloud_credentials.json
|
||||
│ └── google_cloud_credentials.template.json
|
||||
├── snowboy
|
||||
│ ├── _snowboydetect.so
|
||||
│ ├── resources
|
||||
│ │ ├── alexa.umdl
|
||||
│ │ ├── alexa_02092017.umdl
|
||||
│ │ ├── common.res
|
||||
│ │ ├── ding.wav
|
||||
│ │ ├── dong.wav
|
||||
│ │ └── snowboy.umdl
|
||||
│ ├── snowboydetect.py
|
||||
│ └── snowboydetect.pyc
|
||||
├── snowboydecoder.py
|
||||
├── snowboydecoder.pyc
|
||||
└── weights
|
||||
├── model_poems.npy
|
||||
└── model_rhymes.npy
|
||||
```
|
||||
|
||||
# TODO
|
||||
|
||||
- [ ] make sure text logging works
|
||||
- [ ] improve before and after text
|
||||
- [ ] it start recording while prompt is playing?
|
||||
├── BitLit_decoder.py
|
||||
├── BitLit_main.py
|
||||
├── BitLit_main.pyc
|
||||
├── BitLit_model_param.py
|
||||
├── BitLit_model_param.pyc
|
||||
├── HiBitLit.pmdl
|
||||
├── README.md
|
||||
├── logger.py
|
||||
├── logger.pyc
|
||||
├── outputs
|
||||
├── poem_generator.py
|
||||
├── poem_generator.pyc
|
||||
├── requirements.txt
|
||||
├── secrets
|
||||
│ ├── google_cloud_credentials.json
|
||||
│ └── google_cloud_credentials.template.json
|
||||
├── snowboy
|
||||
│ ├── _snowboydetect.so
|
||||
│ ├── resources
|
||||
│ │ ├── alexa.umdl
|
||||
│ │ ├── alexa_02092017.umdl
|
||||
│ │ ├── common.res
|
||||
│ │ ├── ding.wav
|
||||
│ │ ├── dong.wav
|
||||
│ │ └── snowboy.umdl
|
||||
│ ├── snowboydetect.py
|
||||
│ └── snowboydetect.pyc
|
||||
├── snowboydecoder.py
|
||||
├── snowboydecoder.pyc
|
||||
└── weights
|
||||
├── model_poems.npy
|
||||
└── model_rhymes.npy
|
||||
|
||||
+4
-2
@@ -2,9 +2,11 @@
|
||||
Voice to text to poem to speech
|
||||
Credits: Michel, Lauren, Thomas
|
||||
"""
|
||||
from __future__ import print_function
|
||||
import os
|
||||
import numpy as np
|
||||
|
||||
from logger import logger
|
||||
import re
|
||||
from textblob import TextBlob
|
||||
import random
|
||||
@@ -120,7 +122,7 @@ def poem(USER_INPUT):
|
||||
start_string = [first_rhyme]
|
||||
else:
|
||||
start_string = [random.choice(list(word2idx_rhymes.keys()))]
|
||||
print("The word {} is not in our corpus of rhymes yet.".format(first_rhyme))
|
||||
logger.error("The word {} is not in our corpus of rhymes yet.".format(first_rhyme))
|
||||
input_eval = [
|
||||
word2idx_rhymes[s] for s in start_string
|
||||
] # converts start_string to numbers the model understands
|
||||
@@ -143,7 +145,7 @@ def poem(USER_INPUT):
|
||||
input_eval = tf.expand_dims([predicted_id], 0)
|
||||
rhymes += [idx2word_rhymes[predicted_id]]
|
||||
|
||||
print("rhymes:", rhymes)
|
||||
logger.info("rhymes:", rhymes)
|
||||
|
||||
####################
|
||||
# POEM GENERATION #
|
||||
|
||||
@@ -60,6 +60,13 @@ def play_audio_file(fname=DETECT_DING):
|
||||
audio.terminate()
|
||||
|
||||
|
||||
def play_ding():
|
||||
play_audio_file(fname=DETECT_DING)
|
||||
|
||||
def play_dong():
|
||||
play_audio_file(fname=DETECT_DONG)
|
||||
|
||||
|
||||
class HotwordDetector(object):
|
||||
"""
|
||||
Snowboy decoder to detect whether a keyword specified by `decoder_model`
|
||||
|
||||
Reference in New Issue
Block a user