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