原文地址
手把手教你:人脸识别考勤系统
项目简介
本文主要介绍如何使用python搭建:一个基于FaceNet(TensorFlow版)和PyQt5的人脸识别的考勤系统。
博主也参考过网上其他博主介绍FaceNet的文章,但大多是理论大于方法。很多同学肯定对原理不需要过多了解,只需要搭建出一个识别系统即可。
本文只会告诉你如何快速搭建一个人脸识别的考勤系统并运行,原理的东西可以参考其他博主。
也正是因为我发现网上大多的帖子只是针对原理进行介绍,功能实现的相对很少。
如果您有以上想法,那就找对地方了!
提示:以下是本篇文章正文内容
一、项目展示
项目演示可以参考我在B站发的视频:
手把手教你搭建:人脸识别考勤系统
二、环境需求
因为本项目基于TensorFlow因此需要以下环境:
- tensorflow==1.7
- scipy
- scikit-learn
- opencv-python
- h5py
- matplotlib
- Pillow
- requests
- psutil
- pyqt5
环境安装实例
环境都可以通过pip进行安装。如果只是想要功能跑起来,这边建议tensorflow安装cpu版的。
如果没使用过pycharm通过pip安装包的同学可以参考如下:
点开“终端”,然后通过pip进行安装tensorflow,其他环境包也可以通过上面的方法安装。
三、功能模块介绍
1.人脸库图像
人脸库图像放在项目中:data/my_data/“人名”/“图片名”.jpg。
我这里只用了4个明星的人脸图像,可以根据你自己需要识别的人脸构建你自己的人脸库。
如下:
2.构建人脸库
将图片放好后
执行:src/align/align_dataset_mtcnn.py文件
和:src/classifier.py文件
执行上述2个文件完成后。
在:data/my_data_160文件夹中会生成自己的人脸库图像。
在:20170512-110547/my_classifier.pkl中会生成自己的人脸库图像分类。
3.启动人脸识别功能
确保上述文件执行完成并成功后。
执行:contributed/my_view.py,即可启动上面的人脸识别界面。
下面附一部分界面功能代码:
class GUI(QtWidgets.QWidget):
def __init__(self):
# 初始化————init__
super().__init__()
# 实例化人脸识别线程
self.thread = Thread()
self.initGUI()
# 定义消息链接
self.thread.signal.connect(self.show_success_box)
def initGUI(self):
# 设置窗口大小
self.resize(500, 600)
# 设置窗口位置(下面配置的是居于屏幕中间)
qr = self.frameGeometry()
cp = QtWidgets.QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
# 设置窗口标题和图标
self.setWindowTitle('人脸识别门禁系统')
self.setWindowIcon(QtGui.QIcon('../data/images/icon.png'))
# 设置窗口提示
self.setToolTip('窗口提示')
# 设置label信息
self.label = QtWidgets.QLabel(self)
self.label.setGeometry(QtCore.QRect(150, 50, 200, 100))
self.label.setText('请点击下方按钮进行人脸认证!')
# 设置自动换行
self.label.setWordWrap(True)
# 设置文字居中
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName('label')
self.label.setStyleSheet("font: 75 18pt \"微软雅黑\";"
"color: rgb(0, 0, 0);")
# 设置label提示
self.label.setToolTip('认证')
'''
设置打卡按钮
'''
self.btn = QtWidgets.QPushButton('开始认证!', self)
self.btn.resize(200, 180)
self.btn.move(150, 150)
# 设置按钮样式
self.btn.setStyleSheet("background-color: rgb(130, 60, 140);"
"border-color: rgb(255, 255, 255);"
"font: 75 24pt \"微软雅黑\";"
"color: rgb(255, 255, 255);")
# 设置按钮提示
self.btn.setToolTip('按钮提示')
# 点击鼠标触发事件
self.btn.clicked.connect(self.clickbtn)
'''
设置统计查看按钮
'''
self.btn_checked = QtWidgets.QPushButton('查看通过信息', self)
self.btn_checked.resize(200, 50)
self.btn_checked.move(150, 380)
# 设置按钮样式
self.btn_checked.setStyleSheet("background-color: rgb(130, 60, 140);"
"border-color: rgb(255, 255, 255);"
"font: 75 18pt \"微软雅黑\";"
"color: rgb(255, 255, 255);")
# 设置按钮提示
self.btn_checked.setToolTip('按钮提示')
# 点击鼠标触发事件
self.btn_checked.clicked.connect(self.checked_show)
'''
设置统计查看按钮
'''
self.btn_file = QtWidgets.QPushButton('查看通过文件', self)
self.btn_file.resize(200, 50)
self.btn_file.move(150, 480)
# 设置按钮样式
self.btn_file.setStyleSheet("background-color: rgb(130, 60, 140);"
"border-color: rgb(255, 255, 255);"
"font: 75 18pt \"微软雅黑\";"
"color: rgb(255, 255, 255);")
# 设置按钮提示
self.btn_file.setToolTip('按钮提示')
# 点击鼠标触发事件
self.btn_file.clicked.connect(self.csv_show)
# 展示窗口
self.show()
因为项目中启动人脸识别存在一定延迟,所以项目中还使用了多线程。
完整代码地址
感兴趣的同学可以下载完整代码,使用过程中如遇到任何问题可以私信我,我都会一一解答。
【代码分享】手把手教你:人脸识别考勤系统