Skip to content

Commit 935ce9f

Browse files
committed
close #66
1 parent dbbd304 commit 935ce9f

File tree

10 files changed

+65
-45
lines changed

10 files changed

+65
-45
lines changed

audio.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ def __init__(self):
7777
#self.stream_in.start_stream()
7878
self.stream_in = self.MicrophoneStream(FORMAT, RATE, CHUNK)
7979
except Exception as e:
80-
print e
8180
logging.info("Audio: input stream not available")
8281

8382
self._google_speech_client = speech.SpeechClient()
@@ -98,7 +97,6 @@ def normalize(self, snd_data):
9897
"Average the volume out"
9998
MAXIMUM = 16384
10099
times = float(MAXIMUM)/max(abs(i) for i in snd_data)
101-
print "times: " + str(times)
102100

103101
r = array('h', snd_data)
104102
c = 0
@@ -197,7 +195,6 @@ def speech_recog(self, model):
197195
decoder.process_raw(content, False, False)
198196
if decoder.hyp() and decoder.hyp().hypstr != '':
199197
recog_text += decoder.hyp().hypstr
200-
print "text: " + decoder.hyp().hypstr
201198
tstamp = time.time()
202199
if len(recog_text) > 1:
203200
decoder.end_utt()

camera.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
import json
2626
from PIL import Image as PILImage
2727
try:
28-
from StringIO import StringIO
28+
from BytesIO import BytesIO
2929
except ImportError:
30-
from io import StringIO
30+
from io import BytesIO
3131
from threading import Thread, Lock
3232
import logging
3333

@@ -115,14 +115,14 @@ def set_text(self, text):
115115

116116
def load_photo_metadata(self):
117117
try:
118-
f = open(PHOTO_METADATA_FILE)
118+
f = open(PHOTO_METADATA_FILE, "rt")
119119
self._photos = json.load(f)
120120
f.close()
121121
except IOError:
122122
logging.warning("no metadata file")
123123

124124
def save_photo_metadata(self):
125-
f = open(PHOTO_METADATA_FILE, "w")
125+
f = open(PHOTO_METADATA_FILE, "wt")
126126
json.dump(self._photos, f)
127127
f.close()
128128

@@ -147,12 +147,12 @@ def photo_take(self):
147147
photo_index = self.get_next_photo_index()
148148
filename = PHOTO_PREFIX + str(photo_index) + self._camera.PHOTO_FILE_EXT;
149149
filename_thumb = PHOTO_PREFIX + str(photo_index) + PHOTO_THUMB_SUFFIX + self._camera.PHOTO_FILE_EXT;
150-
of = open(PHOTO_PATH + "/" + filename, "w+")
151-
oft = open(PHOTO_PATH + "/" + filename_thumb, "w+")
150+
of = open(PHOTO_PATH + "/" + filename, "wb+")
151+
oft = open(PHOTO_PATH + "/" + filename_thumb, "wb+")
152152
im_str = self.get_image_jpeg()
153153
of.write(im_str)
154154
# thumb
155-
im_pil = PILImage.open(StringIO(im_str))
155+
im_pil = PILImage.open(BytesIO(im_str))
156156
im_pil.resize(PHOTO_THUMB_SIZE).save(oft)
157157
self._photos.append({"name":filename})
158158
self.save_photo_metadata()
@@ -179,9 +179,9 @@ def video_rec(self, video_name=None):
179179
except:
180180
pass
181181

182-
oft = open(PHOTO_PATH + "/" + filename_thumb, "w")
182+
oft = open(PHOTO_PATH + "/" + filename_thumb, "wb")
183183
im_str = self._camera.get_image_jpeg()
184-
im_pil = PILImage.open(StringIO(im_str))
184+
im_pil = PILImage.open(BytesIO(im_str))
185185
im_pil.resize(PHOTO_THUMB_SIZE).save(oft)
186186
self._photos.append({"name":filename})
187187
self.save_photo_metadata()
@@ -197,10 +197,10 @@ def get_photo_list(self):
197197
return self._photos
198198

199199
def get_photo_file(self, filename):
200-
return open(PHOTO_PATH + "/" + filename)
200+
return open(PHOTO_PATH + "/" + filename, "rb")
201201

202202
def get_photo_thumb_file(self, filename):
203-
return open(PHOTO_PATH + "/" + filename[:-len(PHOTO_FILE_EXT)] + PHOTO_THUMB_SUFFIX + PHOTO_FILE_EXT)
203+
return open(PHOTO_PATH + "/" + filename[:-len(PHOTO_FILE_EXT)] + PHOTO_THUMB_SUFFIX + PHOTO_FILE_EXT, "rb")
204204

205205
def delete_photo(self, filename):
206206
logging.info("delete photo: " + filename)

