Python+Qt人脸识别门禁管理系统

这篇具有很好参考价值的文章主要介绍了Python+Qt人脸识别门禁管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

程序示例精选

Python+Qt人脸识别门禁管理系统

如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助!

前言

这篇博客针对<<Python+Qt人脸识别门禁管理系统>>编写代码,代码整洁,规则,易读。 学习与应用推荐首选。


文章目录

一、所需工具软件

二、使用步骤

        1. 引入库

        2. 代码实现

       3. 运行结果

三、在线协助

一、所需工具软件

1. Python

2. Qt, OpenCV

二、使用步骤

1.引入库

## 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. 代码实现

代码如下:

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. 运行结果

Python+Qt人脸识别门禁管理系统

 

三、在线协助:

如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Qt, C++, Python入门指导
3)界面美化
4)软件制作

博主推荐文章:python人脸识别统计人数qt窗体-CSDN博客

博主推荐文章:Python Yolov5火焰烟雾识别源码分享-CSDN博客

                         Python OpenCV识别行人入口进出人数统计_python识别人数-CSDN博客

个人博客主页:alicema1111的博客_CSDN博客-Python,C++,网页领域博主

博主所有文章点这里:alicema1111的博客_CSDN博客-Python,C++,网页领域博主文章来源地址https://www.toymoban.com/news/detail-424761.html

到了这里,关于Python+Qt人脸识别门禁管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Qt、PYTHON智能校园防御系统应用程序,实现了摄像头数据采集、人脸识别、口罩识别、 数据统计等功能

    完整项目地址:https://download.csdn.net/download/lijunhcn/88453470 项目结构 环境选型 语言:Python 操作系统:Windows 数据库:MySQL 窗口界面:PyQT API接口:百度AI接口,用以实现人脸登陆与注册 远程MySQL表结构 远程表结构sql脚本 项目背景 智能校园防御软件是实现了一款基于摄像头数据

    2024年02月03日
    浏览(42)
  • 毕设项目——基于Qt、PYTHON智能校园防御系统应用程序,实现了摄像头数据采集、人脸识别、口罩识别、 数据统计等功能

    完整项目地址:https://download.csdn.net/download/lijunhcn/88453470 项目结构 环境选型 语言:Python 操作系统:Windows 数据库:MySQL 窗口界面:PyQT API接口:百度AI接口,用以实现人脸登陆与注册 远程MySQL表结构 远程表结构sql脚本 项目背景 智能校园防御软件是实现了一款基于摄像头数据

    2024年02月04日
    浏览(35)
  • 毕业设计 stm32人脸识别门禁系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月09日
    浏览(36)
  • 元宇宙场景下基于区块链人脸识别门禁系统-摘自宣科智能

    如今随着社会经济发展水平的提升,市场对于人脸识别技术的需求扩大。如刷脸门禁、上下班打卡、访客来访等都可能扫一扫脸。基于人脸识别的技术迭代更新,人脸识别技术在安防领域也有了更加开阔的发展空间,现有技术的人脸识别门禁系统存在诸多问题,例如:信息的

    2024年02月11日
    浏览(36)
  • STM32外设集 -- 人脸识别门禁系统(K210--HEX协议版本)

    人脸,指纹识别已经走进人们的生活,无疑这方便了人们的生活,也提高了安全和可靠性,所以作为未来的学习方向,我也来接触接触人脸识别(有不足之处请见谅😁) 因为这款芯片有充足的开源资料足够支撑我们学习,并将文档也很友好 相关资料连接 使用说明 (Github):

    2023年04月08日
    浏览(30)
  • 智慧校园管理云平台电子班牌系统源码,数据管理、信息发布、家校互通、物联控制、教务管理、日常办公、人脸识别

    智慧校园平台源码 智慧校园云平台电子班牌系统源码  一款全功能智慧校园管理云平台电子班牌系统源码, 融合了多媒体信息发布、家校互通、物联控制、教务管理、日常办公等一系列应用,是校园管理的现代手段。 电子班牌 系统的主要功能包括 :数据信息管理、 班级管

    2024年02月06日
    浏览(36)
  • 【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派)

    【优秀毕设】基于OpenCV的人脸识别打卡/签到/考勤管理系统(最简基本库开发、可基于树莓派) 该系统利用Harr级联检测和LPBH进行人脸检测和训练、识别 利用Tkinter完成界面搭建 利用Flask+HTML完成网络实时图像推流及控制 利用captcha.image 完成验证码功能 利用xlsxwriter将数据保存

    2024年02月06日
    浏览(52)
  • ESD闸机门禁管理系统的构成

    ESD闸机门禁管理系统是一种用于人员出入管理的设备和软件系统。它通常由以下几个组成部分构成: 1. 闸机门禁设备:闸机门禁设备是系统的硬件组成部分,用于控制人员进出特定区域。它可以通过刷卡、指纹识别、人脸识别等方式验证人员身份,并决定是否允许其通过。

    2024年02月10日
    浏览(27)
  • ESD门禁管理系统的主要功能和优势

    ESD门禁管理系统是一种用于控制和管理人员进出特定区域的系统。它通常由门禁控制器、门禁读卡器、门禁管理软件等组成。 ESD门禁管理系统的主要功能包括: 1. 门禁控制:通过门禁控制器实现对门禁设备的控制,如开关门、锁定门等。 2. 门禁验证:通过门禁读卡器验证人

    2024年02月11日
    浏览(27)
  • 人脸识别技术,如何解决学校门禁安全?

    在当今社会,学校安全已经成为一个备受关注的议题,而门禁监控系统已经成为学校管理和保障学生安全的重要工具之一。随着社会的不断发展和技术的不断进步,学校不再只是知识传授的场所,它们也成为了数百、数千甚至数万学生和教职员工的社区。 然而,这样的规模和

    2024年02月09日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包