Прямая трансляция различных постобработанных фреймов по разным URL с помощью openCV и фляги - PullRequest
0 голосов
/ 15 октября 2019

Я использую 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...