首页 > 解决方案 > 使用 OpenCV Python Flask 流式传输多个视频

问题描述

我正在尝试使用 Flask Python 一次流式传输 2 个网络摄像头,但我无法这样做,当我运行我的代码时,两个网络摄像头都会亮起,但网页上只显示一个摄像头,我不确定。

这是我正在使用的代码:

from vCamera import VideoCamera
import pdb
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

def gen(vCamera0):
    while True:
        frame0 = vCamera0.get_frame0()
        yield (b'--frame0\r\n'
                b'Content-Type: image/jpeg\r\n\r\n' + frame0 + b'\r\n\r\n')

        frame2 = vCamera0.get_frame2()
        yield (b'--frame2\r\n'
                b'Content-Type: image/jpeg\r\n\r\n' + frame2 + b'\r\n\r\n')


@app.route('/video_feed0')
def video_feed0():
    return Response(gen(VideoCamera()),
                    mimetype='multipart/x-mixed-replace; boundary=frame0')

@app.route('/video_feed2')
def video_feed2():
    return Response(gen(VideoCamera()),
                    mimetype='multipart/x-mixed-replace; boundary=frame2')


if __name__ == '__main__':
    app.run(host='127.0.0.1', debug=True)

这是我的相机文件:

import pdb
import cv2

fullbody_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')
upperbody_cascade = cv2.CascadeClassifier('haarcascade_upperbody.xml')
class VideoCamera(object):
    def __init__(self):
        self.video0 = cv2.VideoCapture(0)
        self.video2 = cv2.VideoCapture(2)

    def __del__(self):
        self.video0.release()


    def get_frame0(self):
        success0, frame0 = self.video0.read()


        gray0 = cv2.cvtColor(frame0, cv2.COLOR_BGR2GRAY)        
        fullbody0 = fullbody_cascade.detectMultiScale(gray0)
        upperbody0 = upperbody_cascade.detectMultiScale(gray0)


        for (x,y,w,h) in fullbody0:
            cv2.rectangle(frame0, (x,y), (x+w, y+h), (255,0,0), 2)

        for (x,y,w,h) in upperbody0:
            cv2.rectangle(frame0, (x,y), (x+w, y+h), (255,0,0), 2)


        ret0, jpeg0 = cv2.imencode('.jpg', frame0)

        return jpeg0.tobytes()




    def get_frame2(self):
        success2, frame2 = self.video2.read()


        gray2 = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY)        
        fullbody2 = fullbody_cascade.detectMultiScale(gray2)
        upperbody2 = upperbody_cascade.detectMultiScale(gray2)


        for (x,y,w,h) in fullbody2:
            cv2.rectangle(frame2, (x,y), (x+w, y+h), (255,0,0), 2)

        for (x,y,w,h) in upperbody2:
            cv2.rectangle(frame2, (x,y), (x+w, y+h), (255,0,0), 2)


        ret2, jpeg2 = cv2.imencode('.jpg', frame2)

        return jpeg2.tobytes()

我对 Flask 很陌生,所以我不太确定我写的代码有什么问题。任何意见将是有益的!

标签: htmlopencvflaskvideo-streaming

解决方案


推荐阅读