程序示例精选
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. 运行结果
三、在线协助:
如需安装运行环境或远程调试,见文章底部个人 QQ 名片,由专业技术人员远程协助!
1)远程安装运行环境,代码调试
2)Qt, C++, Python入门指导
3)界面美化
4)软件制作
博主推荐文章:python人脸识别统计人数qt窗体-CSDN博客
博主推荐文章:Python Yolov5火焰烟雾识别源码分享-CSDN博客
Python OpenCV识别行人入口进出人数统计_python识别人数-CSDN博客
个人博客主页:alicema1111的博客_CSDN博客-Python,C++,网页领域博主文章来源:https://www.toymoban.com/news/detail-424761.html
博主所有文章点这里:alicema1111的博客_CSDN博客-Python,C++,网页领域博主文章来源地址https://www.toymoban.com/news/detail-424761.html
到了这里,关于Python+Qt人脸识别门禁管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!