一个基于 OpenCV + scikit-learn 的简洁人脸识别项目,作为机器学习入门项目与传统视觉方法演示案例上传到 GitHub。
项目的核心流程非常直接:
人脸图片 -> 灰度化/缩放 -> PCA 降维 -> SVM 分类 -> 输出身份
- 结构简单:只保留训练和推理两个核心脚本,适合直接展示到 GitHub
- 传统机器学习方案:不依赖深度学习框架,CPU 即可运行
- 支持两种推理方式:单张图片识别、摄像头实时识别
- 代码易读:适合写课程报告、答辩讲解或二次开发
PythonOpenCVNumPyscikit-learnjoblib
在预测阶段,先使用 OpenCV 自带的 haarcascade_frontalface_default.xml 检测图像中的人脸区域,再对裁剪出的人脸进行识别。
原始人脸图像会被统一缩放到固定尺寸,例如 60 x 60,然后拉平成向量。
- 原始维度:
60 x 60 = 3600 - PCA 后维度:默认
20
这样做可以减少冗余信息、降低训练成本,并保留主要的人脸特征。
将 PCA 输出的低维特征输入 SVM(RBF kernel) 分类器,完成多类别人脸身份识别。
默认参数:
C = 100gamma = 0.01
face_recognition_github/
├── README.md
├── requirements.txt
├── .gitignore
├── train.py
└── predict.py
实际使用时,你还需要在该目录下自行准备数据集和模型目录:
face_recognition_github/
├── dataset/
│ ├── person_a/
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ └── ...
│ ├── person_b/
│ │ ├── 1.jpg
│ │ └── ...
│ └── ...
└── models/
其中:
dataset/中每个子文件夹代表一个人- 子文件夹名称就是该类别的标签名
models/由训练脚本自动创建并保存模型文件
- 建议每个人至少准备
10张以上清晰人脸图片 - 图片中人脸尽量清晰、正脸、无遮挡
- 各类别样本数量尽量均衡
- 尽量包含不同光照、角度和表情,提高泛化能力
pip install -r requirements.txt在项目根目录下运行:
python train.py如果你想指定数据集目录或模型输出目录:
python train.py --dataset dataset --model-dir models如果你想调整图像尺寸和 PCA 维度:
python train.py --width 80 --height 80 --components 30python predict.py test test.jpg如果想保存识别后的结果图:
python predict.py test test.jpg --save-path result.jpgpython predict.py camera按 ESC 键退出窗口。
训练完成后,models/ 目录下会生成:
svm_face_model.pkl:SVM 分类器pca_model.pkl:PCA 降维模型labels.pkl:类别名称列表
如果你准备把这个项目放到 GitHub 首页展示,可以突出以下几点:
- 这是一个传统机器学习人脸识别项目
- 重点使用了
PCA + SVM,而不是深度学习网络 - 项目结构简洁,适合教学、演示和课程答辩
- 支持从训练到预测的完整闭环
- 在训练阶段加入更稳定的人脸检测和人脸对齐
- 加入数据增强与超参数搜索
- 增加“陌生人拒识”机制
- 将
PCA + SVM升级为FaceNet / ArcFace等深度特征方案 - 增加 Web 页面或桌面界面,提升演示效果
这个仓库是从原始课程项目中整理出的 GitHub 精简版本,保留了最核心、最容易展示的训练与推理逻辑,适合直接上传公开仓库。