diff --git a/audio.py b/audio.py index 5dfeac2d..8cda3d80 100644 --- a/audio.py +++ b/audio.py @@ -11,7 +11,7 @@ from pocketsphinx.pocketsphinx import * from sphinxbase.sphinxbase import * -CHUNK_SIZE = 131072 +CHUNK_SIZE = 4096 FORMAT = pyaudio.paInt16 RATE = 44100 @@ -116,38 +116,42 @@ def speech_recog(self, model): # Create a decoder with certain model config = Decoder.default_config() config.set_string('-hmm', '/usr/local/share/pocketsphinx/model/en-us/en-us') - config.set_string('-kws', MODELDIR + model + '.txt') - #config.set_string('-lm', MODELDIR + model + '.lm') + config.set_int('-ds', 2) + config.set_int('-topn', 3) + config.set_int('-maxwpf', 5) + #config.set_string('-kws', MODELDIR + model + '.txt') + config.set_string('-lm', MODELDIR + model + '.lm') config.set_string('-dict', MODELDIR + model + '.dict') decoder = Decoder(config) p = pyaudio.PyAudio() + logging.info("device info: " + str(p.get_device_info_by_index(0))) #stream = p.open(format=pyaudio.paInt16, channels=1, input_device_index=0, rate=16000, input=True, frames_per_buffer=1024) stream = p.open(format=FORMAT, channels=1, input_device_index=0, rate=RATE, input=True, - frames_per_buffer=CHUNK_SIZE) + frames_per_buffer=CHUNK_SIZE*256) stream.start_stream() decoder.start_utt() tstamp = time.time() recog_text = '' - while time.time() - tstamp < 10.0: + while len(recog_text) < 1: try: buf = stream.read(CHUNK_SIZE) + logging.info("actual voice") + decoder.process_raw(buf, False, False) + if decoder.hyp().hypstr != '': + recog_text += decoder.hyp().hypstr + print "text: " + decoder.hyp().hypstr + tstamp = time.time() except IOError as ex: if ex[1] != pyaudio.paInputOverflowed: raise buf = '\x00' * CHUNK_SIZE #white noise logging.info("white noise") - - decoder.process_raw(buf, False, False) - try: - if decoder.hyp().hypstr != '': - recog_text += decoder.hyp().hypstr - print "text: " + decoder.hyp().hypstr - tstamp = time.time() except AttributeError: pass + decoder.end_utt() stream.close() p.terminate() diff --git a/coderbot.cfg b/coderbot.cfg index d7351ff0..e03a2a40 100644 --- a/coderbot.cfg +++ b/coderbot.cfg @@ -1 +1 @@ -{"move_tr_speed": "70", "move_fw_elapse": "1.5", "camera_color_object_size_min": "20", "camera_path_object_size_min": "20", "load_at_start": "", "move_tr_elapse": "1", "sound_stop": "$shutdown.mp3", "show_control_move_commands": "true", "prog_level": "adv", "prog_scrollbars": "true", "move_fw_speed": "100", "camera_color_object_size_max": "8000", "sound_shutter": "$shutter.mp3", "show_page_prefs": "true", "ctrl_hud_image": "", "button_func": "none", "ctrl_fw_elapse": "-1", "ctrl_tr_elapse": "-1", "move_power_angle_2": "20", "move_power_angle_3": "20", "move_power_angle_1": "15", "show_page_program": "true", "sound_start": "$startup.mp3", "camera_exposure_mode": "auto", "ctrl_tr_speed": "80", "ctrl_fw_speed": "100", "camera_refresh_timeout": "0.1", "camera_jpeg_quality": "10", "prog_maxblocks": "-1", "move_motor_mode": "servo", "camera_path_object_size_max": "8000", "show_page_control": "true"} \ No newline at end of file +{"move_tr_speed": "70", "move_fw_elapse": "1.5", "camera_color_object_size_min": "20", "camera_path_object_size_min": "20", "load_at_start": "", "move_tr_elapse": "1", "sound_stop": "$shutdown.mp3", "show_control_move_commands": "true", "prog_level": "adv", "prog_scrollbars": "true", "move_fw_speed": "100", "camera_color_object_size_max": "8000", "sound_shutter": "$shutter.mp3", "show_page_prefs": "true", "ctrl_hud_image": "", "button_func": "none", "ctrl_fw_elapse": "-1", "ctrl_tr_elapse": "-1", "move_power_angle_2": "20", "move_power_angle_3": "20", "move_power_angle_1": "15", "move_motor_trim": "0.95", "show_page_program": "true", "sound_start": "$startup.mp3", "camera_exposure_mode": "auto", "ctrl_tr_speed": "80", "ctrl_fw_speed": "100", "camera_refresh_timeout": "0.1", "camera_jpeg_quality": "10", "prog_maxblocks": "-1", "move_motor_mode": "servo", "camera_path_object_size_max": "8000", "show_page_control": "true"} \ No newline at end of file diff --git a/coderbot.py b/coderbot.py index 211fa1df..eb6815ab 100644 --- a/coderbot.py +++ b/coderbot.py @@ -1,6 +1,7 @@ import os import time import pigpio +import config PIN_MOTOR_ENABLE = 22 PIN_LEFT_FORWARD = 25 @@ -20,13 +21,14 @@ def coderbot_callback(gpio, level, tick): class CoderBot: _pin_out = [PIN_MOTOR_ENABLE, PIN_LEFT_FORWARD, PIN_RIGHT_FORWARD, PIN_LEFT_BACKWARD, PIN_RIGHT_BACKWARD, PIN_SERVO_3, PIN_SERVO_4] - def __init__(self, servo=False): + def __init__(self, servo=False, motor_trim_factor=1.0): self.pi = pigpio.pi('localhost') self.pi.set_mode(PIN_PUSHBUTTON, pigpio.INPUT) self._cb = dict() self._cb_last_tick = dict() self._cb_elapse = dict() self._servo = servo + self._motor_trim_factor = motor_trim_factor if self._servo: self.motor_control = self._servo_motor else: @@ -42,16 +44,16 @@ def __init__(self, servo=False): the_bot = None @classmethod - def get_instance(cls, servo=False): + def get_instance(cls, servo=False, motor_trim_factor=1.0): if not cls.the_bot: cls.the_bot = CoderBot(servo) return cls.the_bot def move(self, speed=100, elapse=-1): - self.motor_control(speed_left=speed, speed_right=speed, elapse=elapse) + self.motor_control(speed_left=speed / self._motor_trim_factor, speed_right=speed * self._motor_trim_factor, elapse=elapse) def turn(self, speed=100, elapse=-1): - self.motor_control(speed_left=speed, speed_right=-speed, elapse=elapse) + self.motor_control(speed_left=speed / self._motor_trim_factor, speed_right=-(speed * self._motor_trim_factor), elapse=elapse) def forward(self, speed=100, elapse=-1): self.move(speed=speed, elapse=elapse) diff --git a/main.py b/main.py index 92ed406f..395fada4 100644 --- a/main.py +++ b/main.py @@ -216,7 +216,7 @@ def run_server(): global audio try: app.bot_config = Config.read() - bot = CoderBot.get_instance(servo=(app.bot_config.get("move_motor_mode")=="servo")) + bot = CoderBot.get_instance(servo=(app.bot_config.get("move_motor_mode")=="servo"), motor_trim_factor = float(app.bot_config.get('move_motor_trim', '1.0'))) cam = Camera.get_instance() motion = Motion.get_instance() audio = Audio.get_instance() diff --git a/psmodels/model_simple.txt b/psmodels/model_simple.txt index 4931052c..7d4b624e 100644 --- a/psmodels/model_simple.txt +++ b/psmodels/model_simple.txt @@ -1,3 +1,4 @@ +CODERBOT /1e-10/ MOVE /1e-10/ FORWARD /1e-10/ BACKWARD /1e-10/ diff --git a/templates/config.html b/templates/config.html index 7012904d..e49b7ecb 100644 --- a/templates/config.html +++ b/templates/config.html @@ -115,6 +115,8 @@

CoderBot

+ +