coderbot.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"move_tr_speed": "85", "move_fw_elapse": "1", "camera_color_object_size_min": "4000", "camera_jpeg_bitrate": "1000000", "load_at_start": "", "move_tr_elapse": "0.5", "sound_stop": "$shutdown.mp3", "show_control_move_commands": "true", "prog_level": "adv", "prog_scrollbars": "true", "move_fw_speed": "100", "camera_color_object_size_max": "160000", "sound_shutter": "$shutter.mp3", "show_page_prefs": "true", "cv_image_factor": "2", "ctrl_hud_image": "", "button_func": "none", "ctrl_fw_elapse": "-1", "ctrl_tr_elapse": "-1", "move_power_angle_2": "60", "move_power_angle_3": "60", "camera_path_object_size_max": "160000", "move_motor_trim": "1", "camera_path_object_size_min": "4000", "cnn_default_model": "", "show_page_program": "true", "sound_start": "$startup.mp3", "camera_exposure_mode": "auto", "ctrl_tr_speed": "80", "ctrl_fw_speed": "100", "camera_jpeg_quality": "5", "prog_maxblocks": "-1", "camera_framerate": "30", "move_motor_mode": "dc", "move_power_angle_1": "45", "show_page_control": "true"}
1+
{"move_power_angle_3": "60", "cnn_default_model": "fruit_025_128_1", "prog_maxblocks": "-1", "camera_jpeg_quality": "5", "show_page_control": "true", "camera_framerate": "30", "prog_scrollbars": "true", "move_fw_speed": "100", "prog_level": "adv", "move_motor_trim": "1", "move_motor_mode": "dc", "cv_image_factor": "2", "move_power_angle_1": "45", "camera_path_object_size_min": "4000", "button_func": "none", "camera_color_object_size_min": "4000", "camera_jpeg_bitrate": "1000000", "move_fw_elapse": "1", "show_control_move_commands": "true", "camera_color_object_size_max": "160000", "show_page_prefs": "true", "camera_exposure_mode": "auto", "ctrl_tr_elapse": "-1", "show_page_program": "true", "move_tr_elapse": "0.5", "camera_path_object_size_max": "160000", "sound_shutter": "$shutter.mp3", "ctrl_fw_elapse": "-1", "sound_stop": "$shutdown.mp3", "ctrl_tr_speed": "80", "ctrl_fw_speed": "100", "move_tr_speed": "85", "move_power_angle_2": "60", "ctrl_hud_image": "", "load_at_start": "", "sound_start": "$startup.mp3"}

cv/camera.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def __init__(self, props):
7373
logging.info("camera init")
7474
self.camera = picamera.PiCamera()
7575
self.camera.resolution = (props.get('width', 640), props.get('height', 512))
76-
self.out_rgb_resolution = (self.camera.resolution[0] / int(props.get('cv_image_factor', 4)), self.camera.resolution[1] / int(props.get('cv_image_factor', 4)))
76+
self.out_rgb_resolution = (int(self.camera.resolution[0] / int(props.get('cv_image_factor', 4))), int(self.camera.resolution[1] / int(props.get('cv_image_factor', 4))))
7777
self.camera.framerate = float(props.get('framerate', 20))
7878
self.camera.exposure_mode = props.get('exposure_mode', "auto")
7979
self.output_mjpeg = self.StreamingOutputMJPEG()

cv/image.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class Image():
5959
def __init__(self, array):
6060
self._data = array
6161
img_size_y = self._data.shape[0]
62-
kernel_size = img_size_y / 40
62+
kernel_size = int(img_size_y / 40)
6363
self._kernel = np.ones((kernel_size, kernel_size),np.uint8)
6464

6565
def size(self):
@@ -271,14 +271,13 @@ def find_ar_code(self):
271271
codes = []
272272
positions = []
273273
if ids is not None:
274-
print ids
275274
for i in range(0, len(ids)):
276275
if ids[i][0] != 1023:
277276
codes.append(ids[i][0])
278277
rect = corners[i][0]
279278
positions.append([(rect[0][0]+rect[1][0]+rect[2][0]+rect[3][0])/4,
280279
(rect[0][1]+rect[1][1]+rect[2][1]+rect[3][1])/4])
281-
return {"codes": codes, "positions": positions}
280+
return {"codes": codes, "positions": positions}
282281

283282
def draw_blob(self, blob):
284283
cv2.drawContours(self._data, blob.contour(), -1, (0,255,0))

log.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
import logging
2+
3+
# create logger with 'spam_application'
4+
logger = logging.getLogger('spam_application')
5+
logger.setLevel(logging.DEBUG)
6+
# create file handler which logs even debug messages
7+
fh = logging.FileHandler('spam.log')
8+
fh.setLevel(logging.DEBUG)
9+
# create console handler with a higher log level
10+
ch = logging.StreamHandler()
11+
ch.setLevel(logging.DEBUG)
12+
# create formatter and add it to the handlers
13+
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
14+
fh.setFormatter(formatter)
15+
ch.setFormatter(formatter)
16+
# add the handlers to the logger
17+
logger.addHandler(fh)
18+
logger.addHandler(ch)
19+
20+
logger.info('creating an instance of auxiliary_module.Auxiliary')
21+
logger.info('created an instance of auxiliary_module.Auxiliary')
22+
logger.info('calling auxiliary_module.Auxiliary.do_something')
23+
logger.info('finished auxiliary_module.Auxiliary.do_something')
24+
logger.info('calling auxiliary_module.some_function()')
25+
logger.info('done with auxiliary_module.some_function()')

main.py

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,18 @@
4343
from werkzeug.datastructures import Headers
4444
#from flask_sockets import Sockets
4545

46-
logger = logging.getLogger(__name__)
47-
logger.setLevel(logging.INFO)
46+
logger = logging.getLogger()
47+
logger.setLevel(logging.DEBUG)
4848

49+
sh = logging.StreamHandler()
4950
# add a rotating handler
50-
handler = logging.handlers.RotatingFileHandler('logs/coderbot.log', maxBytes=1000000, backupCount=5)
51-
logger.addHandler(handler)
51+
fh = logging.handlers.RotatingFileHandler('/home/pi/coderbot/logs/coderbot.log', maxBytes=1000000, backupCount=5)
52+
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
53+
sh.setFormatter(formatter)
54+
fh.setFormatter(formatter)
55+
56+
logger.addHandler(sh)
57+
logger.addHandler(fh)
5258

5359
bot = None
5460
cam = None
@@ -176,8 +182,9 @@ def video_stream(cam):
176182
frame = cam.get_image_jpeg()
177183
yield ("--BOUNDARYSTRING\r\n" +
178184
"Content-type: image/jpeg\r\n" +
179-
"Content-Length: " + str(len(frame)) + "\r\n\r\n" +
180-
frame + "\r\n")
185+
"Content-Length: " + str(len(frame)) + "\r\n\r\n")
186+
yield(frame)
187+
yield("\r\n")
181188

182189
@app.route("/video")
183190
def handle_video():
@@ -231,21 +238,20 @@ def handle_photos():
231238

232239
@app.route("/photos/<filename>", methods=["GET"])
233240
def handle_photo_get(filename):
234-
logging.info("photo")
235-
mimetype = {'jpeg': 'image/jpeg', 'h264': 'video/mp4'}
241+
logging.info("media filename: " + filename)
242+
mimetype = {'jpg': 'image/jpeg', 'mp4': 'video/mp4'}
236243
video = None
237244
try:
238-
video = cam.get_photo_file(filename)
245+
media_file = cam.get_photo_file(filename)
239246
except picamera.exc.PiCameraError:
240247
pass
241248

242-
return send_file(video, mimetype.get(filename[:-3],'image'), cache_timeout=0)
249+
return send_file(media_file, mimetype=mimetype.get(filename[:-3], 'image/jpeg'), cache_timeout=0)
243250

244251
@app.route("/photos/<filename>", methods=["PUT"])
245252
def handle_photo_put(filename):
246253
logging.info("photo update")
247-
data = request.get_data()
248-
logging.info(data);
254+
data = request.get_data(as_text=True)
249255
data = json.loads(data)
250256
cam.update_photo({"name": filename, "tag":data["tag"]});
251257
return jsonify({"res":"ok"})
@@ -256,15 +262,10 @@ def handle_photo_cmd(filename):
256262
cam.delete_photo(filename)
257263
return "ok"
258264

259-
@app.route("/photos/<filename>/thumb", methods=["GET"])
260-
def handle_photo_thumb(filename):
261-
logging.debug("photo_thumb")
262-
return send_file(cam.get_photo_thumb_file(filename))
263-
264265
@app.route("/program/list", methods=["GET"])
265266
def handle_program_list():
266267
logging.debug("program_list")
267-
return json.dumps(app.prog_engine.list())
268+
return json.dumps(app.prog_engine.prog_list())
268269

269270
@app.route("/program/load", methods=["GET"])
270271
def handle_program_load():
@@ -322,7 +323,7 @@ def handle_cnn_models_list():
322323
@app.route("/cnnmodels", methods=["POST"])
323324
def handle_cnn_models_new():
324325
logging.info("cnn_models_new")
325-
data = json.loads(request.get_data())
326+
data = json.loads(request.get_data(as_text=True))
326327
cnn.train_new_model(model_name=data["model_name"],
327328
architecture=data["architecture"],
328329
image_tags=data["image_tags"],
@@ -395,7 +396,7 @@ def run_server():
395396
logging.error(e)
396397

397398
bot.set_callback(PIN_PUSHBUTTON, button_pushed, 100)
398-
app.run(host="0.0.0.0", port=8080, debug=False, use_reloader=False, threaded=True)
399+
app.run(host="0.0.0.0", port=8080, debug=True, use_reloader=False, threaded=True)
399400
finally:
400401
if cam:
401402
cam.exit()

motion.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import numpy as np
2323
import logging
2424
from time import clock, time, sleep
25-
from cv import image, streamer
25+
from cv import image
2626

2727
from coderbot import CoderBot
2828
from camera import Camera

0 commit comments

Comments
 (0)