Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

基于 OpenCV 的人脸识别签到系统

四川大学 C++ 暑期实训项目。使用 Qt Widgets + OpenCV 实现: 实时人脸检测(YuNet)、人脸注册与识别(SFace)、人员数据库管理(SQLite)、 识别日志与签到导出。

功能清单

模块 功能
实时视频 摄像头采集(640x480,QTimer 每 30ms 取帧)、开始/停止、导入本地图片识别
人脸检测 YuNet 模型,视频流中每张人脸画绿色矩形框
人脸识别 SFace 128 维特征 + 余弦相似度,超过阈值显示姓名+得分,否则显示"陌生人"
人员管理 SQLite 数据库,表格增删改查;注册支持摄像头连拍 5 张或本地照片导入,平均特征入库
识别日志 时间、姓名、得分、抓拍缩略图;同一人 30 秒内不重复记录
签到模式 开启后识别成功自动记入当日签到(一天一次),可导出 CSV
性能 检测每 2 帧执行一次(画面每帧刷新),状态栏实时显示 FPS;识别阈值滑块实时调节

环境要求

  • macOS + Xcode 命令行工具(xcode-select --install
  • Qt 5(Widgets / Sql 模块)+ Qt Creator
  • OpenCV 4.x(Homebrew 安装)
  • pkg-config(Homebrew 安装,qmake 靠它找到 OpenCV)

安装依赖(Homebrew)

brew install opencv pkgconf

Apple Silicon(M 系列芯片)注意:Qt 官方的 5.14.2 安装包只有 x86_64 版本,没法链接 Homebrew 的 arm64 OpenCV。推荐直接用 Homebrew 的 Qt 5 (5.15,与 5.14 完全同代,本项目代码不使用任何 5.15 新增接口):

brew install qt@5

然后在 Qt Creator 里注册这个 Qt 版本(只需配置一次):

  1. Qt Creator → 偏好设置(Preferences)→ Kits → Qt Versions → 添加, 选择 /opt/homebrew/opt/qt@5/bin/qmake
  2. 切到 Kits 页 → 添加一个新 Kit,Qt 版本选上一步添加的 qt@5, 编译器选 Apple Clang
  3. 打开工程后在左侧 Projects 页勾选这个 Kit

Intel 芯片的 Mac 可以直接用官方 Qt 5.14.2 安装包(macOS clang 64-bit), OpenCV 同样用 brew install opencv 即可,无需上述 Kit 配置。

下载模型

bash scripts/download_models.sh

会把 YuNet(人脸检测,约 230KB)和 SFace(特征提取,约 37MB)两个 ONNX 模型下载到 models/ 目录。GitHub 直连慢可以用: MIRROR=https://gh-proxy.com/ bash scripts/download_models.sh

编译运行

  1. 用 Qt Creator 打开 FaceRecognition.pro
  2. 首次打开选择 Kit 后点 Configure Project
  3. 直接点运行(⌘R)

工程通过 pkg-config 自动定位 OpenCV 头文件与库(见 .pro 中 PKGCONFIG += opencv4),没有写死任何绝对路径;models/data/ 目录通过 qmake 传入的工程路径定位,换机器重新 qmake 即可。

使用说明

  1. 实时识别页:点"开始"打开摄像头;拖动阈值滑块可实时调整判定 松紧(默认 0.363);勾选"签到模式"后识别成功自动签到, "导出今日签到"生成 CSV 文件。
  2. 人员管理页:点"注册人员",输入姓名部门后,用摄像头按提示 连拍 5 张(正脸/左转/右转/抬头/低头各一张),或"导入照片"批量 选择本地照片;双击表格单元格可直接修改,"删除选中"删除人员及其特征。
  3. 识别日志页:查看识别记录(时间/姓名/得分/抓拍缩略图)。

运行数据(数据库 face.db、抓拍图 snapshots/)保存在工程的 data/ 目录下,已被 .gitignore 排除。

打包发布

把项目打成不依赖开发环境、可以直接发给别人运行的程序,一条命令:

bash scripts/package_app.sh          # 产出 build-release/FaceRecognition.app
bash scripts/package_app.sh --dmg    # 追加生成 FaceRecognition.dmg 镜像

脚本做的事:Release 编译 → 模型拷进 .app → macdeployqt 把 Qt Frameworks 和 OpenCV 的 dylib 拷进 .app/Contents/Frameworks/ 并把 依赖路径改写为相对路径 → 补齐 macdeployqt 漏掉的库 → 自动验证 (otool -L 检查无 Homebrew 路径残留 + 拷到 /tmp 独立启动一次)。

macdeployqt 是 Qt 在 macOS 上的部署工具,与 Windows 下的 windeployqt 相对应:windeployqt 把 Qt 的 DLL 拷到 exe 旁边(Windows 从 exe 所在 目录找 DLL);macdeployqt 把依赖拷进 .app 包内并用 install_name_tool 改写查找路径(macOS 按库里记录的路径找依赖)。两者目的相同—— 把程序依赖的动态库收拢到发布包里,让没装开发环境的机器也能运行。

打包后的程序从 .app/Contents/Resources/models/ 读模型,运行数据写到 ~/Library/Application Support/人脸识别签到系统/(.app 内部是只读的, 不能写数据库);开发时仍用工程目录的 models/data/,两级查找 逻辑见 src/apppath.h

常见问题

1. 摄像头打不开 / 画面黑屏 第一次点"开始"时 macOS 会弹出摄像头授权框,必须点"允许"。如果当时 点了拒绝,去 系统设置 → 隐私与安全性 → 摄像头 里把本程序(从 Qt Creator 启动时是 Qt Creator)打开,然后重启程序。工程的 Info.plist 已配置 NSCameraUsageDescription,缺少这个声明系统会直接拒绝访问。

2. 画面颜色发蓝/偏色 OpenCV 的 Mat 是 BGR 通道顺序,QImage 是 RGB,显示前必须 cv::cvtColor(..., COLOR_BGR2RGB) 转换(见 src/imageutils.h)。 如果出现整体偏蓝的人脸,就是漏了这一步。

3. qmake 报错 "opencv4 development package not found" Qt Creator 从图形界面启动时继承不到终端的 PATH,找不到 Homebrew 的 pkg-config。本工程 .pro 已直接写入 Homebrew pkg-config 的完整路径做了 兜底;若仍报错,确认 brew install pkgconf opencv 已执行成功。

4. 启动时提示"模型缺失" 未运行下载脚本。在工程根目录执行 bash scripts/download_models.sh

5. 导出的 CSV 用 Excel 打开中文乱码 不应出现——导出时已写入 UTF-8 BOM。如果用其他工具二次保存后乱码, 用"数据 → 从文本导入"并选择 UTF-8 编码。

6. 工程必须放在纯英文路径下 实测 Homebrew 的 qmake 处理不了含中文的工程路径:qmake 会报 Cannot find file: ....pro(文件明明存在)。这是 qmake 对命令行参数 的编码处理缺陷,与本工程无关。务必把工程放在不含中文、不含空格的 路径下(例如 ~/Desktop/FaceRecognition)再用 Qt Creator 打开。

目录结构

FaceRecognition/
├── FaceRecognition.pro   # qmake 工程文件
├── Info.plist            # macOS 摄像头权限声明
├── src/
│   ├── main.cpp          # 入口
│   ├── mainwindow.*      # 主窗口:三页布局 + 视频流 + 识别调度
│   ├── faceengine.*      # 算法封装:检测/特征/比对(UI 不碰 DNN)
│   ├── persondb.*        # 数据库封装:全部 SQL 集中在这里
│   ├── registerdialog.*  # 注册对话框:连拍/导入 + 平均特征
│   ├── imageutils.h      # Mat -> QImage 转换
│   └── apppath.h         # 模型/数据目录定位
├── models/               # ONNX 模型(脚本下载,不入库)
├── scripts/download_models.sh
└── docs/                 # 测试清单、答辩要点

About

A desktop face recognition attendance system built with Qt 5.15 and OpenCV 4. Face detection, 128-dim feature extraction, and SQLite-based identity matching via cosine similarity. C++ / macOS.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages