手把手教你:人臉識別考勤系統


系列文章

手把手教你:人臉識別考勤系統


本文為系列第一篇

@


項目簡介

本文主要介紹如何使用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()

因為項目中啟動人臉識別存在一定延遲,所以項目中還使用了多線程。

完整代碼地址

感興趣的同學可以下載完整代碼,使用過程中如遇到任何問題可以私信我,我都會一一解答。

【代碼分享】手把手教你:人臉識別考勤系統


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM