def _capture_loop(self): dt = 1 / self.fps logger.debug("Observation started") while self.isrunning: ret, img = self.camera.read() if ret: if len(self.frames) == self.max_frames: self.frames = self.frames[1:] self.frames.append(img) time.sleep(dt) logger.info("Thread stopped successfully")
def gen_frames(self) -> Generator: logger.debug('Sending frames') while True: success, frame = self.camera.read() if not success: logger.error('No camera found.') break else: ret, buffer = cv2.imencode('.jpg', frame) frame = buffer.tobytes() yield (b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') self.camera.release()
def run(self): logger.debug("Perparing thread") if self.thread is None: logger.debug("Creating thread") thread = threading.Thread(target=self._capture_loop, daemon=True) logger.debug("Starting thread") self.isrunning = True thread.start() logger.info("Thread started")
def video_feed() -> Response: logger.debug(f'Stopping video.') return Response(truman.stop(), )
def video_feed() -> StreamingResponse: logger.debug(f'Sending images . . .') return StreamingResponse(truman.gen_frames(), media_type="multipart/x-mixed-replace;boundary=frame")
def stop(self): logger.debug("Stopping thread") self.isrunning = False