系列文章
手把手教你:人臉識別考勤系統
本文為系列第一篇
@
項目簡介
本文主要介紹如何使用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()
因為項目中啟動人臉識別存在一定延遲,所以項目中還使用了多線程。
完整代碼地址
感興趣的同學可以下載完整代碼,使用過程中如遇到任何問題可以私信我,我都會一一解答。