最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+OpenCV人臉識別簽到考勤系統(tǒng)實(shí)現(xiàn)(附demo)

 更新時(shí)間:2022年04月25日 09:08:56   作者:BIGBOSSyifi  
本文主要介紹了Python+OpenCV人臉識別簽到考勤系統(tǒng)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

本項(xiàng)目為IOT實(shí)驗(yàn)室人員簽到考勤設(shè)計(jì),系統(tǒng)實(shí)現(xiàn)功能:
1.人員人臉識別并完成簽到/簽退
2.考勤時(shí)間計(jì)算
3.保存考勤數(shù)據(jù)為CSV格式(Excel表格)

PS:本系統(tǒng)2D人臉識別,節(jié)約了繁瑣的人臉識別訓(xùn)練部分,簡潔快捷

該項(xiàng)目為測試版,正式版會加入更多的功能,持續(xù)更新中…
測試版項(xiàng)目地址我會放到結(jié)尾

項(xiàng)目效果圖

系統(tǒng)初始化登陸界面

在這里插入圖片描述

主界面展示圖:

在這里插入圖片描述

簽到功能展示

在這里插入圖片描述

在這里插入圖片描述

簽退功能展示

在這里插入圖片描述

后臺簽到數(shù)據(jù)記錄

在這里插入圖片描述

是否簽到/退判斷

在這里插入圖片描述

項(xiàng)目需要的環(huán)境

核心環(huán)境:

  • OpenCV-Python 4.5.5.64
  • face_recognition 1.30
  • face_recognition_model 0.3.0
  • dlib 19.23.1

UI窗體界面:

  • PyQt5 5.15.4
  • pyqt5-plugins 5.15.4.2.2
  • PyQt5-Qt5 5.15.2
  • PyQt5-sip 12.10.1
  • pyqt5-tools 5.15.4.3.2

編譯器

Pycham 2021.1.3

在這里插入圖片描述

Python版本 3.9.12

在這里插入圖片描述

Anaconda

在這里插入圖片描述

輔助開發(fā)QT-designer

在這里插入圖片描述

在這里插入圖片描述

項(xiàng)目配置

在這里插入圖片描述

代碼部分

核心代碼

MainWindow.py
UI文件加載:

class Ui_Dialog(QDialog):
    def __init__(self):
        super(Ui_Dialog, self).__init__()
        loadUi("mainwindow.ui", self)       #加載QTUI文件

        self.runButton.clicked.connect(self.runSlot)

        self._new_window = None
        self.Videocapture_ = None

攝像頭調(diào)用:

    def refreshAll(self):
        print("當(dāng)前調(diào)用人倆檢測攝像頭編號(0為筆記本內(nèi)置攝像頭,1為USB外置攝像頭):")
        self.Videocapture_ = "0"

OutWindow.py
獲取當(dāng)前系統(tǒng)時(shí)間

class Ui_OutputDialog(QDialog):
    def __init__(self):
        super(Ui_OutputDialog, self).__init__()
        loadUi("./outputwindow.ui", self)   #加載輸出窗體UI

        #datetime 時(shí)間模塊
        now = QDate.currentDate()
        current_date = now.toString('ddd dd MMMM yyyy')  #時(shí)間格式
        current_time = datetime.datetime.now().strftime("%I:%M %p")
        self.Date_Label.setText(current_date)
        self.Time_Label.setText(current_time)

        self.image = None

簽到時(shí)間計(jì)算

    def ElapseList(self,name):
        with open('Attendance.csv', "r") as csv_file:
            csv_reader = csv.reader(csv_file, delimiter=',')
            line_count = 2

            Time1 = datetime.datetime.now()
            Time2 = datetime.datetime.now()
            for row in csv_reader:
                for field in row:
                    if field in row:
                        if field == 'Clock In':
                            if row[0] == name:
                                Time1 = (datetime.datetime.strptime(row[1], '%y/%m/%d %H:%M:%S'))
                                self.TimeList1.append(Time1)
                        if field == 'Clock Out':
                            if row[0] == name:
                                Time2 = (datetime.datetime.strptime(row[1], '%y/%m/%d %H:%M:%S'))
                                self.TimeList2.append(Time2)

人臉識別部分

