解决方案

人脸行为检测开源方案调研

摄像头图片或视频中检测“人脸、是否躺着、是否在工位、是否佩戴工牌”等场景,有成熟的开源组件可以组合实现,但通常不存在一个开源项目能完整、稳定地覆盖全部业务需求。

摄像头人脸与行为检测开源方案调研

更新时间:2026-06-27

1. 结论

摄像头图片或视频中检测“人脸、是否躺着、是否在工位、是否佩戴工牌”等场景,有成熟的开源组件可以组合实现,但通常不存在一个开源项目能完整、稳定地覆盖全部业务需求。

推荐采用组合式方案:

摄像头/RTSP
  -> 抽帧
  -> 人体检测
  -> 人员跟踪
  -> 人脸检测/识别
  -> 姿态估计
  -> 工牌检测
  -> 工位区域规则
  -> 告警/记录/看板

优先推荐的 POC 技术组合:

  • 人脸检测与识别:CompreFace 或 InsightFace
  • 人体/工牌检测:YOLO 系列、RT-DETR、MMDetection
  • 姿态判断:MMPose、RTMPose、YOLO Pose
  • 人员跟踪:ByteTrack、DeepSORT、BoT-SORT
  • 视频接入:OpenCV、FFmpeg、GStreamer
  • 部署:Docker、NVIDIA GPU、边缘盒子或中心服务器

需要特别注意:开源不等于一定免费商用。部分项目代码许可宽松,但预训练模型、训练数据或平台商用部署可能存在限制。

2. 场景拆解

场景推荐实现方式是否需要训练难度备注
检测是否有人通用目标检测模型识别 person通常不需要COCO 预训练模型即可初步验证
检测人脸RetinaFace、InsightFace、OpenCV YuNet通常不需要受角度、遮挡、光照影响
人脸识别身份InsightFace、CompreFace、DeepFace需要录入人员库商用时要重点确认模型许可与隐私合规
是否躺着姿态关键点 + 规则判断通常不需要,复杂场景可微调判断肩、髋、膝、踝等关键点方向
是否在工位人体检测 + 跟踪 + 工位 ROI 区域规则不一定需要人工标注每个工位区域
是否佩戴工牌工牌目标检测模型基本需要工牌小、反光、角度变化大,需采集现场数据
是否佩戴安全帽/工服PPE 检测模型可用公开数据预训练后微调公开 PPE 数据比工牌更多
离岗/睡岗/异常停留跟踪 ID + 时间规则 + 姿态规则视场景而定中高需要连续帧判断,避免单帧误报

3. 开源方案对比

3.1 人脸识别方案

方案类型优点缺点免费/许可判断
InsightFace人脸检测、对齐、识别模型工具箱精度高,业界常用,支持 ArcFace工程服务化需要自己封装;官方预训练模型许可需谨慎代码 MIT;官方预训练模型常标注为非商业研究用途
CompreFace人脸识别服务自带 REST API、管理界面、Docker 部署,适合 POC灵活性不如自己集成 InsightFaceApache 2.0,整体更适合自部署验证
DeepFacePython 人脸识别封装库上手快,集成多种模型生产部署需要额外工程化代码开源,具体模型许可需逐项确认
OpenCV YuNet + SFace轻量人脸检测/识别轻量、部署简单精度和生态不如 InsightFace需确认所用模型文件许可

建议:

  • 快速验证:CompreFace。
  • 自研平台长期集成:InsightFace 或 OpenCV + 自有服务封装。
  • 商用生产:务必确认“代码、模型权重、训练数据、人员数据处理”四层许可与合规。

3.2 人体、姿态、工牌检测方案

方案适用场景优点缺点免费/许可判断
Ultralytics YOLO人、工牌、安全帽、工服、姿态训练和部署体验好,资料多AGPL 对闭源商用有约束默认 AGPL-3.0;闭源商用通常需企业许可
MMPose / RTMPose姿态估计、躺卧判断Apache 2.0,生态完整,模型多配置和工程复杂度较高项目 Apache 2.0;预训练模型和数据集仍需确认
MMDetection目标检测训练框架模型丰富、适合训练定制模型上手成本高于 YOLOApache 2.0;数据集许可需确认
MediaPipe Pose轻量姿态估计移动端、边缘端友好复杂多人场景能力有限需按 Google MediaPipe 许可确认
OpenPose姿态估计经典方案较老,性能和部署便利性一般需确认许可和依赖

