def camera_loop(self): """Makes the camera take pictures and save them. This loop is executed in a separate thread. """ from io import BytesIO from base64 import b64encode try: from picamera import PiCamera from picamera.array import PiRGBArray except Exception as e: print('picamera import error : ', e) try: cam = PiCamera(framerate=self.fps) except Exception as e: print('Exception ', e, 'yoooooooooooooo') raise CameraException() image_name = os.path.join(self.stream_path, 'capture.jpg') cam.resolution = CAM_RESOLUTION cam_output = PiRGBArray(cam, size=CAM_RESOLUTION) stream = cam.capture_continuous(cam_output, format="rgb", use_video_port=True) for f in stream: img_arr = f.array im = PIL_convert(img_arr) im.save(image_name) # Predict the direction only when needed if self.mode in ['dirauto', 'auto'] and self.started: prediction = self.predict_from_img(img_arr) else: prediction = [0, 0, 1, 0, 0] self.mode_function(img_arr, prediction) if self.streaming_state: index_class = prediction.index(max(prediction)) buffered = BytesIO() im.save(buffered, format="JPEG") img_str = b64encode(buffered.getvalue()) socketio.emit('picture_stream', { 'image': True, 'buffer': img_str.decode('ascii'), 'index': index_class, 'pred': [float(x) for x in prediction] }, namespace='/car') cam_output.truncate(0)
def training(self, img, prediction): """Saves the image of the picamera with the right labels of dir and gas. """ image_name = '_'.join(['frame', str(self.n_img), 'gas', str(self.curr_gas), 'dir', str(self.curr_dir)]) image_name += '.jpg' image_name = os.path.join(self.save_folder, image_name) img_arr = np.array(img[80:, :, :], copy=True) img_arr = PIL_convert(img_arr) img_arr.save(image_name) self.n_img += 1
def training(self, img): """ Enregistre les images du stream lorsque started = True. """ image_name = '_'.join(['frame', str(self.n_img), 'gas', str(self.curr_gas), 'dir', str(self.curr_dir)]) image_name += '.jpg' image_name = os.path.join(self.save_folder, image_name) img_arr = np.array(img[20:, :, :], copy=True) img_arr = PIL_convert(img_arr) img_arr.save(image_name) self.n_img += 1