基于YOLO+InsightFace(ArcFace)的人脸识别检测系统

发布时间:2026/5/26 1:01:25

基于YOLO+InsightFace(ArcFace)的人脸识别检测系统 项目简介本项目是一个基于YOLO 人脸检测 InsightFace(ArcFace) 人脸识别 MySQL 数据库 PyQt6 桌面端界面的本地应急管理系统。系统面向工厂、工地、园区、医疗看护等场景支持人员注册、实时识别、陌生人告警、识别记录查询、人员信息管理、告警中心、日志审计和系统参数配置。系统识别流程如下摄像头 / 视频 / 图片YOLO 人脸检测InsightFace 人脸对齐ArcFace 特征提取MySQL 特征库余弦相似度比对界面展示识别结果识别日志 / 告警日志 / 审计日志入库核心功能登录注册系统启动先进入登录/注册窗口首次使用可注册管理员账号。数据概览作为登录后的默认首页展示注册人员、今日识别、已识别、陌生人脸、未处理告警、近 7 天趋势、今日识别占比、来源分布和最近告警。实时监控支持摄像头、视频文件、图片文件识别。人脸检测使用 YOLO 权重定位人脸区域。人脸识别使用 InsightFace 的 ArcFace 模型提取人脸特征并进行身份比对。人员注册支持图片注册和摄像头当前帧注册注册图片保存到本地相对路径。人员信息展示已注册人员信息支持关键字筛选和删除。记录查询查询识别时间、姓名、编号、相似度、来源和摄像头。告警中心展示陌生人脸告警支持未处理筛选和告警处理。日志审计记录登录、注册、人员删除、告警处理、系统设置保存和引擎重载等操作。系统设置维护 MySQL、YOLO 权重、InsightFace 目录、设备模式和识别阈值。实时性能优化摄像头显示帧和模型识别帧分离画面保持较高频率刷新识别频率由系统设置控制默认 2 FPS。GPU 优先推理层优先使用 GPU失败时自动退回 CPU。中文路径兼容图像读写和 PyTorch 权重加载兼容 Windows 中文路径。技术栈Python 3.9PyQt6Ultralytics YOLOInsightFaceArcFaceOpenCVNumPyPyMySQLMySQL 8.xPyTorchONNX Runtime目录结构与文件作用以下说明按当前项目结构整理__pycache__、.pyc等运行缓存文件不属于项目源码已省略。. ├── main.py ├── train_yolo.py ├── requirements.txt ├── README.md ├── yolov8n.pt ├── app/ │ ├── __init__.py │ ├── core/ │ │ ├── __init__.py │ │ ├── config.py │ │ ├── face_engine.py │ │ ├── io_utils.py │ │ ├── local_config.py │ │ ├── paths.py │ │ └── types.py │ ├── db/ │ │ ├── __init__.py │ │ └── mysql_store.py │ ├── services/ │ │ ├── __init__.py │ │ ├── auth_service.py │ │ └── recognition_service.py │ └── ui/ │ ├── __init__.py │ ├── auth_dialog.py │ ├── dashboard_widgets.py │ ├── main_window.py │ ├── styles.py │ └── workers.py ├── data/ │ ├── app_config.json │ └── insightface/ │ └── models/ │ ├── buffalo_l.zip │ └── buffalo_l/ │ ├── 1k3d68.onnx │ ├── 2d106det.onnx │ ├── det_10g.onnx │ ├── genderage.onnx │ └── w600k_r50.onnx └── train_result/ ├── 数据集说明.md ├── face_dataset.yaml ├── splits/ │ ├── train.txt │ └── val.txt └── yolo_face/ ├── args.yaml ├── results.csv ├── results.png ├── labels.jpg ├── confusion_matrix.png ├── confusion_matrix_normalized.png ├── BoxF1_curve.png ├── BoxP_curve.png ├── BoxPR_curve.png ├── BoxR_curve.png ├── train_batch0.jpg ├── train_batch1.jpg ├── train_batch2.jpg ├── train_batch65250.jpg ├── train_batch65251.jpg ├── train_batch65252.jpg ├── val_batch0_labels.jpg ├── val_batch0_pred.jpg ├── val_batch1_labels.jpg ├── val_batch1_pred.jpg ├── val_batch2_labels.jpg ├── val_batch2_pred.jpg ├── metric_charts/ │ ├── map50_95_curve.png │ ├── map50_curve.png │ ├── precision_curve.png │ ├── recall_curve.png │ ├── train_box_loss_curve.png │ ├── train_cls_loss_curve.png │ ├── train_dfl_loss_curve.png │ ├── val_box_loss_curve.png │ ├── val_cls_loss_curve.png │ └── val_dfl_loss_curve.png └── weights/ ├── best.pt └── last.pt根目录文件文件作用main.py桌面端系统启动入口初始化运行目录、加载配置、连接 MySQL、加载识别服务并先打开登录/注册窗口。train_yolo.pyYOLO 人脸检测模型训练脚本负责校验数据集、划分训练/验证集、生成训练配置并启动训练。requirements.txt项目依赖库列表不固定版本便于在不同电脑上安装环境。README.md项目说明文档。yolov8n.ptYOLO 预训练权重可作为训练人脸检测模型的初始权重。app/应用源码文件作用app/__init__.pyPython 包标记文件。app/core/核心算法与配置层文件作用app/core/__init__.py核心模块包标记文件。app/core/config.py应用配置模型负责读取和保存data/app_config.json并合并本地数据库配置。app/core/face_engine.py人脸算法引擎封装 YOLO 检测、InsightFace 模型加载、ArcFace 特征提取、中文标注绘制、GPU/CPU 兜底逻辑。app/core/io_utils.pyUnicode 安全读写工具负责中文路径下的 OpenCV 图像读写和torch.save/torch.load补丁。app/core/local_config.py本地 MySQL 覆盖配置文件可直接在此设置数据库主机、端口、账号、密码和数据库名。app/core/paths.py项目路径管理定义项目根目录、配置文件路径、默认权重路径、注册图片目录、抓拍目录、临时目录等。app/core/types.py业务数据类型定义包括人员记录、系统用户、检测框、识别事件、识别日志、告警日志和审计日志。app/db/数据库层文件作用app/db/__init__.py数据库模块包标记文件。app/db/mysql_store.pyMySQL 数据访问层负责自动建库建表、人员信息、特征向量、识别日志、告警日志、审计日志和系统用户的增删查改。app/services/业务服务层文件作用app/services/__init__.py服务模块包标记文件。app/services/auth_service.py系统用户认证服务负责管理员注册、登录、密码哈希校验和登录审计写入。app/services/recognition_service.py人脸识别业务服务负责人员注册、特征缓存、实时识别、相似度匹配、抓拍保存、识别日志写入和陌生人告警生成。app/ui/界面层文件作用app/ui/__init__.pyUI 模块包标记文件。app/ui/auth_dialog.py登录/注册对话框系统启动后先进入该窗口。app/ui/dashboard_widgets.py数据概览页 PyQt6 自绘图表组件包括指标卡、近 7 天趋势图、环形占比图和横向柱状图。app/ui/main_window.py主界面文件包含实时监控、人员注册、人员信息、记录查询、系统设置、告警中心、日志审计等页面。app/ui/styles.pyPyQt6 全局浅色主题 QSS统一窗口、导航、按钮、表格、输入框、下拉框等组件样式。app/ui/workers.py视频采集后台线程负责摄像头、视频、图片读取并调用识别服务处理帧数据。data/运行数据目录文件或目录作用data/app_config.json系统本地配置文件保存 MySQL 参数、模型路径、InsightFace 路径、设备模式、检测阈值、匹配阈值等。data/insightface/InsightFace 模型缓存目录。data/insightface/models/buffalo_l.zipInsightFacebuffalo_l模型压缩包。data/insightface/models/buffalo_l/det_10g.onnxInsightFace 人脸检测模型用于关键点/对齐前的人脸定位能力。data/insightface/models/buffalo_l/w600k_r50.onnxArcFace 人脸识别模型用于提取 512 维人脸特征向量。data/insightface/models/buffalo_l/2d106det.onnx2D 人脸关键点模型。data/insightface/models/buffalo_l/1k3d68.onnx3D/68 点人脸关键点模型。data/insightface/models/buffalo_l/genderage.onnx性别年龄模型当前项目不作为核心识别依据。data/register/运行时自动生成保存人员注册图片。data/snapshots/运行时自动生成保存识别抓拍图片。data/temp/运行时自动生成保存摄像头注册当前帧等临时图片。data/exports/运行时自动生成预留导出文件目录。train_result/训练产物目录文件或目录作用train_result/数据集说明.md训练数据集来源、格式、统计信息和使用说明。train_result/face_dataset.yamlYOLO 训练数据配置文件记录训练集、验证集、类别数和类别名。train_result/splits/train.txt训练集图片路径列表。train_result/splits/val.txt验证集图片路径列表。train_result/yolo_face/args.yaml本次 YOLO 训练参数记录。train_result/yolo_face/results.csv训练过程指标数据。train_result/yolo_face/results.pngYOLO 自动生成的训练指标总览图。train_result/yolo_face/labels.jpg数据集标签分布可视化图。train_result/yolo_face/confusion_matrix.png混淆矩阵图。train_result/yolo_face/confusion_matrix_normalized.png归一化混淆矩阵图。train_result/yolo_face/BoxF1_curve.pngF1 曲线图。train_result/yolo_face/BoxP_curve.pngPrecision 曲线图。train_result/yolo_face/BoxPR_curve.pngPrecision-Recall 曲线图。train_result/yolo_face/BoxR_curve.pngRecall 曲线图。train_result/yolo_face/train_batch*.jpg训练批次样本可视化图用于查看训练数据和标注效果。train_result/yolo_face/val_batch*_labels.jpg验证集真实标签可视化图。train_result/yolo_face/val_batch*_pred.jpg验证集预测结果可视化图。train_result/yolo_face/metric_charts/*.png项目额外生成的训练指标曲线图包含 mAP、Precision、Recall、训练损失和验证损失。train_result/yolo_face/weights/best.pt当前系统默认加载的人脸检测 YOLO 最优权重。train_result/yolo_face/weights/last.ptYOLO 最后一轮训练权重可用于断点续训或对比。train_result/prepared_dataset/训练脚本自动生成的中间数据目录包含整理后的图片、标签和缓存文件。运行环境Windows 10 / Windows 11Python 3.9MySQL 8.x已训练好的人脸检测 YOLO 权重依赖安装项目依赖已写入requirements.txtnumpy opencv-python PyQt6 pymysql torch ultralytics insightface onnxruntime Pillow如目标电脑需要 InsightFace 也走 GPU可根据显卡和 CUDA 环境自行替换为合适的onnxruntime-gpu。如果 GPU 或 GPU 推理库不可用系统会自动使用 CPU 兜底。MySQL 配置系统支持两种数据库配置方式。方式一修改本地配置文件可直接修改app/core/local_config.py示例MYSQL_HOST 127.0.0.1 MYSQL_PORT 3306 MYSQL_USER root MYSQL_PASSWORD root MYSQL_DATABASE face_emergency_managementlocal_config.py的优先级高于data/app_config.json适合部署到别人电脑时直接设置数据库密码。方式二在系统设置界面修改启动后进入“系统设置”页面可修改MySQL 主机MySQL 端口MySQL 用户名MySQL 密码数据库名YOLO 权重路径InsightFace 模型目录GPU/CPU 设备模式检测阈值和识别阈值数据库表说明程序连接 MySQL 后会自动创建数据库和表结构。表名作用system_config保存系统参数配置。system_users保存系统登录用户、密码哈希、角色和登录时间。persons保存注册人员基础信息。face_features保存人员人脸特征向量特征使用LONGBLOB存储。recognition_logs保存每次识别记录。alarm_logs保存陌生人脸等告警记录。audit_logs保存登录、注册、删除、设置修改、告警处理等操作审计。图片文件不直接存入数据库数据库中保存项目相对路径便于项目移动和迁移。默认模型路径YOLO 人脸检测权重默认路径train_result/yolo_face/weights/best.ptInsightFace 默认模型目录data/insightface系统中人脸检测使用 YOLO身份识别使用 InsightFace 的 ArcFace 特征模型w600k_r50.onnx。启动方式python main.py启动流程创建data/运行目录。修补 Windows 中文路径下的 PyTorch 模型读写。读取本地配置。连接 MySQL 并自动建库建表。加载 YOLO 和 InsightFace 模型。打开登录/注册窗口。登录成功后提示登录成功并进入主界面。使用流程1. 登录注册首次启动时如果数据库中没有系统用户会默认进入注册管理员页面。注册成功后自动登录。后续启动需要输入账号密码进入主界面。2. 数据概览登录后默认进入“数据概览”页面页面展示注册人员、今日识别、已识别人数、陌生人脸和未处理告警。近 7 天识别趋势包含总识别、陌生人和告警数量。今日识别占比展示已识别与陌生人脸比例。今日识别来源分布例如摄像头、视频和图片。最近告警列表。数据概览基于 MySQL 中已有的persons、recognition_logs、alarm_logs和audit_logs聚合统计不新增业务表。页面提供刷新按钮并会按固定间隔自动刷新。3. 人员注册进入“人员注册”页面填写人员编号、姓名、部门、电话和备注。可添加本地图片也可启动摄像头后使用当前帧。点击注册后系统会检测人脸、提取 ArcFace 特征、写入 MySQL。注册图片保存到data/register/。4. 实时监控进入“实时监控”页面可选择摄像头视频文件图片文件系统会在画面上绘制检测框和识别结果。已知人员显示姓名和相似度未匹配人员显示为陌生人脸并写入告警。实时监控采用显示帧和识别帧分离机制摄像头画面以较高频率刷新显示提升预览流畅度。YOLO ArcFace 完整识别按video_fps_limit控制默认 2 FPS。两次识别之间复用最近一次识别框和标签。复用帧只刷新画面和统计不重复写数据库、不重复追加事件表、不重复触发告警。5. 人员信息进入“人员信息”页面可查看已注册人员并按人员编号、姓名、部门筛选。删除人员时会同步删除对应特征并写入审计日志。6. 记录查询进入“记录查询”页面可按关键字查询识别日志也可只查看陌生人记录。页面展示时间、姓名、编号、相似度、阈值、类型、来源和摄像头。7. 告警中心进入“告警中心”页面可查看陌生人脸告警支持关键字搜索仅未处理筛选处理选中告警告警处理会更新alarm_logs状态并写入audit_logs。8. 日志审计进入“日志审计”页面可查看系统关键操作包括用户登录管理员注册人员注册人员删除告警处理系统设置保存识别引擎重载9. 系统设置进入“系统设置”页面可维护数据库、模型和推理参数。保存后配置会同步到data/app_config.json和system_config表。识别原理YOLO 对输入图像进行人脸检测输出人脸框。InsightFace 根据人脸区域完成对齐和预处理。ArcFace 模型提取 512 维人脸特征向量。系统对特征向量进行 L2 归一化。待识别人脸特征与 MySQL 中注册特征做余弦相似度计算。相似度高于match_threshold时判定为已注册人员否则判定为陌生人脸。识别结果、抓拍路径、告警记录和操作审计写入 MySQL。配置字段说明data/app_config.json常用字段字段作用mysql.hostMySQL 主机地址。mysql.portMySQL 端口。mysql.userMySQL 用户名。mysql.passwordMySQL 密码。mysql.databaseMySQL 数据库名。model_pathYOLO 人脸检测权重路径。insightface_rootInsightFace 模型根目录。device_mode推理设备模式可选auto、gpu、cpu。img_sizeYOLO 推理输入尺寸。det_confYOLO 检测置信度阈值。det_iouYOLO NMS IOU 阈值。match_threshold人脸识别相似度阈值。cooldown_seconds重复识别/重复告警冷却时间。camera_index默认摄像头编号。video_fps_limit视频/摄像头模型识别帧率上限默认 2 FPS显示帧和识别帧已分离。

相关新闻