建议:

  • 快速做效果:YOLO 检测人 + YOLO Pose 判断姿态。
  • 更重视商用许可宽松:OpenMMLab 体系,例如 MMDetection + MMPose/RTMPose。
  • 工牌检测:不建议只找现成模型,应该采集现场图片自行训练。

4. 推荐部署环境

4.1 POC 环境

适合验证功能是否可行。

项目建议配置
系统Ubuntu 22.04 LTS
CPU8 核以上
内存16 GB 以上
GPUNVIDIA RTX 3060/4060 或以上,8 GB 显存起步
驱动NVIDIA Driver + CUDA
容器Docker + Docker Compose
摄像头RTSP 网络摄像头,建议 1080p
存储SSD,按是否保存截图/视频决定容量

4.2 生产环境

适合多路摄像头持续运行。

摄像头规模推荐部署
1-4 路单台 GPU 工作站或边缘 AI 盒子
4-16 路中心 GPU 服务器,按帧率抽帧处理
16 路以上多节点推理服务 + 消息队列 + 中心管理平台

生产建议配置:

  • GPU:NVIDIA RTX 4070/4080/4090、L4、A10、A30、A5000 等
  • 推理框架:ONNX Runtime、TensorRT、OpenVINO
  • 服务框架:FastAPI、gRPC、Flask、Spring Boot 调用推理服务
  • 消息队列:Redis Stream、Kafka、RabbitMQ
  • 数据库:PostgreSQL/MySQL 保存事件,MinIO/NAS 保存截图
  • 监控:Prometheus + Grafana

4.3 边缘部署

适合摄像头在工厂、园区、门店、机房等现场。

设备适用情况
NVIDIA Jetson Orin Nano/NX低功耗边缘推理,适合少量摄像头
工业 PC + NVIDIA GPU稳定性和性能更好
普通 CPU 服务器只适合低帧率或轻量模型

边缘部署优点:

  • 视频不必全部上传,节省带宽。
  • 隐私风险相对更可控。
  • 本地告警延迟低。

边缘部署缺点:

  • 运维成本高。
  • 多点升级、模型更新、日志收集更复杂。
  • 设备散热和稳定性要重点考虑。

5. 实施流程

阶段 1:现场调研

需要确认:

  • 摄像头数量、位置、角度、分辨率、帧率。
  • 是否有 RTSP 地址。
  • 夜间、逆光、遮挡、强反光情况。
  • 工位是否固定。
  • 工牌是否统一位置、大小、颜色。
  • 是否要求识别具体人员身份,还是只检测是否有人。
  • 是否需要保存原始视频,保存多久。

阶段 2:定义检测规则

建议先把 AI 问题转成可执行规则:

业务问题技术规则示例
是否在工位人体框底部中心点落在某个工位 ROI 内,连续 N 秒
是否离岗指定工位 ROI 内连续 N 秒无人
是否躺着人体主轴接近水平,或肩髋关键点高度差小,连续 N 秒
是否睡岗在工位区域内,姿态低头/趴伏/躺卧持续 N 秒
是否佩戴工牌人体胸前区域检测到 badge 类别
是否为指定人员人脸向量与人员库相似度超过阈值

阶段 3:POC 验证

建议先取 1-2 路摄像头,做最小闭环:

读取 RTSP
  -> 每秒抽 1-5 帧
  -> 检测人
  -> 画工位区域
  -> 判断是否有人在工位
  -> 检测人脸
  -> 输出事件日志和截图

POC 目标不是追求一次完成全部功能,而是验证:

  • 摄像头画面是否足够清晰。
  • 人脸能否看清。
  • 工牌在画面中是否可见。
  • 躺卧姿态是否能通过关键点稳定判断。
  • 单路摄像头推理延迟和资源消耗。
  • 误报、漏报主要来自哪里。

阶段 4:数据采集与标注

工牌检测、特殊姿态、睡岗等场景通常需要现场数据。

建议采集:

  • 不同时间段:白天、夜间、逆光。
  • 不同人员:身高、衣服、佩戴方式不同。
  • 不同姿态:站、坐、趴、躺、弯腰。
  • 正样本:佩戴工牌。
  • 负样本:未佩戴工牌、胸前有手机/反光物/挂绳但无工牌。

标注工具:

  • Label Studio
  • CVAT
  • Roboflow
  • makesense.ai

阶段 5:模型训练与评估

建议指标:

  • Precision:报警是否准确,误报少不少。
  • Recall:异常是否能抓到,漏报少不少。
  • mAP:检测模型通用指标。
  • FPS:每秒处理帧数。
  • Latency:单帧延迟。
  • 连续事件准确率:例如连续 10 秒离岗是否正确报警。

工牌检测建议:

  • 不只检测整张图里的工牌,而是结合人体框,优先检测胸前区域。
  • 小目标检测要保证输入分辨率足够高。
  • 如果工牌太小或摄像头太远,视觉检测会不稳定。

阶段 6:生产部署

生产部署建议拆成几个服务:

视频接入服务
  -> 解码/抽帧

AI 推理服务
  -> 人体检测
  -> 人脸识别
  -> 姿态估计
  -> 工牌检测

规则服务
  -> 工位 ROI 判断
  -> 连续时长判断
  -> 告警去重

业务服务
  -> 人员库
  -> 工位配置
  -> 告警记录
  -> 截图/视频证据

前端看板
  -> 实时状态
  -> 历史查询
  -> 告警处理

6. 是否免费与许可风险

组件是否开源是否免费商用注意点
InsightFace 代码代码 MIT,但官方预训练模型多为非商业研究用途
CompreFaceApache 2.0,适合自部署;仍需确认其内部模型与数据处理要求
Ultralytics YOLO可免费使用AGPL-3.0 对闭源商用有约束,企业内部/闭源产品需评估商业许可
MMPoseApache 2.0;预训练模型对应数据集许可需确认
MMDetectionApache 2.0;预训练模型对应数据集许可需确认
OpenCVApache 2.0,通常较友好
ByteTrack需确认具体仓库许可
DeepSORT不同实现许可不同
Label Studio社区版免费企业功能另计
CVAT自部署免费云服务/企业支持另计

商业项目建议:

  1. 区分代码许可、模型权重许可、训练数据许可。
  2. 不要默认把 GitHub 上的预训练模型用于商业生产。
  3. 人脸识别涉及个人敏感信息,需取得授权并明确用途。
  4. 尽量只保存特征向量和事件截图,减少原始视频长期存储。
  5. 设置数据保留周期、访问权限、审计日志。
  6. 高风险告警不要完全自动处罚,应保留人工复核。

7. 人脸识别原理

现代人脸识别一般不是直接比较两张照片,而是把人脸转换为特征向量,再比较向量距离。

典型流程:

输入图片
  -> 人脸检测
  -> 人脸关键点定位
  -> 人脸对齐
  -> 特征提取
  -> 与人员库向量比对
  -> 输出身份或相似度

7.1 人脸检测

模型先在图片中找到人脸位置,输出人脸框。例如:

face_bbox = [x1, y1, x2, y2]

常见模型:

  • RetinaFace
  • MTCNN
  • YuNet
  • SCRFD

7.2 人脸关键点与对齐

检测眼睛、鼻尖、嘴角等关键点,然后把人脸旋转、缩放到标准位置。这样同一个人在低头、歪头、侧脸时,特征提取会更稳定。

常见关键点:

  • 左眼
  • 右眼
  • 鼻尖
  • 左嘴角
  • 右嘴角

7.3 特征向量提取

深度神经网络把对齐后的人脸变成一个固定长度向量,例如 512 维:

face_embedding = [0.12, -0.03, 0.88, ...]

同一个人的不同照片,向量距离应该比较近;不同人的照片,向量距离应该比较远。

ArcFace 的核心思想是通过角度间隔损失,让不同身份的人脸特征在向量空间中分得更开,从而提升识别区分度。

7.4 相似度比较

常见比较方式:

  • 余弦相似度
  • 欧氏距离

示例:

注册照:向量 A
摄像头抓拍:向量 B

cosine_similarity(A, B) > threshold
=> 判断为同一人

阈值不能照搬,需要结合现场数据调试。阈值过低会误认,阈值过高会漏认。

7.5 1:1 与 1:N

