Вернуть два ответа от двух разных функций в Flask - PullRequest
0 голосов
/ 08 марта 2019

Я пишу приложение 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)
...