# 人臉識別部分
        faces_cur_frame = face_recognition.face_locations(frame)
        encodes_cur_frame = face_recognition.face_encodings(frame, faces_cur_frame)

        for encodeFace, faceLoc in zip(encodes_cur_frame, faces_cur_frame):
            match = face_recognition.compare_faces(encode_list_known, encodeFace, tolerance=0.50)
            face_dis = face_recognition.face_distance(encode_list_known, encodeFace)
            name = "unknown"    #未知人臉識別為unknown
            best_match_index = np.argmin(face_dis)
            if match[best_match_index]:
                name = class_names[best_match_index].upper()
                y1, x2, y2, x1 = faceLoc
                cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
                cv2.rectangle(frame, (x1, y2 - 20), (x2, y2), (0, 255, 0), cv2.FILLED)
                cv2.putText(frame, name, (x1 + 6, y2 - 6), cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 255, 255), 1)
            mark_attendance(name)

        return frame

簽到數(shù)據(jù)保存與判斷

# csv表格保存數(shù)據(jù)
        def mark_attendance(name):
            """
            :param name: 人臉識別部分
            :return:
            """
            if self.ClockInButton.isChecked():
                self.ClockInButton.setEnabled(False)
                with open('Attendance.csv', 'a') as f:
                        if (name != 'unknown'):         #簽到判斷:是否為已經(jīng)識別人臉
                            buttonReply = QMessageBox.question(self, '歡迎 ' + name, '開始簽到' ,
                                                               QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                            if buttonReply == QMessageBox.Yes:

                                date_time_string = datetime.datetime.now().strftime("%y/%m/%d %H:%M:%S")
                                f.writelines(f'\n{name},{date_time_string},Clock In')
                                self.ClockInButton.setChecked(False)

                                self.NameLabel.setText(name)
                                self.StatusLabel.setText('簽到')
                                self.HoursLabel.setText('開始簽到計(jì)時(shí)中')
                                self.MinLabel.setText('')

                                self.Time1 = datetime.datetime.now()
                                self.ClockInButton.setEnabled(True)
                            else:
                                print('簽到操作失敗')
                                self.ClockInButton.setEnabled(True)
            elif self.ClockOutButton.isChecked():
                self.ClockOutButton.setEnabled(False)
                with open('Attendance.csv', 'a') as f:
                        if (name != 'unknown'):
                            buttonReply = QMessageBox.question(self, '嗨呀 ' + name, '確認(rèn)簽退?',
                                                              QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
                            if buttonReply == QMessageBox.Yes:
                                date_time_string = datetime.datetime.now().strftime("%y/%m/%d %H:%M:%S")
                                f.writelines(f'\n{name},{date_time_string},Clock Out')
                                self.ClockOutButton.setChecked(False)

                                self.NameLabel.setText(name)
                                self.StatusLabel.setText('簽退')
                                self.Time2 = datetime.datetime.now()

                                self.ElapseList(name)
                                self.TimeList2.append(datetime.datetime.now())
                                CheckInTime = self.TimeList1[-1]
                                CheckOutTime = self.TimeList2[-1]
                                self.ElapseHours = (CheckOutTime - CheckInTime)
                                self.MinLabel.setText("{:.0f}".format(abs(self.ElapseHours.total_seconds() / 60)%60) + 'm')
                                self.HoursLabel.setText("{:.0f}".format(abs(self.ElapseHours.total_seconds() / 60**2)) + 'h')
                                self.ClockOutButton.setEnabled(True)
                            else:
                                print('簽退操作失敗')
                                self.ClockOutButton.setEnabled(True)

項(xiàng)目目錄結(jié)構(gòu)

在這里插入圖片描述

后記

因?yàn)楸鞠到y(tǒng)沒有進(jìn)行人臉訓(xùn)練建立模型,系統(tǒng)誤識別率較高,安全性較低
系統(tǒng)優(yōu)化較差,攝像頭捕捉幀數(shù)較低(8-9),后臺占有高,CPU利用率較高
數(shù)據(jù)保存CSV格式,安全性較低

正式版改進(jìn)

1.加入TensorFlow深度學(xué)習(xí),提高系統(tǒng)人臉識別安全性與準(zhǔn)確性
2.加入MySQL數(shù)據(jù)庫,對簽到數(shù)據(jù)進(jìn)行更安全保護(hù),不易被修改
3.美化優(yōu)化UI設(shè)計(jì)

項(xiàng)目下載

IOT人臉識別簽到系統(tǒng)測試版V0.99

到此這篇關(guān)于Python+OpenCV人臉識別簽到考勤系統(tǒng)實(shí)現(xiàn)(新手入門)的文章就介紹到這了,更多相關(guān)Python OpenCV人臉識別簽到內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python神器之Pampy模式匹配庫的用法詳解

    Python神器之Pampy模式匹配庫的用法詳解

    Pampy是Python的一個(gè)模式匹配類庫,一個(gè)只有150行的類庫,該庫優(yōu)雅、高效值得廣大Python的碼農(nóng)加入自己基本開發(fā)棧中。本文就來講講Pampy的用法,需要的可以參考一下
    2022-07-07
  • 詳談python read readline readlines的區(qū)別

    詳談python read readline readlines的區(qū)別

    下面小編就為大家?guī)硪黄斦刾ython read readline readlines的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • 基于python + django + whoosh + jieba 分詞器實(shí)現(xiàn)站內(nèi)檢索功能

    基于python + django + whoosh + jieba 分詞器實(shí)現(xiàn)站內(nèi)檢索功能

    這篇文章主要介紹了基于python + django + whoosh + jieba 分詞器實(shí)現(xiàn)站內(nèi)檢索功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-08-08
  • 圖文詳解感知機(jī)算法原理及Python實(shí)現(xiàn)

    圖文詳解感知機(jī)算法原理及Python實(shí)現(xiàn)

    感知機(jī)是二類分類的線性分類模型,其輸入為實(shí)例的特征向量,輸出為實(shí)例的類別(取+1和-1二值)。本文將為大家詳細(xì)講講感知機(jī)算法的原理及實(shí)現(xiàn),需要的可以參考一下
    2022-08-08
  • python獲取目錄下所有文件的方法

    python獲取目錄下所有文件的方法

    這篇文章主要介紹了python獲取目錄下所有文件的方法,實(shí)例分析了Python中os模塊下walk方法的使用技巧,需要的朋友可以參考下
    2015-06-06
  • 解決nohup重定向python輸出到文件不成功的問題

    解決nohup重定向python輸出到文件不成功的問題

    今天小編就為大家分享一篇解決nohup重定向python輸出到文件不成功的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • ?python中的元類metaclass詳情

    ?python中的元類metaclass詳情

    這篇文章主要介紹了python中的metaclass詳情,在python中的metaclass就是幫助developer實(shí)現(xiàn)元編程,更多詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-05-05
  • Python selenium的安裝和下載谷歌瀏覽器鏡像驅(qū)動

    Python selenium的安裝和下載谷歌瀏覽器鏡像驅(qū)動

    Selenium是一個(gè)用于web自動化測試的框架,在使用Ajax請求數(shù)據(jù)的頁面中,會出現(xiàn) sign ,token等密鑰,借助使用Selenium框架來實(shí)現(xiàn)數(shù)據(jù)爬取很不錯(cuò),本文給大家介紹Python selenium的安裝和下載谷歌瀏覽器鏡像驅(qū)動,需要的朋友可以參考下
    2022-11-11
  • Opencv判斷顏色相似的圖片示例代碼

    Opencv判斷顏色相似的圖片示例代碼

    這篇文章主要介紹了Opencv判斷顏色相似的圖片示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python中unittest框架應(yīng)用詳解

    python中unittest框架應(yīng)用詳解

    這篇文章主要介紹了Python中Unittest框架的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-09-09

最新評論

安仁县| 宿州市| 灵武市| 绥化市| 昌吉市| 江口县| 宁海县| 项城市| 徐闻县| 西乡县| 长沙县| 阳谷县| 阿尔山市| 正蓝旗| 盐亭县| 清徐县| 云霄县| 田林县| 无为县| 淮阳县| 大丰市| 高淳县| 淅川县| 彭泽县| 安远县| 茂名市| 大厂| 澎湖县| 根河市| 乳源| 白城市| 合山市| 闵行区| 安远县| 信阳市| 长沙市| 商南县| 桦甸市| 如皋市| 铁岭市| 包头市|