# Face-Recognition **Repository Path**: hellocodeing/face-recognition ## Basic Information - **Project Name**: Face-Recognition - **Description**: 基于Opencv4.2和wxPython4可视化界面的人脸考勤系统 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2021-06-19 - **Last Updated**: 2022-05-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 前言 主题:基于Opencv4.2的人脸考勤系统 ## 功能模块 ![架构](https://img-blog.csdnimg.cn/2021031121195642.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70) - 采集人脸:收集需要录入的学生信息,开启摄像头收集截取对应的人脸图片; - 训练人脸数据模型:根据收集和整合好的人脸图片数据训练成人脸数据模型; - 人脸识别打卡:打开摄像头,截取一帧帧的人脸图片与训练好的人脸数据模型进行置信度比对,在可定范围内识别并自动打卡,打卡记录存入数据库。 ## 交互方式 1. 首先,点击“采集人脸”的按钮,输入对应的学生的姓名,学号,学院信息,成功录入数据库后,等待三秒后打开摄像头,面向摄像头,成功收集200张人脸图片数据后,关闭摄像头; 2. 其次,将所有需要录入的学生的信息和人脸图片收集好后,点击“训练数据”按钮,系统自动读取学生信息和其对应的人脸图片数据,训练人脸模型; 3. 最后,点击“识别打卡”按钮,开启摄像头,面对摄像头,系统根据人脸数据模型与当前人脸进行置信度对比,在可定范围内识别,显示打卡成功,并将学生信息显示在界面上,并将当前时间打卡的数据写入数据库,同时更新到右侧的打卡记录列表内。 **附加,点击“关闭摄像头”按钮,即可直接关闭调用摄像头的相关线程。** ## 开发工具及环境 - 数据存储用的为Sqlite3(可以更换为别的) - 开发平台为PyCharm, - 编程语言为Python3.6 使用的库主要有: `wxPython4.0.7`,`opencv-python4.2.0.32`,`opencv-contrib-python4.2.0.32`,`numpy`,`pysqlite3`,`threading`,`PIL` # 使用命令 **使用python指令进行运行即可** ```bash python main.py ``` # 主要逻辑 ## 人脸采集 1. 首先是录入学生数据,点击采集人脸数据的按钮后,会弹出输入框,系统会查询判断该信息是否重复录入。 ![信息采集](https://img-blog.csdnimg.cn/20210311212230156.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzg1MzA5Nw==,size_16,color_FFFFFF,t_70#pic_center) 2. 然后倒数3秒后开启摄像头,开启收集人脸图片/使用的是opencv自带的级联分类器来读取opencv以及训练行号的人脸模型数据`haarcascade_frontalface_default.xml`,然后将截取出来的人脸图片编程灰度图片存入对应的文件夹。 主要代码如下: ```python face_detector = cv.CascadeClassifier(haarcascade_frontalface_file_path) gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) faces = face_detector.detectMultiScale(gray, 1.2, 5) ``` ## 训练数据 点击“训练数据”的按钮后,系统会遍历`“./resources/pictures”`目录下各个学生的人脸图片,然后使用`LBP直方图LBPHFace`来训练人脸模型,并将生成训练好的文件存储到“./resources/Trainer”文件夹下。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210311212504847.png#pic_center) ## 识别打卡 点击“识别打卡”按钮后调用摄像头,将读取的每一帧图片都转为灰度图,然后依旧使用opencv自带的haarcascade_frontalface人脸模型数据来截取出对应的人脸图片,然后使用LBP直方图LBPHFace的人脸识别器,读取训练好的人脸模型数据,跟每一帧人脸图片进行对比,给出相应的置信度,当同个人的人脸图片与某个人脸数据对比生成的置信度低于55且超过24张图片,则判定该摄像头读取的人脸是人脸数据模型里面的某个人脸,然后进行打卡操作,将其对应的学生信息显示到界面上,同时记录打卡。