Python+Qt face recognition access control management system

Featured program examples

Python+Qt face recognition access control management system

If you need to install the operating environment or remote debugging, see the personal QQ business card at the bottom of the article, and professional and technical personnel will assist remotely!

foreword

This blog writes code for <<Python+Qt face recognition access control management system>>, the code is neat, regular and easy to read. The first choice for learning and application recommendation.


Article directory

1. Required tool software

2. Use steps

        1. Import library

        2. Code implementation

       3. Running results

3. Online assistance

1. Required tool software

1. Python

2. Qt, OpenCV

2. Use steps

1. Import library

## coding:utf-8
import sys
import os
import csv
import cv2
from untitled import Ui_mainWindow
import record
import name
from dbase import Record2
from PyQt5 import QtWidgets

from PyQt5 import QtWidgets, QtCore, QtGui
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import QPixmap,QPainter

2. Code implementation

code show as below:

class myWin(QtWidgets.QMainWindow, Ui_mainWindow):

    def __init__(self):
        super(myWin, self).__init__()
        self.setupUi(self)

        self.pushButton_4.clicked.connect(self.onVideo) #
        self.open_flag = False  #
        self.painter = QPainter(self)  #

        self.pushButton.clicked.connect(self.openFileButton)
        self.pushButton_2.clicked.connect(self.open_name_ui)
        self.pushButton_7.clicked.connect(self.train)
        #self.pushButton_6.clicked.connect(self.faceRecog)
        self.pushButton_3.clicked.connect(self.open_second_ui)

        self.pushButton_5.clicked.connect(self.threadRun)
        self.pushButton_6.clicked.connect(self.switch_video)
        self.timer2 = VideoTimer()
        self.timer2.timeSignal.signal[str].connect(self.videoRecog2)

        self.pushButton_8.clicked.connect(self.recogConform)
        self.pushButton.hide()
        self.pushButton_4.hide()


    def threadRun(self):
        # thread1.start()
        if self.pushButton_5.text() == "模型初始化thread":
            threadSetup()
            # thread1.start()
            self.pushButton_5.setText("停止模型thread")

        elif self.pushButton_5.text() == "停止模型thread":
            # stop_thread(thread1)
            # stop_thread(threadT)
            threadStop()
            print("tttt6")
            self.pushButton_5.setText("模型初始化thread")


    # # 退出系统窗口 X 绑定函数事件
    def closeEvent(self, event):
        # print("test")
        self.box = QMessageBox(QMessageBox.Warning, "系统提示信息", "是否退出系统?")
        qyes = self.box.addButton(self.tr("是"), QMessageBox.YesRole)
        qno = self.box.addButton(self.tr("否"), QMessageBox.NoRole)
        self.box.exec_()
        if self.box.clickedButton() == qyes:
            try:
                threadStop()
            except:
                print("abnormal")
            event.accept()
            QtWidgets.QWidget.closeEvent(self, event)
            sys.exit().accept()
        else:
            event.ignore()

    def switch_video(self):
        # self.timer2.start()
        if self.pushButton_6.text() == "开始检测":
            self.timer2.start()
            print("tttt6")
            self.pushButton_6.setText("暂停检测")
        elif self.pushButton_6.text() == "暂停检测":
            self.timer2.stop()
            print("tttt6")
            self.pushButton_6.setText("开始检测")

    def videoRecog2(self):

        # print("im02: ",im02)
        import cv2
        import numpy as np
        count = 0
        recognizer = cv2.face.LBPHFaceRecognizer_create()
        recognizer.read('face_trainer/trainer.yml')
        cascadePath = "haarcascade_frontalface_default.xml"
        faceCascade = cv2.CascadeClassifier(cascadePath)
        font = cv2.FONT_HERSHEY_SIMPLEX
        print("11")



        gray = cv2.cvtColor(im02, cv2.COLOR_BGR2GRAY)
        faces = faceCascade.detectMultiScale(
            gray,
            scaleFactor=1.2,
            minNeighbors=5,

        )

        if len(faces) == 0:
            print("len(faces)", len(faces))

            frame = cv2.cvtColor(im02, cv2.COLOR_BGR2RGB)
            height, width, bytesPerComponent = frame.shape
            bytesPerLine = bytesPerComponent * width

            self.q_image = QtGui.QImage(frame.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888).scaled(self.label.height() * 1.5, self.label.height())
            self.label.setPixmap(QPixmap.fromImage(self.q_image))
            self.update()  # 

        if len(faces) == 1:
            for (x, y, w, h) in faces:
                idnum, confidence = recognizer.predict(gray[y:y + h, x:x + w])
                print("confidence", confidence)
                print("idnum", idnum)


                # cv2.putText(img, str(username), (x + 5, y - 5), font, 1, (0, 0, 255), 1)
                confidence2 = round(160 - confidence)
                if confidence2 > 80:
                    cv2.rectangle(im02, (x, y), (x + w, y + h), (0, 255, 0), 3)
                    cv2.putText(im02, str(confidence2) + "%", (x + 5, y + h - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                                (37, 46, 6), 1)

                if confidence2 <= 80:
                    cv2.rectangle(im02, (x, y), (x + w, y + h), (255, 0, 0), 3)
                    cv2.putText(im02, "unknow", (x + 5, y + h - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                                (37, 46, 6), 1)

                frame = cv2.cvtColor(im02, cv2.COLOR_BGR2RGB)
                height, width, bytesPerComponent = frame.shape
                bytesPerLine = bytesPerComponent * width

                self.q_image = QtGui.QImage(frame.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888) \
                    .scaled(self.label.height() * 1.5, self.label.height())
                self.label.setPixmap(QPixmap.fromImage(self.q_image))
                self.update()  # 

            if confidence2 > 80:
                print("confidence2", confidence2)
                global usernamedb
                global chinese_name
                global idnumberNum


                import dbase
                import sqlite3
                import datetime
                from datetime import datetime
                conn = sqlite3.connect("recordinfo.db", check_same_thread=False)
                curr = conn.cursor()
                curr.execute("select idnumber from name_table")
                # curr.execute('insert into name_table values (null, ?)', [name])
                results = curr.fetchall()
                name_list = []
                for i in results:
                    i = list(i)
                    name_list += i
                print("name_list", name_list)
                print("idnum", idnum)
                usernamedb = name_list[idnum]
                print("usernamedb", usernamedb)

                curr.execute("select chinese_name from name_table")
                results2 = curr.fetchall()
                name_list2 = []
                for i in results2:
                    i = list(i)
                    name_list2 += i
                print(name_list2)
                CHusernamedb = name_list2[idnum]
                print("CHusernamedb", CHusernamedb)
                chinese_name = CHusernamedb
                result = 'Ok'

                curr.execute("select idnumber from name_table")
                results3 = curr.fetchall()
                name_list3 = []
                for i in results3:
                    i = list(i)
                    name_list3 += i
                print(name_list3)
                idnumber = name_list3[idnum]
                print("idnumber", idnumber)
                idnumberNum = idnumber

                # curr.execute('insert into record_table values (null, ?, ?, ?,?,?)',
                #              (usernamedb, datetime.now(), chinese_name, 'Ok', idnumberNum))
                conn.commit()
                conn.rollback()
                curr.close()
                conn.close()

                self.textEdit.setPlainText("姓名" + ' ' + chinese_name + ' ' + "识别成功,门已打开")

                #self.recogConform() #模拟开门暂时不保存识别数据到数据库,以免人没离开摄像头重复保存多的数据到数据库,暂时用界面上识别手动确认保存识别信息到数据库

                # msg_box = QMessageBox(QMessageBox.Warning, '信息', '人脸识别成功')
                # msg_box.exec_()




        # frame = cv2.cvtColor(im02, cv2.COLOR_BGR2RGB)
        # height, width, bytesPerComponent = frame.shape
        # bytesPerLine = bytesPerComponent * width
        #
        # self.q_image = QtGui.QImage(frame.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888) \
        #     .scaled(self.label.height() * 0.8, self.label.height() * 0.6)
        # self.label.setPixmap(QPixmap.fromImage(self.q_image))
        # self.update()

    def recogConform(self):
        global usernamedb
        global chinese_name
        global idnumberNum

        import dbase
        import sqlite3
        import datetime
        from datetime import datetime
        conn = sqlite3.connect("recordinfo.db", check_same_thread=False)
        curr = conn.cursor()
        curr.execute('insert into record_table values (null, ?, ?, ?,?,?)',
                     (usernamedb, datetime.now(), chinese_name, 'Ok', idnumberNum))

        conn.commit()
        conn.rollback()
        curr.close()
        conn.close()

        self.textEdit.append("识别保存成功")

        # msg_box = QMessageBox(QMessageBox.Warning, '信息', '识别保存成功')
        # msg_box.exec_()

    def openFileButton(self):
        #imgName, imgType  = QFileDialog.getOpenFileName(self,"打开文件","./","files(*.*)")
        self.cap = cv2.VideoCapture(0)
        self.pushButton_4.clicked.connect(self.onVideo) #
        self.open_flag = True  #
        self.painter = QPainter(self)  #
    def onVideo(self):
        print("self.open_flag: ", self.open_flag)
        if self.open_flag:
            self.pushButton_4.setText('Open')
            print("change1")
        else:
            self.pushButton_4.setText('Close')
            print("change2")
        self.open_flag = bool(1-self.open_flag)
        print("change3")

3. Running results

 

3. Online assistance:

If you need to install the operating environment or remote debugging, see the personal QQ business card at the bottom of the article, and professional and technical personnel will assist remotely!
1) Remote installation and operation environment, code debugging
2) Qt, C++, Python entry guide
3) Interface beautification
4) Software production

Blogger recommended article: python face recognition statistics qt form - CSDN Blog

Blogger recommended article: Python Yolov5 flame smoke recognition source code sharing - CSDN blog

                         Python OpenCV recognizes the number of people entering and exiting the pedestrian entrance - python recognizes the number of people - CSDN Blog

Personal blog homepage: alicema1111's blog_CSDN blog-Python, C++, bloggers in the field of web pages

Click here for all the blogger's articles: alicema1111's blog_CSDN blog-Python, C++, bloggers in the field of web pages

Guess you like

Origin blog.csdn.net/alicema1111/article/details/130353433
Recommended