模式含义示例
1:1 核验判断是不是某个人刷脸登录,判断是否为张三
1:N 识别从人员库中找最像的人摄像头抓拍后,在员工库中检索身份

工位场景通常会用 1:N,但如果摄像头角度不好,人脸太小,稳定性会明显下降。

8. 推荐 POC 方案

方案 A:最快验证

适合快速判断效果。

CompreFace
+ YOLO 检测人/工牌
+ YOLO Pose 判断姿态
+ OpenCV 读取 RTSP
+ 简单 Web 页面显示结果

优点:

  • 上手快。
  • 人脸服务不用自己封装。
  • 适合 1-2 周做 POC。

缺点:

  • 商用许可和长期扩展仍需评估。
  • 工牌检测仍需自训练。
  • 多路视频性能需要单独压测。

方案 B:偏生产自研

适合后续做平台。

OpenCV/FFmpeg
+ InsightFace 或自选人脸模型
+ MMDetection/RT-DETR 检测人和工牌
+ MMPose/RTMPose 姿态估计
+ ByteTrack 跟踪
+ FastAPI 推理服务
+ PostgreSQL + MinIO

优点:

  • 架构可控。
  • 更适合模型替换和优化。
  • 可围绕许可做更审慎选择。

缺点:

  • 初期开发成本更高。
  • 需要算法、后端、运维共同参与。

方案 C:边缘盒子

适合现场部署和低延迟告警。

Jetson/工业 PC
+ TensorRT/ONNX Runtime
+ 本地推理
+ 只上传事件和截图

优点:

  • 节省带宽。
  • 延迟低。
  • 原始视频可不出现场。

缺点:

  • 设备运维复杂。
  • 模型升级和日志收集需要平台化支持。

9. 成本估算

9.1 软件成本

项目成本
开源代码多数可免费使用
商业许可YOLO、部分模型权重可能需要
标注平台自部署可免费,云服务可能收费
数据库/对象存储自部署可免费
看板与业务系统需要开发成本

9.2 硬件成本

主要成本来自:

  • GPU 服务器或边缘 AI 设备。
  • 摄像头升级。
  • 存储设备。
  • 网络带宽。

粗略建议:

场景成本级别
单路摄像头 POC低,可用已有 GPU 电脑
4-8 路生产中,需要 GPU 工作站或服务器
多园区多摄像头高,需要平台化和运维体系

9.3 人力成本

至少需要:

  • 后端/平台开发
  • 算法工程或熟悉 CV 模型训练的人
  • 前端看板开发
  • 运维/部署
  • 业务人员参与规则定义和误报复核

10. 主要风险

风险说明缓解方式
人脸太小摄像头距离远,无法稳定识别调整摄像头位置或只做人形检测
工牌太小工牌检测最容易受距离影响采集真实数据,提升分辨率,检测胸前区域
光照变化夜间、逆光、反光导致误报增加补光,分场景训练
遮挡口罩、低头、背对摄像头多摄像头、多规则融合
姿态误判弯腰、趴桌、躺卧边界模糊连续时间判断 + 人工复核
许可风险开源代码和预训练模型许可不同上线前做许可证审查
隐私合规人脸属于敏感个人信息明确授权、最小化保存、访问审计

11. 建议落地路线

建议按三步走:

  1. 先做 1-2 路摄像头 POC。
  2. 确认人脸、工位、姿态、工牌在真实画面中的可检测性。
  3. 再决定是否训练工牌模型、是否购买商业许可、是否边缘部署。

最小 POC 目标:

  • 能读取 RTSP。
  • 能检测人。
  • 能配置工位区域。
  • 能判断在岗/离岗。
  • 能检测人脸。
  • 能保存事件截图。
  • 能初步判断躺卧或趴伏。

第二阶段再加入:

  • 工牌检测模型训练。
  • 人脸人员库。
  • 多路摄像头调度。
  • 告警看板。
  • 权限与审计。

12. 参考项目与资料

讨论

0 条评论

友善、具体,并尊重不同经验。

还没有评论。欢迎留下第一条有帮助的补充。

发表评论

作为访客参与讨论

评论旁显示的名字。
不会公开。
支持换行,最多 4000 个字符。
完成简单计算,帮助我们拦截自动发布程序。