一个基于 OpenCV 的本地人脸识别签到小项目,包含人脸采集、数据训练、身份识别和签到表导出功能,并提供简单的 Tkinter 图形界面。
- 人脸检测:实时检测摄像头中的人脸。
- 人脸采集:按键采集人脸图片,保存到
data/。 - 信息生成:根据图片文件名自动生成
Info.xls。 - 模型训练:使用 LBPH 算法训练并保存
train.yml。 - 识别签到:实时识别并将签到结果写入
SignedIn.xls。 - 图形界面:通过按钮启动各功能脚本。
cc/
├─ GUI.py # 图形界面入口
├─ HumanFaceDetect.py # 人脸检测演示
├─ FaceCollect.py # 人脸采集
├─ EnterInformation.py # 从 data 生成 Info.xls
├─ Train.py # 训练并保存 train.yml
├─ RecognizeAndSignin.py # 识别并写入 SignedIn.xls
├─ data/ # 人脸样本图片
├─ train.yml # 训练模型文件
├─ Info.xls # 基础信息表
├─ SignedIn.xls # 签到结果表
└─ haarcascade_frontalface_default.xml
- Python 3.8+
- Windows(代码中使用了
os.startfile打开 Excel) - 可用摄像头
建议安装依赖:
pip install opencv-contrib-python pillow xlrd xlwt说明:项目使用了 cv2.face.LBPHFaceRecognizer_create(),需要 opencv-contrib-python,仅安装 opencv-python 会报错。
python GUI.py按钮对应功能:
EnterFace->FaceCollect.pyEnterInfo->EnterInformation.pyTrain->Train.pySignIn->RecognizeAndSignin.pyCheck-> 打开SignedIn.xlsExit-> 关闭界面
- 采集人脸:
python FaceCollect.py- 按提示输入学号和姓名。
- 采集窗口中按
s保存一张人脸,按q退出。
- 生成信息表:
python EnterInformation.py- 训练模型:
python Train.py- 识别并签到:
python RecognizeAndSignin.py- 查看签到结果:打开
SignedIn.xls。
FaceCollect.py 采集的文件名格式为:
姓名.学号.序号.jpg
示例:
zhangsan.2020000001.1.jpg
EnterInformation.py 和 Train.py 依赖这个格式解析姓名与学号,请勿随意修改文件名结构。
AttributeError: module 'cv2' has no attribute 'face'- 原因:未安装
opencv-contrib-python。
- 原因:未安装
- 无法读取摄像头
- 检查摄像头权限、设备占用情况,或修改
cv2.VideoCapture(0)中的索引。
- 检查摄像头权限、设备占用情况,或修改
- 签到表为空
- 请确认已先完成采集与训练,且
Info.xls、train.yml存在。
- 请确认已先完成采集与训练,且