Потоковое несколько видео, используя OpenCV Python Flask - PullRequest
0 голосов
/ 16 марта 2020

Я пытаюсь транслировать 2 веб-камеры одновременно, используя Flask Python, но я не могу этого сделать, когда я запускаю свой код, обе веб-камеры загораются, но на веб-странице отображается только одна из камер. и я не уверен.

Вот код, который я использую:

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, поэтому я Я не совсем уверен, в чем проблема с кодом, который я написал. Любой совет будет полезен!

...