国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python人臉識別考勤系統(tǒng) 考勤簽到系統(tǒng) OpenCV 大數(shù)據(jù) 畢業(yè)設計(源碼)?

這篇具有很好參考價值的文章主要介紹了python人臉識別考勤系統(tǒng) 考勤簽到系統(tǒng) OpenCV 大數(shù)據(jù) 畢業(yè)設計(源碼)?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

畢業(yè)設計:2023-2024年計算機專業(yè)畢業(yè)設計選題匯總(建議收藏)

畢業(yè)設計:2023-2024年最新最全計算機專業(yè)畢設選題推薦匯總

??感興趣的可以先收藏起來,點贊、關(guān)注不迷路,大家在畢設選題,項目以及論文編寫等相關(guān)問題都可以給我留言咨詢,希望幫助同學們順利畢業(yè)?。??

1、項目介紹

技術(shù)棧:
Python語言、dlib、OpenCV、Pyqt5界面設計、sqlite3數(shù)據(jù)庫

本系統(tǒng)使用dlib作為人臉識別工具,dlib提供一個方法可將人臉圖片數(shù)據(jù)映射到128維度的空間向量,如果兩張圖片來源于同一個人,那么兩個圖片所映射的空間向量距離就很近,否則就會很遠。因此,可以通過提取圖片并映射到128維空間向量再度量它們的歐氏距離是否足夠小來判定是否為同一個人。

2、項目界面

(1)攝像頭實時檢測識別
python人臉識別考勤系統(tǒng) 考勤簽到系統(tǒng) OpenCV 大數(shù)據(jù) 畢業(yè)設計(源碼)?,biyesheji0001,biyesheji0002,畢業(yè)設計,python,opencv,課程設計,深度學習,畢業(yè)設計,大數(shù)據(jù),人臉識別

(2)攝像頭識別考勤簽到

python人臉識別考勤系統(tǒng) 考勤簽到系統(tǒng) OpenCV 大數(shù)據(jù) 畢業(yè)設計(源碼)?,biyesheji0001,biyesheji0002,畢業(yè)設計,python,opencv,課程設計,深度學習,畢業(yè)設計,大數(shù)據(jù),人臉識別

(3)數(shù)據(jù)庫管理系統(tǒng)

python人臉識別考勤系統(tǒng) 考勤簽到系統(tǒng) OpenCV 大數(shù)據(jù) 畢業(yè)設計(源碼)?,biyesheji0001,biyesheji0002,畢業(yè)設計,python,opencv,課程設計,深度學習,畢業(yè)設計,大數(shù)據(jù),人臉識別

(4)考勤記錄

python人臉識別考勤系統(tǒng) 考勤簽到系統(tǒng) OpenCV 大數(shù)據(jù) 畢業(yè)設計(源碼)?,biyesheji0001,biyesheji0002,畢業(yè)設計,python,opencv,課程設計,深度學習,畢業(yè)設計,大數(shù)據(jù),人臉識別

3、項目說明

Python語言、dlib、OpenCV、Pyqt5界面設計、sqlite3數(shù)據(jù)庫

本系統(tǒng)使用dlib作為人臉識別工具,dlib提供一個方法可將人臉圖片數(shù)據(jù)映射到128維度的空間向量,如果兩張圖片來源于同一個人,那么兩個圖片所映射的空間向量距離就很近,否則就會很遠。因此,可以通過提取圖片并映射到128維空間向量再度量它們的歐氏距離是否足夠小來判定是否為同一個人。

方法實現(xiàn)、實現(xiàn)步驟
1、實例化人臉檢測模型、人臉關(guān)鍵點檢測模型、人臉識別模型
2、電腦攝像頭設備加載一對圖片
3、分別獲取圖片中的人臉圖片所映射的空間向量,即人臉特征值
4、計算特征向量歐氏距離,根據(jù)閾值判斷是否為同一個人

