def run(self): while True: if CarCtlWorker._exit_flag: break try: state = self.state_q.get(timeout=CarCtlWorker._queue_timeout) except Queue.Empty: logging.info("[RUN] state_q is empty.") continue self.pc_client.send(state.image_str) t = Timer() response = self.dl_client.send(state.image_str) if response is None: # connect DLServer failed logging.info("[RUN] dl_client rpc failed...") continue t1 = t.elapse() if state.sonar <= 20: speed = 0 angle = response.angle self.driver_h.drive(angle=angle, speed=5) t2 = t.elapse() logging.info("[state_q=%d][dl_client_time=%.0fms]" "[drive_time=%.0fms]" % (self.state_q.qsize(), t1, t2))
def capture(): server_addr = config.PC_SERVER_HOST + ":" + config.PC_SERVER_PORT client = Client(server_addr) stream = io.BytesIO() with PiCamera() as camera: camera.resolution = g_img_size camera.framerate = 30 camera.hflip = True camera.vflip = True # warm up the camera time.sleep(2) cnt = 0 cycle_timer = Timer() capture_timer = Timer() for foo in camera.capture_continuous(stream, format='jpeg', use_video_port=True): t1 = capture_timer.elapse() tmp_timer = Timer() client.send(stream.getvalue(), g_img_size[0], g_img_size[1]) t2 = tmp_timer.elapse() cnt += 1 if cnt >= 1000: break stream.seek(0) stream.truncate() t3 = tmp_timer.elapse() t4 = cycle_timer.elapse() print "cycle:", t4, "capture:", t1, "send:", t2, "clear_stream:", t3 capture_timer.elapse()