头盔检测
佩戴 / 未佩戴识别
车辆识别
自行车 / 摩托 / 汽车
标注输出
带框视频 + JSON报告
上传视频,开始检测
上传一段交通监控视频
AI 自动检测头盔佩戴情况与车辆类型,输出带标注框的结果视频
佩戴 / 未佩戴识别
自行车 / 摩托 / 汽车
带框视频 + JSON报告
上传一段交通监控视频
AI 自动检测头盔佩戴情况与车辆类型,输出带标注框的结果视频
电动车头盔佩戴检测系统 · 完整技术解析
纯软件 AI 视觉系统,无硬件传感器依赖。YOLOv8 + PaddleOCR + DeepSORT 三模型协同工作,实现从目标检测到违规取证的全流程自动化。
使用 ultralytics YOLOv8n 预训练模型(iam-tsr/yolov8n-helmet-detection),检测类别包括:佩戴头盔(rider+helmet)、未戴头盔(no_helmet)、电动自行车(ebike)、自行车(bicycle)、摩托车(motorcycle)、汽车(car)、巴士(bus)、卡车(truck)。
| 模型 | YOLOv8n (nano) | 输入尺寸 | 640×640 |
| 推理设备 | CPU | 置信度阈值 | 0.65 (头盔) / 0.35 (车辆) |
| 检测间隔 | 每 5 帧检测一次 | 后处理 | 大面积误检过滤 (>25%画面) |
百度 PaddleOCR 框架,语言设置为中文(ch),启用角度分类检测。对检测到的车牌区域进行 OCR 识别,输出车牌号码文本。未安装时自动降级,不影响头盔检测核心功能。
DeepSORT 多目标追踪器 + IOU 匹配回退方案。设置水平计数线(画面50%位置),判断目标穿越方向(上行/下行),累加各类型车辆的流量计数。追踪器参数:max_age=30帧(目标消失30帧后移除),n_init=3帧(连续3帧确认新目标)。
轻量级本地数据库,存储每日违规记录、交通流量统计。表结构包括:violations(违规事件)、daily_traffic(每日流量)、weekly_stats(周统计)。
| GET /api/stats/today | 今日统计 |
| GET /api/stats/weekly | 周统计 |
| GET /api/violations | 违规列表 |
| GET /history | 历史记录页 |
YOLOv8(检测) → DeepSORT(追踪) → PaddleOCR(车牌识别) 串行流水线,各模型独立加载、独立推理,支持按需禁用。
检测到边界框面积超过画面25%时自动过滤——防止安全帽/头盔装饰被误识别为骑行者头盔。
画面水平计数线 + 目标穿越方向判断(上行/下行),已计数目标自动去重,支持交通流量统计分析。
每5帧执行一次YOLOv8推理(非逐帧检测),大幅降低CPU负载;中间帧复用最近一次检测结果 + 追踪器插值。
PaddleOCR 未安装时自动跳过车牌识别功能,头盔检测和车辆分类不受影响,核心功能完整可用。
视频上传后由后台线程异步处理,前端轮询 /api/status 获取实时进度,不阻塞 Web 服务器响应。
| 类别 | 技术 | 版本/说明 |
|---|---|---|
| 目标检测 | YOLOv8n | ultralytics >=8.2.0, iam-tsr/yolov8n-helmet-detection |
| OCR | PaddleOCR | >=2.8.0, 中文语言包, 角度分类 |
| 目标追踪 | DeepSORT + IOU | deep-sort-realtime >=1.3.2 |
| 深度学习框架 | PyTorch | >=2.2.0 (CPU 推理) |
| 图像处理 | OpenCV | >=4.9.0, 视频编解码 + 标注绘制 |
| Web 框架 | Flask | >=3.0, Jinja2 模板引擎 |
| 数据库 | SQLite | 本地文件数据库, 零配置 |
| 部署 | Ubuntu 22.04 + systemd + nginx | HTTPS 反向代理, Let's Encrypt 证书 |
服务通过 systemd 管理:sudo systemctl restart helmet-detect 重启服务,崩溃自动拉起(Restart=always, RestartSec=3s)。nginx 提供 HTTPS 反向代理,静态文件(CSS/JS/截图)由 nginx 直接 serve,视频/API 请求代理到 Flask。