本文将简单介绍Web 服务与前端显示部分,它们基于Flask 框架和HTML/CSS/JavaScript实现,主要负责将实时视频流和检测结果通过网页展示,并提供交互式状态监控。以下是详细技术解析:
一、Flask Web 服务架构
1. 核心路由设计
@app.route('/')
def index():"""渲染主页面"""return render_template('index.html')@app.route('/video_feed')
def video_feed():"""提供视频流"""return Response(web_streamer.generate(), mimetype='multipart/x-mixed-replace; boundary=frame')@app.route('/status')
def status():"""返回JSON格式的系统状态"""with web_streamer.lock:return {"fps": web_streamer.fps,"face_count": web_streamer.face_count,"posture_status": web_streamer.posture_status,"posture_data": web_streamer.posture_data,"timestamp": time.time()}
-
/
路由:- 使用
render_template
渲染静态 HTML 页面,作为用户交互入口。 - 自动创建
templates
目录(若不存在),并写入硬编码的 HTML 内容(见代码末尾的模板生成逻辑)。
- 使用
-
/video_feed
路由:- 核心功能:通过
Response
对象生成HTTP 多部分响应(multipart/x-mixed-replace
),格式为连续的 JPEG 图像帧,实现实时视频流传输。 - 数据来源:调用
web_streamer.generate()
方法,该方法循环输出编码后的 JPEG 帧(通过cv2.imencode
生成)。 - 性能优化:通过锁(
web_streamer.lock
)保证多线程环境下帧数据的一致性,避免并发访问冲突。
- 核心功能:通过
-
/status
路由:- 提供 JSON 格式的系统状态数据,包括 FPS、人脸数量、姿势状态、时间统计等。