原创项目合集 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统

基于 YOLO + MobileFaceNet 的人脸识别会议签到系统

一、项目简介

本项目是一个前后端分离的会议签到系统,毕业设计题目为“基于人脸识别的会议签到系统”。系统采用 FastAPI + Vue 3 + MySQL 架构,算法部分采用“两阶段人脸识别方案”:先使用基于 WIDER FACE 数据集训练得到的 YOLO 模型完成人脸检测,再使用 MobileFaceNet 提取人脸特征并进行身份匹配。

系统包含用户前台和管理员后台。用户前台用于参会人员登录、查看会议、人脸注册、在线签到和补签申诉;管理员后台用于人员管理、会议管理、签到记录管理、补签审核、公告发布、模型配置和数据统计。

二、技术栈

模块技术
后端框架FastAPI
数据库MySQL
ORMSQLAlchemy
前端框架Vue 3
UI 组件Element Plus
HTTP 请求Axios
人脸检测YOLO / Ultralytics
人脸识别MobileFaceNet ONNX
模型推理PyTorch、ONNXRuntime
图像处理OpenCV、NumPy

三、系统架构

用户前台 Vue  ─┐
              ├── FastAPI 后端 ── MySQL
管理员后台 Vue ┘        │
                       ├── YOLO 人脸检测
                       └── MobileFaceNet 人脸特征提取

整体识别流程如下:

摄像头采集图像
    ↓
FastAPI 接收图片
    ↓
YOLO 检测人脸位置
    ↓
裁剪人脸区域
    ↓
MobileFaceNet 提取特征向量
    ↓
与数据库中的注册特征计算余弦相似度
    ↓
生成签到结果

四、项目目录

.
├── backend/                    # FastAPI 后端
│   ├── app/
│   │   ├── api/                # 接口路由
│   │   ├── core/               # 配置、数据库、安全工具
│   │   ├── models/             # SQLAlchemy 数据模型
│   │   ├── services/           # 人脸检测、识别、图像处理等服务
│   │   ├── main.py             # 后端入口
│   │   └── schemas.py          # 请求与响应结构
│   └── requirements.txt        # 后端依赖
├── frontend/                   # Vue 前端
│   ├── src/
│   │   ├── api/                # Axios 请求封装
│   │   ├── components/         # 摄像头等通用组件
│   │   ├── layouts/            # 用户前台、管理员后台布局
│   │   ├── stores/             # 登录状态
│   │   └── views/              # 前后台页面
│   ├── package.json
│   └── vite.config.js
├── datasets/                   # YOLO 人脸检测数据集
│   ├── images/
│   └── labels/
├── train_result/               # YOLO 训练产物
│   └── yolo_face/
├── uploads/                    # 人脸注册、签到图片保存目录
├── mobilefacenet.onnx          # MobileFaceNet 人脸识别模型
├── train_yolo.py               # YOLO 人脸检测训练脚本
├── yolov8n.pt                  # YOLO 预训练权重
├── yolo26n.pt                  # 备用 YOLO 权重
└── 数据集说明.md               # 数据集说明

五、核心功能

用户前台

功能说明
用户注册/登录用户可以注册账号并登录前台
首页查看个人会议数量、已签到数量、待签到数量和通知公告
我的会议查看当前用户需要参加的会议
人脸注册通过摄像头采集人脸,生成并保存 MobileFaceNet 特征
在线签到上传摄像头图片,完成 YOLO 检测和 MobileFaceNet 身份匹配
签到记录查看个人历史签到记录
补签申诉对识别失败、漏签等情况提交申诉

管理员后台

功能说明
数据总览查看人员总数、会议总数、今日签到、待审补签等
人员管理新增、编辑、删除人员,管理员可为人员采集人脸
会议管理创建会议、设置会议时间地点、选择参会人员
签到记录按会议、人员、部门查询签到记录
补签审核审核用户提交的补签申诉,通过后自动生成补签记录
模型配置配置 YOLO 模型路径、MobileFaceNet 模型路径、识别阈值和推理设备
通知公告发布、编辑、删除前台公告
基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图1 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图1 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图2 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图3 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图4 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图5 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图6 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图7 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图8 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图9 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图10 基于 YOLO + MobileFaceNet 的人脸识别会议签到系统项目截图11

六、算法说明

YOLO 人脸检测

YOLO 模型用于检测图像中的人脸位置。训练数据来源于 Kaggle 的 WIDER FACE for YOLO Training 数据集,项目本地数据结构为:

datasets/
├── images/
└── labels/

当前数据集为单类别检测任务,类别为:

0: face

训练脚本为:

train_yolo.py

训练产物统一保存到:

train_result/

本次训练结果目录为:

train_result/yolo_face/

YOLO 原生训练结果包括:

train_result/yolo_face/results.png
train_result/yolo_face/results.csv
train_result/yolo_face/confusion_matrix.png
train_result/yolo_face/BoxPR_curve.png
train_result/yolo_face/BoxP_curve.png
train_result/yolo_face/BoxR_curve.png
train_result/yolo_face/BoxF1_curve.png
train_result/yolo_face/weights/best.pt
train_result/yolo_face/weights/last.pt

