基于 Python + OpenCV 的人脸识别项目实战:SFaceEmbedding + GUI 训练与评估
1. 项目简介
这是一个本地可运行的人脸识别 Python 项目,完整实现了从训练集准备到图形界面识别的全流程,适合课程设计、毕业设计、OpenCV 学习、Python 实战项目展示。
项目主要能力:
- 训练集管理(按'姓名/图片'目录组织)
- 自动划分训练集 / 测试集(split)
- 人脸预处理(prepare,支持检测/裁剪/统一尺寸)
- 模型训练(默认 SFaceEmbedding,兼容 LBPH)
- 单张图片识别(GUI / 命令行)
- 批量评估测试集准确率
- 图形界面(支持一键训练、选图识别、进度条)
- 图片抓取下载 GUI(按关键词下载训练图)
- 中文路径 / 中文姓名标签支持(Windows 场景)
2. 项目效果展示
2.1 主识别 GUI(训练 + 测试 + 识别)
- 一键训练(split -> prepare -> train)
- 测试集目录切换
- 识别结果预览
- 日志与 JSON 结果展示
2.2 图片抓取下载 GUI(补充训练集)
- 输入关键词(如:薛之谦、胡歌)
- 指定保存目录(如 dataset/raw_lfw/人物名)
- 指定下载数量
- 支持原图优先、缩略图回退
- 支持下载日志与进度条
3. 技术方案说明(核心原理)
本项目支持两种识别后端:
3.1 默认方案:SFaceEmbedding(推荐)
当前默认使用 SFaceEmbedding 路线,整体流程如下:
- 使用 YuNet 进行人脸检测(DNN)
- 使用 SFace 提取人脸 embedding(特征向量)
- 将新图的人脸向量与训练库中的向量做相似度匹配(cosine distance)
- 根据阈值判断是否为已知人物或 unknown
特点:
- 对彩色自然照片更稳
- 比传统 LBPH 更适合真实场景(网络图片、手机照片)
- 不需要从零训练神经网络(使用预训练模型做特征提取)
3.2 兼容方案:LBPH(传统方法)
项目中也保留了 LBPH 路线,适合作为传统方法对照学习。
特点:
- 实现简单
- 对规整、已裁剪人脸图可用
- 对真实场景图片的鲁棒性通常不如 SFace
4. 项目目录结构
view/
artifacts/ # 模型、标签映射、报告、ONNX 模型缓存
face_embedding_gallery.npz # 默认 SFace 特征库模型
lbph_face_model.yml # LBPH 模型(备用)
label_map.json # 标签映射(id -> 姓名)
model_meta.json # 模型元信息(后端、阈值、尺寸等)
dataset_summary.json # 预处理统计
eval_report.json # 批量评估报告
models/
face_detection_yunet_*.onnx # YuNet 模型(自动下载)
face_recognition_sface_*.onnx
dataset/
raw/
raw_lfw/
processed/
splits/
train_raw/
test_raw/
train_processed/
outputs/
gui/
/
scripts/
download_sample_dataset.py
download_images_gui.py
split_dataset.py
prepare_dataset.py
train_model.py
recognize_image.py
evaluate_testset.py
gui_app.py
src/face_pipeline/
requirements.txt
README.md