開發(fā)技術(shù)環(huán)境: Pycharm + Python3.7 + PyQt5 + OpenCV + 人臉特征模型
本系統(tǒng)先調(diào)取opencv攝像頭進行人臉信息拍照然后識別人臉特征數(shù)據(jù),并且錄入自己的學號姓名,將識別的人臉特征向量信息保存到人臉數(shù)據(jù)庫當中產(chǎn)生數(shù)據(jù)記錄,并且可以按照學號搜索人臉數(shù)據(jù)庫當中的學生信息,可以修改學生的姓名以及學號等,學生錄入進自己的人臉信息后可以進行人臉識別,人臉識別主要是調(diào)用opencv打開攝像頭拍攝自己的人臉然后調(diào)取人臉模型進行識別,將識別到的人臉特征向量和人臉庫中的特征向量匹配并計算出相似度,如果匹配相似度太低則提示不存在請您先錄入人臉信息,匹配度達到百分七十以及八十以上則匹配出數(shù)據(jù)庫里面對應的學生考勤,并且形成考勤識別記錄,這個考勤記錄也是可以搜索修改和刪除的。

4、核心代碼


from view.checkinrecord  import*
from view.checkinmodify import *
from PyQt5.QtWidgets import QWidget,QMessageBox,QAbstractItemView,QTableWidgetItem,QLabel,QDialog
from model.connectsqlite import ConnectSqlite
import model.configuration
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class CheckInRecord(QWidget, Ui_CheckInRecordForm):

    def __init__(self, parent=None):
        super(CheckInRecord, self).__init__(parent)
        self.setupUi(self)
        # sqlite3 connect
        self.dbcon = ConnectSqlite(model.configuration.DATABASE_PATH)
        self.checkin_data = []
        self.pushButton_search.clicked.connect(self.search)
        self.pushButton_modify.clicked.connect(self.modify)
        self.pushButton_delete.clicked.connect(self.delete)
        self.make_table()

    #search
    def search(self):
        print("search")
        search_str = self.lineEdit_search.text()
        # 如果搜索框有數(shù)據(jù)
        row = 0
        search_result = None
        if search_str != '':
            # 遍歷列表并查找
            for i in self.checkin_data:
                if search_str.lower() in str(i[1]).lower():
                    search_result = str(i[1])
                    # 設置目標行
                    self.tableWidget.setCurrentIndex(self.tableWidget.model().index(row,1))
                if search_str.lower() in str(i[0]).lower():
                    search_result = str(i[0])
                    # 設置目標行
                    self.tableWidget.setCurrentIndex(self.tableWidget.model().index(row, 0))
                if search_str.lower() in str(i[2]).lower():
                    search_result = str(i[2])
                    # 設置目標行
                    self.tableWidget.setCurrentIndex(self.tableWidget.model().index(row, 2))
                row += 1
            if search_result == 0:
                reply = QMessageBox.warning(self, 'Error', 'No relevant information was found!',
                                            QMessageBox.Yes, QMessageBox.Yes)
        # 若搜索框沒有數(shù)據(jù),對話框提示
        else:
            reply = QMessageBox.warning(self, 'Error', 'Please input the search keywords',
                                        QMessageBox.Yes, QMessageBox.Yes)
    # modify
    def modify(self):
        select = self.tableWidget.selectedItems()
        if len(select) != 0:
            row = self.tableWidget.selectedItems()[0].row()  # 獲取選中文本所在的行
            column = self.tableWidget.selectedItems()[0].column()
            print(row,column)
            name = str(self.checkin_data[row][1])
            sid = str(self.checkin_data[row][0])

            checkin_time = str(self.checkin_data[row][2])
            id = self.checkin_data[row][-1]
            insert_list = [name,sid,checkin_time]
            dialog = CheckInModify(insert_list)
            dialog.exec_()
            modify_list = dialog.getInputs()
            modify_flag = modify_list[1]
            print("iddddd{}".format(id))
            result = self.dbcon.update_checkin_table(modify_list[0],id)
            if modify_flag:
                if result == 0:
                    self.make_table()
                    reply = QMessageBox.information(self, 'Success', 'Modify succeed!',
                                                QMessageBox.Yes, QMessageBox.Yes)
                else:
                    reply = QMessageBox.warning(self, 'Error', result,
                                                QMessageBox.Yes, QMessageBox.Yes)

        else:
            reply = QMessageBox.warning(self, 'Error', 'Please select the Record need to modify!',
                                        QMessageBox.Yes, QMessageBox.Yes)
    #delete
    def delete(self):
        select = self.tableWidget.selectedItems()
        if len(select) != 0:
            row = self.tableWidget.selectedItems()[0].row()  # 獲取選中文本所在的行
            column = self.tableWidget.selectedItems()[0].column()
            id = self.checkin_data[row][-1]
            result = self.dbcon.delete_checkin_table(id)
            if result == 0:
                self.make_table()
                reply = QMessageBox.information(self, 'Success', 'Delete succeed!',
                                                QMessageBox.Yes, QMessageBox.Yes)
            else:
                reply = QMessageBox.warning(self, 'Error', result,
                                            QMessageBox.Yes, QMessageBox.Yes)

        else:
            reply = QMessageBox.warning(self, 'Error', 'Please select the data need to delete!',
                                        QMessageBox.Yes, QMessageBox.Yes)
    # show  database the table
    def make_table(self):
        #clear the table
        self.tableWidget.clear()

        self.checkin_data = self.dbcon.return_all_checkin_record()
        data_show = []
        for row in self.checkin_data:
            name = row[1]
            student_id = str(row[0])
            checkin_time = row[2].split(".")[0]
            data_show.append([name,student_id,checkin_time])


        self.RowLength = 0
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setColumnWidth(0, 220)  # 設置1列的寬度
        self.tableWidget.setColumnWidth(1, 220)  # 設置2列的寬度
        self.tableWidget.setColumnWidth(2, 300)  # 設置3列的寬度


        self.tableWidget.setHorizontalHeaderLabels(["姓名", "學號","進入時間"])
        self.tableWidget.setRowCount(self.RowLength)
        self.tableWidget.verticalHeader().setVisible(False)  # 隱藏垂直表頭)
        self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.tableWidget.raise_()

        for row_data in data_show:
            # 顯示表格
            self.RowLength = self.RowLength + 1
            label = QLabel()
            self.tableWidget.verticalHeader().setDefaultSectionSize(40)
            self.tableWidget.setRowCount(self.RowLength)
            self.tableWidget.setItem(self.RowLength - 1, 0, QTableWidgetItem(row_data[0]))
            self.tableWidget.setItem(self.RowLength - 1, 1, QTableWidgetItem(row_data[1]))
            self.tableWidget.setItem(self.RowLength - 1, 2, QTableWidgetItem(row_data[2]))  # str(result['Loc'])

            #self.tableWidget.setItem(self.RowLength - 1, 6, QTableWidgetItem(row_data[6]))

            self.tableWidget.item(self.RowLength - 1, 0).setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
            self.tableWidget.item(self.RowLength - 1, 1).setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
            self.tableWidget.item(self.RowLength - 1, 2).setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
            #self.tableWidget.item(self.RowLength - 1, 6).setTextAlignment(Qt.AlignHCenter | Qt.AlignVCenter)
    #close
    def close_all(self):
        self.close()
