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
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