当前位置:网站首页>【界面】pyqt5和Swin Transformer对人脸进行识别
【界面】pyqt5和Swin Transformer对人脸进行识别
2022-06-26 22:46:00 【努力的袁】
基于python,使用pyqt5模块和swin transformer检测算法对人脸进行识别
工具
语言:
python
主要库:
pyqt5
检测模型:
swin transformer
核心代码
import time, cv2
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QFileDialog, QMainWindow
from PyQt5.QtCore import QTimer, QDateTime
from PyQt5.Qt import QThread, pyqtSignal, QMutex
import qimage2ndarray
from queue import Queue
from Project import Ui_Form
from infer import *
video_steam = Queue()
class Thread1(QThread): # 线程1
# 使用自定义信号,一定要记得信号是类变量,必须在类中定义,不能在实例方法中定义,
thread1_signal2 = pyqtSignal(object) #定义信号,定义参数为object类型
def __init__(self):
super(Thread1, self).__init__()
self.t = 0
self.Image_thread1 = None
self.mutex = QMutex() # 创建线程锁
self._isPause = False
def run(self):
while True:
self.mutex.lock() # 加锁
time.sleep(0.001) # 休眠
_, frame = cap.read()
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
self.Image_thread1 = frame
self.thread1_signal2.emit(self.Image_thread1) # 传信号
self.mutex.unlock() # 解锁
class Thread2(QThread): # 线程2
thread1_signal3 = pyqtSignal(object)
def __init__(self):
super(Thread2, self).__init__()
self.t = 0
self.Image_thread1 = None
self.mutex = QMutex()
self._isPause = False
self.video_flag = 0
def run(self):
while True:
self.mutex.lock()
time.sleep(0.001)
# time.sleep(1 / self.a) 在这里改帧率
_, frame = cap.read()
config_file = 'mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_1x_coco.py'
checkpoint_file = 'epoch_100.pth'
classes = ['The color of silica gel is abnormal', 'The color of silica gel is normal', 'The door is open',
'The door is close', 'breakage', 'dirt', 'rust', 'foreign object', 'oil leakage', 'animal',
'hat', 'person']
model = init_detector(config_file, checkpoint_file, device='cuda:0')
frame, result_label = InferResult(frame, config_file, checkpoint_file, classes, model)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
if self.video_flag == 0:
video_steam.put(frame)
self.Image_thread1 = frame
self.thread1_signal3.emit(self.Image_thread1)
self.mutex.unlock()
class PyQtMainEntry(QMainWindow, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.mark = 0
self.btnReadImage.clicked.connect(self.btnReadImage_Clicked)
self.btnShowCamera.clicked.connect(self.btnOpenCamera_Clicked)
self.btnStartLabel.clicked.connect(self.startRecognize)
self.btnSaveResult.clicked.connect(self.resultsave)
self.time()
def btnReadImage_Clicked(self):
self.mark = 0
filename, _ = QFileDialog.getOpenFileName(self, '打开')
if filename:
self.captured = cv2.imread(str(filename))
self.captured = cv2.cvtColor(self.captured, cv2.COLOR_BGR2RGB)
rows, cols, channels = self.captured.shape
bytesPerLine = channels * cols
QImg = QImage(self.captured.data, cols, rows, bytesPerLine, QImage.Format_RGB888)
self.Videolabel.setPixmap(QPixmap.fromImage(QImg).scaled(
self.Videolabel.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation))
self.Videolabel.setScaledContents(True)
def btnOpenCamera_Clicked(self):
self.mark = 1
self.process_thread = Thread2()
self.process_thread.thread1_signal3.connect(self.thread2_work2)
self.preview_thread = Thread1()
self.preview_thread.thread1_signal2.connect(self.thread1_work2)
self.preview_thread.start()
def thread1_work2(self, img):
self.Image = img
qimg = qimage2ndarray.array2qimage(img)
self.Videolabel.setPixmap(QPixmap(qimg))
self.Videolabel.show()
self.Videolabel.setScaledContents(True)
def thread2_work2(self, img):
self.Image = img
qimg = qimage2ndarray.array2qimage(img)
self.DetectImagelabel.setPixmap(QPixmap(qimg))
self.DetectImagelabel.show()
self.DetectImagelabel.setScaledContents(True)
self.Videolabel_2.setPixmap(QPixmap(qimg))
self.Videolabel_2.show()
self.Videolabel_2.setScaledContents(True)
def startRecognize(self):
if self.mark == 0:
img = self.captured
config_file = 'mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_1x_coco.py'
checkpoint_file = 'epoch_100.pth'
classes = ['The color of silica gel is abnormal', 'The color of silica gel is normal', 'The door is open',
'The door is close', 'breakage', 'dirt', 'rust', 'foreign object', 'oil leakage', 'animal',
'hat', 'person']
model = init_detector(config_file, checkpoint_file, device='cuda:0')
draw_1, result_label = InferResult(img, config_file, checkpoint_file, classes, model)
self.result = draw_1
draw_2 = qimage2ndarray.array2qimage(draw_1)
self.DetectImagelabel.setPixmap(QPixmap(draw_2))
self.DetectImagelabel.setScaledContents(True)
self.DetectImagelabel.show()
else:
self.process_thread.start()
# 显示时间
def showCurrentTime(self, timeLabel):
time = QDateTime.currentDateTime()
self.timeDisplay = time.toString('yyyy-MM-dd hh:mm:ss dddd')
timeLabel.setText(self.timeDisplay)
def time(self):
self.timer = QTimer()
self.timer.timeout.connect(lambda: self.showCurrentTime(self.label_2))
self.timer.start()
def resultsave(self):
path_filename = QFileDialog.getExistingDirectory(self, '结果保存')
if path_filename:
self.saveImage = cv2.cvtColor(self.result, cv2.COLOR_RGB2BGR)
cv2.imwrite(path_filename + '/' + self.timeDisplay[:10]
+ '_' + str(10) + '.png', self.saveImage)
# 显示路径
self.PathLineEdit.setText(path_filename)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
cap = cv2.VideoCapture(0)
window = PyQtMainEntry()
window.show()
sys.exit(app.exec_())
运行结果

源代码
边栏推荐
- [mixed programming JNI] Part 12 jnaerator
- C language: a simple calculator is implemented by using code many times
- Three solutions for improving embedded software development environment
- Are there any risks for the top ten securities companies to register and open accounts? Is it safe?
- Do an online GIF synthesis service at no cost
- BS-GX-016基于SSM实现教材管理系统
- Flutter 中 ValueNotifier<List<T>> 监听问题解决
- YOLOv6:又快又准的目標檢測框架開源啦
- 在哪个平台买股票开户最安全?求分享
- Implementation of collaborative filtering evolution version neuralcf and tensorflow2
猜你喜欢

VB. Net class library to obtain the color under the mouse in the screen (Advanced - 3)

在Flutter中解析复杂的JSON

Flashtext, a data cleaning tool, has directly increased the efficiency by dozens of times

DLA model (classification model + improved segmentation model) + deformable convolution

FPGA -vga display

Using C to operate SQLSERVER database through SQL statement tutorial
![leetcode:1567. 乘积为正数的最长子数组长度【dp[i]表示以i结尾的最大长度】](/img/a4/c5c31de7a0a3b34a188bfec0b5d184.png)
leetcode:1567. 乘积为正数的最长子数组长度【dp[i]表示以i结尾的最大长度】

Weaving dream collection plug-ins are recommended to be free collection plug-ins

Bs-gx-016 implementation of textbook management system based on SSM

What are the test case design methods?
随机推荐
DAST 黑盒漏洞扫描器 第五篇:漏洞扫描引擎与服务能力
WordPress collection plug-ins are recommended to be free collection plug-ins
VB. Net class library - 4 screen shots, clipping
Three solutions for improving embedded software development environment
Is there any risk for flush to register and open an account? Is it safe?
尚硅谷DolphinScheduler视频教程发布
Yolov6: un cadre de détection de cibles rapide et précis est Open Source
leetcode - 买卖股票的最佳时机
电子协会 C语言 1级 31 、 计算线段长度
BS-GX-016基于SSM实现教材管理系统
Operator介绍
LabVIEW Arduino tcp/ip remote smart home system (project part-5)
WP collection plug-in tutorial no thanks for WordPress collection of rules
leetcode:6103. 从树中删除边的最小分数【dfs + 联通分量 + 子图的值记录】
Restfultoolkitx of idea utility plug-in -- restful interface debugging
树莓派初步使用
在Flutter中解析复杂的JSON
[mixed programming JNI] Part 12 jnaerator
Unity animation knowledge of Art
[fundamentals of image processing] GUI image curve adjustment system based on MATLAB [including Matlab source code 1923]