Я использую Raspberry Pi 4 с камерой для захвата видео и передачи живого потока через сервер Flask. То, что я хотел бы сделать, это использовать один и тот же канал живого видео для выполнения различной постобработки и показывать их по разным URL:
raspberrypi: 4000 / video_feed будет иметь необработанное видео. raspberrypi: 4000 / gray_video_feed будет иметь видео в оттенках серого
Однако, когда я перехожу к / video_feed, потоки работают нормально. Если я пытаюсь перейти в / gray_video_feed, поток останавливается, и я не получаю ошибок.
Это код, который у меня есть:
class LaptopCamera:
def __init__(self):
self.video = cv2.VideoCapture(0)
def __del__(self):
self.video.release()
def read_video(self):
ret, image = self.video.read()
return image
def get_frame(self):
ret, jpeg = cv2.imencode('.jpg', self.read_video())
return jpeg.tobytes()
def gray_frames(self):
gray_frame = cv2.cvtColor(self.read_video(), cv2.COLOR_BGR2GRAY)
ret, jpeg = cv2.imencode('.jpg', gray_frame)
return jpeg.tobytes()
Затем он обрабатывается следующим образом:
def gen_feed(camera):
while True:
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
def gen_gray_feed(camera):
while True:
frame = camera.gray_frames()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
@API.route('/')
def index_page():
return "Hello"
@API.route('/video_feed')
def get_video_feed():
return Response(gen_feed(raspCamera()),
mimetype='multipart/x-mixed-replace; boundary=frame')
@API.route('/gray_frame')
def provide_gray_frames():
return Response(gen_gray_feed(raspCamera()),
mimetype='multipart/x-mixed-replace; boundary=frame')