我正在编写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)