## Check-in Record Modify Dialog
class CheckInModify(QDialog, Ui_Dialog):

    def __init__(self,current_list,parent=None):
        super(CheckInModify, self).__init__(parent)
        self.setupUi(self)
        self.name = current_list[0]
        self.sid = current_list[1]
        self.checkin_time = current_list[2]
        self.lineEdit_sno.setText(self.sid)
        self.lineEdit_name.setText(self.name)
        print(self.checkin_time)
        self.modify_flag = False
        time1 = int(self.checkin_time.split(' ')[1].split(':')[0])
        time2 = int(self.checkin_time.split(' ')[1].split(':')[1])
        time1_format = str('{:0>2d}'.format(time1))
        time2_format = str('{:0>2d}'.format(time2))
        self.timeEdit_checkin.setTime(QTime.fromString(time1_format + ':' + time2_format))
        self.pushButton_add.clicked.connect(self.modify_return)


    def modify_return(self):

            self.modify_flag = True
            self.close()
    def getInputs(self):
        name = self.lineEdit_name.text()
        sid = self.lineEdit_sno.text()

        checkin_time = self.checkin_time.split(' ')[0] + " " + self.timeEdit_checkin.text()
        return [[name,sid,checkin_time],self.modify_flag]

5、源碼獲取方式

??由于篇幅限制,獲取完整文章或源碼、代做項目的,查看我的【用戶名】、【專欄名稱】、【頂部選題鏈接】就可以找到我啦??

感興趣的可以先收藏起來,點贊、關(guān)注不迷路,下方查看????獲取聯(lián)系方式????文章來源地址http://www.zghlxwxcb.cn/news/detail-825538.html

到了這里,關(guān)于python人臉識別考勤系統(tǒng) 考勤簽到系統(tǒng) OpenCV 大數(shù)據(jù) 畢業(yè)設計(源碼)?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包