Skip to content

Commit

Permalink
-
Browse files Browse the repository at this point in the history
  • Loading branch information
previ committed Sep 11, 2015
1 parent 6a6abc4 commit f651004
Show file tree
Hide file tree
Showing 6 changed files with 27 additions and 18 deletions.
28 changes: 16 additions & 12 deletions audio.py
Expand Up @@ -11,7 +11,7 @@
from pocketsphinx.pocketsphinx import *
from sphinxbase.sphinxbase import *

CHUNK_SIZE = 131072
CHUNK_SIZE = 4096
FORMAT = pyaudio.paInt16
RATE = 44100

Expand Down Expand Up @@ -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()
Expand Down
2 changes: 1 addition & 1 deletion 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"}
{"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"}
10 changes: 6 additions & 4 deletions coderbot.py
@@ -1,6 +1,7 @@
import os
import time
import pigpio
import config

PIN_MOTOR_ENABLE = 22
PIN_LEFT_FORWARD = 25
Expand All @@ -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:
Expand All @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion main.py
Expand Up @@ -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()
Expand Down
1 change: 1 addition & 0 deletions psmodels/model_simple.txt
@@ -1,3 +1,4 @@
CODERBOT /1e-10/
MOVE /1e-10/
FORWARD /1e-10/
BACKWARD /1e-10/
Expand Down
2 changes: 2 additions & 0 deletions templates/config.html
Expand Up @@ -115,6 +115,8 @@ <h1>CoderBot</h1>
<div id="t_movement" class="ui-body-d ui-content">
<label for="i_move_motor_mode">{% trans %}Motor control mode{% endtrans %}</label>
<input type="text" id="i_move_motor_mode" name="move_motor_mode" value="{{config.move_motor_mode}}">
<label for="i_move_motor_trim">{% trans %}Trim factor (1.0 = center){% endtrans %}</label>
<input type="text" id="i_move_motor_trim" name="move_motor_trim" value="{{config.move_motor_trim}}">
<label for="i_move_power_angle_1">{% trans %}Power (target angle -15){% endtrans %}</label>
<input type="text" id="i_move_power_angle_1" name="move_power_angle_1" value="{{config.move_power_angle_1}}">
<label for="i_move_power_angle_2">{% trans %}Power (target angle -4){% endtrans %}</label>
Expand Down

0 comments on commit f651004

Please sign in to comment.