基于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.9

  • PyQt6

  • Ultralytics YOLO

  • InsightFace

  • ArcFace

  • OpenCV

  • NumPy

  • PyMySQL

  • MySQL 8.x

  • PyTorch

  • ONNX 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.py YOLO 人脸检测模型训练脚本,负责校验数据集、划分训练/验证集、生成训练配置并启动训练。
requirements.txt 项目依赖库列表,不固定版本,便于在不同电脑上安装环境。
README.md 项目说明文档。
yolov8n.pt YOLO 预训练权重,可作为训练人脸检测模型的初始权重。

app/ 应用源码

文件 作用
app/__init__.py Python 包标记文件。

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.py Unicode 安全读写工具,负责中文路径下的 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.py MySQL 数据访问层,负责自动建库建表、人员信息、特征向量、识别日志、告警日志、审计日志和系统用户的增删查改。

app/services/ 业务服务层

文件 作用
app/services/__init__.py 服务模块包标记文件。
app/services/auth_service.py 系统用户认证服务,负责管理员注册、登录、密码哈希校验和登录审计写入。
app/services/recognition_service.py 人脸识别业务服务,负责人员注册、特征缓存、实时识别、相似度匹配、抓拍保存、识别日志写入和陌生人告警生成。

app/ui/ 界面层

文件 作用
app/ui/__init__.py UI 模块包标记文件。
app/ui/auth_dialog.py 登录/注册对话框,系统启动后先进入该窗口。
app/ui/dashboard_widgets.py 数据概览页 PyQt6 自绘图表组件,包括指标卡、近 7 天趋势图、环形占比图和横向柱状图。
app/ui/main_window.py 主界面文件,包含实时监控、人员注册、人员信息、记录查询、系统设置、告警中心、日志审计等页面。
app/ui/styles.py PyQt6 全局浅色主题 QSS,统一窗口、导航、按钮、表格、输入框、下拉框等组件样式。
app/ui/workers.py 视频采集后台线程,负责摄像头、视频、图片读取,并调用识别服务处理帧数据。

data/ 运行数据目录

文件或目录 作用
data/app_config.json 系统本地配置文件,保存 MySQL 参数、模型路径、InsightFace 路径、设备模式、检测阈值、匹配阈值等。
data/insightface/ InsightFace 模型缓存目录。
data/insightface/models/buffalo_l.zip InsightFace buffalo_l 模型压缩包。
data/insightface/models/buffalo_l/det_10g.onnx InsightFace 人脸检测模型,用于关键点/对齐前的人脸定位能力。
data/insightface/models/buffalo_l/w600k_r50.onnx ArcFace 人脸识别模型,用于提取 512 维人脸特征向量。
data/insightface/models/buffalo_l/2d106det.onnx 2D 人脸关键点模型。
data/insightface/models/buffalo_l/1k3d68.onnx 3D/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.yaml YOLO 训练数据配置文件,记录训练集、验证集、类别数和类别名。
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.png YOLO 自动生成的训练指标总览图。
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.png F1 曲线图。
train_result/yolo_face/BoxP_curve.png Precision 曲线图。
train_result/yolo_face/BoxPR_curve.png Precision-Recall 曲线图。
train_result/yolo_face/BoxR_curve.png Recall 曲线图。
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.pt YOLO 最后一轮训练权重,可用于断点续训或对比。
train_result/prepared_dataset/ 训练脚本自动生成的中间数据目录,包含整理后的图片、标签和缓存文件。

运行环境

  • Windows 10 / Windows 11

  • Python 3.9

  • MySQL 8.x

  • 已训练好的人脸检测 YOLO 权重

依赖安装

项目依赖已写入 requirements.txt

复制代码
numpy
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_management"

local_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.pt

InsightFace 默认模型目录:

复制代码
data/insightface

系统中人脸检测使用 YOLO,身份识别使用 InsightFace 的 ArcFace 特征模型 w600k_r50.onnx

启动方式

复制代码
python main.py

启动流程:

  1. 创建 data/ 运行目录。

  2. 修补 Windows 中文路径下的 PyTorch 模型读写。

  3. 读取本地配置。

  4. 连接 MySQL 并自动建库建表。

  5. 加载 YOLO 和 InsightFace 模型。

  6. 打开登录/注册窗口。

  7. 登录成功后提示登录成功并进入主界面。

使用流程

1. 登录注册

首次启动时,如果数据库中没有系统用户,会默认进入注册管理员页面。注册成功后自动登录。后续启动需要输入账号密码进入主界面。

2. 数据概览

登录后默认进入"数据概览"页面,页面展示:

  • 注册人员、今日识别、已识别人数、陌生人脸和未处理告警。

  • 近 7 天识别趋势,包含总识别、陌生人和告警数量。

  • 今日识别占比,展示已识别与陌生人脸比例。

  • 今日识别来源分布,例如摄像头、视频和图片。

  • 最近告警列表。

