从Flask中的两个不同函数返回两个响应

时间:2019-03-08 02:04:11

标签: python flask response real-time webcam

我正在编写Flask应用程序。该应用程序从网络摄像头获取视频,计算情绪指标,并以实时图形的形式显示情绪指标以及网络摄像头检测到的面部。

现在如何计算情绪指标并不重要。问题是我无法同时显示网络摄像头捕获的帧和实时图形。我的代码仅显示其中之一。

请注意,我不是Flask / HTML / Java的专家。我主要使用GitHub代码。

这是“ app.py”的一部分。我删除了无关的部分。此代码仅显示实时图形。

函数“ video_feed()”返回由网络摄像头捕获的帧。

函数“ stream()”返回实时图上显示的一些随机数。稍后,我将用情绪指标替换这些数字。

@app.route("/", methods=['GET'])
def get_index():
    return render_template('index.html')


def gen_camera(camera):   # camera is an instance of Camera class
    """Video streaming generator function."""
    while True:
        frame = camera.get_frame()
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')


@app.route('/video_feed')
def video_feed():
    """Video streaming route."""
    return Response(gen_camera(Camera()),
                    mimetype='multipart/x-mixed-replace; boundary=frame')


@app.route("/stream")
def stream():
    def gen():
        count = itertools.count()
        while True:
            data = json.dumps({"series": {"mySeries": random.random()}, 'x': next(count)})
            ev = ServerSentEvent(data)
            print(ev.encode())
            yield ev.encode()
            time.sleep(0.05)

    return Response(gen(), mimetype="text/event-stream")


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8000, debug=True)

以下代码是我的第二次尝试。它仅显示网络摄像头捕获的帧。

@app.route("/", methods=['GET'])
def get_index():
    return render_template('index.html')


@app.route('/video_feed')
def video_feed():
    """Video streaming route."""

    video_source = 0
    camera = cv2.VideoCapture( video_source )

    while True:
        # read current frame
        _, img = camera.read()

        img = cv2.resize( img, ( int( img.shape[ 1 ] / 2 ), int( img.shape[ 0 ] / 2 ) ) )

        frame = cv2.imencode('.jpg', img)[1].tobytes()

    yield Response((b'--frame\r\n'
                    b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n'),
                    mimetype='multipart/x-mixed-replace; boundary=frame')


@app.route("/stream")
def stream():
    def gen():
        count = itertools.count()
        while True:
            data = json.dumps({"series": {"mySeries": random.random()}, 'x': next(count)})
            ev = ServerSentEvent(data)
            print(ev.encode())
            yield ev.encode()
            time.sleep(0.05)

    return Response(gen(), mimetype="text/event-stream")


if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8000, debug=True)

0 个答案:

没有答案