额外生成的单指标浅色可视化图位于:

train_result/yolo_face/metric_charts/

包含:

precision_curve.png
recall_curve.png
map50_curve.png
map50_95_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

当前系统默认使用的 YOLO 检测模型路径为:

train_result/yolo_face/weights/best.pt

MobileFaceNet 人脸识别

MobileFaceNet 用于提取人脸特征向量。当前项目使用 ONNX 模型:

mobilefacenet.onnx

系统会将 YOLO 检测到的人脸区域裁剪出来,送入 MobileFaceNet,得到人脸特征向量。注册阶段保存该特征,签到阶段提取当前图像特征,并与数据库中已注册的人员特征计算余弦相似度。

默认相似度阈值为:

0.60

后台“模型配置”页面可以修改阈值和模型路径。

七、数据库说明

默认数据库连接配置在:

backend/app/core/config.py

默认连接地址:

mysql+pymysql://root:123456@127.0.0.1:3306/face_meeting_system?charset=utf8mb4

也可以通过环境变量覆盖:

$env:DATABASE_URL="mysql+pymysql://root:你的密码@127.0.0.1:3306/face_meeting_system?charset=utf8mb4"

后端启动时会自动创建数据库表。默认管理员账号会自动初始化:

账号:admin
密码:123456

主要数据表:

表名作用
admin_user管理员账号
user前台用户/参会人员
face_feature人脸特征向量
meeting会议信息
meeting_member会议参会人员关系
attendance_record签到记录
attendance_appeal补签申诉
announcement通知公告
model_config模型路径和阈值配置
operation_log操作日志

八、后端运行

在项目根目录下运行:

cd backend
pip install -r requirements.txt
cd ..
$env:PYTHONPATH="backend"
uvicorn app.main:app --host 0.0.0.0 --port 8000

后端启动后访问:

http://127.0.0.1:8000

接口文档:

http://127.0.0.1:8000/docs

九、前端运行

进入前端目录:

cd frontend
npm install
npm run dev

前端默认地址:

http://127.0.0.1:5173

前端已经配置接口代理:

/api     -> http://127.0.0.1:8000
/uploads -> http://127.0.0.1:8000

十、接口模块

后端接口统一以 /api 开头:

接口模块说明
/api/auth登录、当前用户、修改密码
/api/persons人员管理、人脸注册、用户注册
/api/meetings会议管理、我的会议
/api/attendance人脸签到、签到记录、补签申诉
/api/admin后台统计、操作日志
/api/announcements通知公告
/api/model模型配置

十一、训练 YOLO 模型

训练脚本:

train_yolo.py

常用训练命令:

python train_yolo.py --model yolov8n.pt --epochs 100 --batch 16 --device 0

脚本特点:

  • 自动检查 datasets/imagesdatasets/labels
  • 自动生成训练集/验证集划分
  • 训练产物统一保存到 train_result
  • 开启 YOLO 原生 plots=True
  • 生成 results.png、混淆矩阵、PR 曲线、P/R/F1 曲线等 YOLO 原生图
  • 自动处理少量异常标签框,源数据不被修改
  • 对 PyTorch 模型读写做了中文路径兼容处理

十二、使用流程

管理员流程

  1. 启动 MySQL、后端和前端。
  2. 使用默认管理员账号登录后台。
  3. 在“人员管理”中新增参会人员。
  4. 在“会议管理”中创建会议并选择参会人员。
  5. 在“模型配置”中确认 YOLO 和 MobileFaceNet 模型路径。
  6. 在“签到记录”和“补签审核”中查看和处理签到数据。

用户流程

  1. 用户注册或由管理员创建账号。
  2. 登录用户前台。
  3. 在“人脸注册”中采集本人脸部信息。
  4. 在“我的会议”中选择会议并进行在线签到。
  5. 在“签到记录”中查看结果。
  6. 若识别失败或漏签,可在“补签申诉”中提交说明。

十三、主要文件说明

文件说明
train_yolo.pyYOLO 人脸检测模型训练入口
backend/app/main.pyFastAPI 后端入口
backend/app/core/config.py系统配置
backend/app/models/entities.py数据库表模型
backend/app/services/yolo_detector.pyYOLO 人脸检测服务
backend/app/services/mobilefacenet_service.pyMobileFaceNet 特征提取服务
backend/app/services/face_matcher.py人脸特征相似度计算
frontend/src/App.vue前端主入口
frontend/src/layouts/UserShell.vue用户前台布局
frontend/src/layouts/AdminShell.vue管理员后台布局
frontend/src/components/CameraCapture.vue摄像头采集组件

本项目为个人原创,结构清晰,功能完整,适合课程设计、毕业设计和个人学习使用。如需购买项目成品或定制化需求可以联系作者。

微信二维码
Jay 微信二维码