数据概览基于 MySQL 中已有的 personsrecognition_logsalarm_logsaudit_logs 聚合统计,不新增业务表。页面提供刷新按钮,并会按固定间隔自动刷新。

3. 人员注册

进入"人员注册"页面:

  1. 填写人员编号、姓名、部门、电话和备注。

  2. 可添加本地图片,也可启动摄像头后使用当前帧。

  3. 点击注册后,系统会检测人脸、提取 ArcFace 特征、写入 MySQL。

  4. 注册图片保存到 data/register/

4. 实时监控

进入"实时监控"页面,可选择:

  • 摄像头

  • 视频文件

  • 图片文件

系统会在画面上绘制检测框和识别结果。已知人员显示姓名和相似度,未匹配人员显示为陌生人脸并写入告警。

实时监控采用显示帧和识别帧分离机制:

  • 摄像头画面以较高频率刷新显示,提升预览流畅度。

  • YOLO + ArcFace 完整识别按 video_fps_limit 控制,默认 2 FPS。

  • 两次识别之间复用最近一次识别框和标签。

  • 复用帧只刷新画面和统计,不重复写数据库、不重复追加事件表、不重复触发告警。

5. 人员信息

进入"人员信息"页面,可查看已注册人员,并按人员编号、姓名、部门筛选。删除人员时会同步删除对应特征,并写入审计日志。

6. 记录查询

进入"记录查询"页面,可按关键字查询识别日志,也可只查看陌生人记录。页面展示时间、姓名、编号、相似度、阈值、类型、来源和摄像头。

7. 告警中心

进入"告警中心"页面,可查看陌生人脸告警,支持:

  • 关键字搜索

  • 仅未处理筛选

  • 处理选中告警

告警处理会更新 alarm_logs 状态,并写入 audit_logs

8. 日志审计

进入"日志审计"页面,可查看系统关键操作,包括:

  • 用户登录

  • 管理员注册

  • 人员注册

  • 人员删除

  • 告警处理

  • 系统设置保存

  • 识别引擎重载

9. 系统设置

进入"系统设置"页面,可维护数据库、模型和推理参数。保存后配置会同步到 data/app_config.jsonsystem_config 表。

识别原理

  1. YOLO 对输入图像进行人脸检测,输出人脸框。

  2. InsightFace 根据人脸区域完成对齐和预处理。

  3. ArcFace 模型提取 512 维人脸特征向量。

  4. 系统对特征向量进行 L2 归一化。

  5. 待识别人脸特征与 MySQL 中注册特征做余弦相似度计算。

  6. 相似度高于 match_threshold 时判定为已注册人员,否则判定为陌生人脸。

  7. 识别结果、抓拍路径、告警记录和操作审计写入 MySQL。

配置字段说明

data/app_config.json 常用字段:

字段 作用
mysql.host MySQL 主机地址。
mysql.port MySQL 端口。
mysql.user MySQL 用户名。
mysql.password MySQL 密码。
mysql.database MySQL 数据库名。
model_path YOLO 人脸检测权重路径。
insightface_root InsightFace 模型根目录。
device_mode 推理设备模式,可选 autogpucpu
img_size YOLO 推理输入尺寸。
det_conf YOLO 检测置信度阈值。
det_iou YOLO NMS IOU 阈值。
match_threshold 人脸识别相似度阈值。
cooldown_seconds 重复识别/重复告警冷却时间。
camera_index 默认摄像头编号。
video_fps_limit 视频/摄像头模型识别帧率上限,默认 2 FPS;显示帧和识别帧已分离。

相关推荐
薛定e的猫咪12 小时前
从 DSM 到多智能体仿真:复杂产品变更传播研究路线图
开发语言·人工智能·笔记·学习·php
容器魔方12 小时前
Karmada 用户组再迎新成员,Wellhub 正式加入!
人工智能·云原生·容器·开源
ggabb12 小时前
汉语相对英语的核心对比优势分析
人工智能·自然语言处理·自动驾驶
三无推导12 小时前
《n8n self-hosted-ai-starter-kit 安装部署教程:用 Docker Compose 快速搭建本地 AI 工作流环境》
人工智能·docker·容器·持续部署·ollama·ai工作流·n8n
尋找記憶的魚12 小时前
基于langchain4j的ai编程助手项目(完整篇)
java·人工智能·spring boot·langchain·ai编程
科研online12 小时前
面向科研领域的智能数据分析与AI工作流实战
大数据·人工智能
新芒12 小时前
卡萨帝20年:中国高端制造转型的分水岭
人工智能·制造
书生的梦12 小时前
《神经网络与深度学习》学习笔记(二)
深度学习·神经网络·学习
郑寿昌12 小时前
华为发布韬定律:突破摩尔定律的新范式
人工智能