首页 > 系统相关 >样例 多进程(采集视频+界面显示)+共享内存+按键+引脚使用

样例 多进程(采集视频+界面显示)+共享内存+按键+引脚使用

时间:2022-10-03 00:11:14浏览次数:47  
标签:QtGui Form 引脚 self 样例 label brush 界面显示 QtCore

 

 

 

界面转化命令

python -m PyQt5.uic.pyuic ./UI_1creat.ui -o ./UI_1UI.py

 

 

調用代碼

from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets, QtCore, QtGui
 
#导入图像库
import cv2
import numpy as np
import datetime
from qrcode_test import *
#进程测试
#import multiprocessing




import sys

#线程测试
import threading
from queue import Queue

from multiprocessing import Process,Manager

#导入自己创建的图形类
from UI_1UI import *
 
  
import time
import RPi.GPIO as GPIO
  
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

pinA1=17
  
GPIO.setup(pinA1, GPIO.OUT) #设置脚为输出模式
GPIO.output(pinA1, GPIO.HIGH)  #关闭 默认
 
#一个是这个类本身的,一个是这个类继承
class Example(QMainWindow,Ui_Form):
 
    def __init__(self,ShareImages,Lock):
        #类的初始化
        super(Example, self).__init__()
        self.setupUi(self)#界面控件初始化
        
        #获取共享内存,外部参数数据和数据锁
        self.ShareImages=ShareImages
        self.Lock=Lock
        
        #相机线程初始化
        self.CAM_Int()
        
                     
        
    def recongQR(self):
        self.ShareImages[1]=1
        '''
        if self.ShareImages[1]==1:
            self.ShareImages[1]=0
        else:
            self.ShareImages[1]=1
        '''
    def opendoor(self):
        GPIO.output(pinA1, GPIO.LOW)  #亮LOW
        _translate = QtCore.QCoreApplication.translate
        self.label_tongxing.setText(_translate("Form", "手动打开闸门"))

    
    def closedoor(self):
        GPIO.output(pinA1, GPIO.HIGH)  #亮
        _translate = QtCore.QCoreApplication.translate
        self.label_tongxing.setText(_translate("Form", "手动关闭闸门"))

        
        
         
    def CAM_Int(self):
    
        #self.dateTimeEdit.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
         #按钮绑定函数
        self.pushButton.clicked.connect(self.recongQR)  #开始按键
        self.pushButton_2.clicked.connect(self.opendoor)  #开始按键
        self.pushButton_3.clicked.connect(self.closedoor)  #开始按键
        
        #定时器20毫秒更新画板
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.CAM_SetImage) 
        self.timer.start(25) #单位为毫秒
         
    #配合定时器刷新图像显示
    def CAM_SetImage(self):
        
        _translate = QtCore.QCoreApplication.translate
        
        with self.Lock:
            frame=self.ShareImages[0]#数据转化后才能用,不然只是一个numpy数组
            rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
            convertToQtFormat = QtGui.QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QImage.Format_RGB888)
            #在这里可以对每帧图像进行处理,
            qtimg = convertToQtFormat.scaled(640, 480, Qt.KeepAspectRatio)
        
            self.label_img.setPixmap(QPixmap.fromImage(qtimg))#窗口刷新
            
            if self.ShareImages[1]==2:#识别成功
                #print("识别结果")
                #print(self.ShareImages[3])
                
                if self.ShareImages[3]=="None":
                    self.label_shibie.setText(_translate("Form", "识别失败,请放好重新识别!"))
                    print("识别失败,请放好重新识别!")
                    
                else:
                    self.label_shibie.setText(_translate("Form", "识别成功,正在验证..."))

                    print("识别成功,正在验证...")
                    #判断是否满足时间
                    dateTime=self.lineEditDate.text()
                    print("期限时间:",dateTime,"识别时间:",self.ShareImages[3])
                    
                    rec=str(self.ShareImages[3]).strip('\n')#识别结果
                    
                    result=self.compare_time(rec,str(dateTime))
                    if result:
                         print("在有效期限内")
                         self.label_shibie.setText(_translate("Form", "识别成功,在有效期限内\n"+rec))
                         self.label_tongxing.setText(_translate("Form", "自动打开闸门"))
                         GPIO.output(pinA1, GPIO.LOW)  #亮
                         
                         GPIO.output(pinA1, GPIO.HIGH)  #关

                         


                    else:
                         print("不在有效期内")
                         self.label_shibie.setText(_translate("Form", "识别成功,不在有效期内\n"+rec))
                         self.label_tongxing.setText(_translate("Form", "自动关闭闸门"))
                         GPIO.output(pinA1, GPIO.HIGH)  #亮HIGH
                               
                    

                    print(result)
                #根据结果修改状态
                
                self.ShareImages[1]=0
     
    def closeEvent(self, event):
        self.ShareImages[2]=1#必须通过共享内存数据,强制关闭采集进程
        print("QT关闭窗口")
        
            
            
 

    """
    
    time格式 '2018-01-03 16:26:23'
    """
    def compare_time(self,startTime,endTime):
        #now = datetime.datetime.now ()
        d_start = datetime.datetime.strptime (startTime, '%Y-%m-%d %H:%M:%S')

        d_end = datetime.datetime.strptime (endTime, '%Y-%m-%d %H:%M:%S')

        #result = (d_start<=now) and (d_end>=now)
        result = (d_start==d_end) 

        return result

    #result = compare_time('2018-01-03 16:26:23','2018-02-03 16:29:55')
    #print(result)        
     
 
 

def Getvideo(images,lock):
    cap = cv2.VideoCapture(0)
    #cap.set(cv2.CAP_PROP_FRAME_WIDTH,800)
    #cap.set(cv2.CAP_PROP_FRAME_HEIGHT,600)
    #cap.set (cv2.CAP_PROP_FPS,25)
    while (cap.isOpened()):
        
        #print(images[1])
        if images[2]==1:
            print("采集进程关闭窗口")
            break
        
        ret, frame = cap.read()
        if ret:
            
            with lock:
                if images[1]==1:
                   cv2.imwrite('Saveimage.png',frame)
                   images[3]=konw_qrcode('Saveimage.png')
                   images[1]=2#识别结束
                   
                images[0]=frame                                             
                 
        else:
            #break
            continue



   
 
 
if __name__ == '__main__':
 
    #---------------------开启一个单独进程,采集+识别--------------------
    #共享内存数据
    h=480 #图像默认高  
    w=640 #图像默认宽  
    img = cv2.imread("Saveimage.png", 1)#默认底板图片
    img = cv2.resize(img,(w,h),) #大小调整 
    lock = Manager().Lock()#创建共享内存容器
    ShareImages=Manager().dict()#存str类型数据
    ShareImages[0]=img#图像数据使用前必须初始化一个图像
    ShareImages[1]=0#用于控制保存图像和开始识别
    ShareImages[2]=0#用于QT界面关闭按键,关闭采集进程
    ShareImages[3]="None"#识别结果
    
    p = Process(target=Getvideo, args=(ShareImages,lock))#开启进程
    p.deamon=True  #伴随主进程关闭而关闭,但是有时候还是关闭不了,单独搞个标志位来控制
    p.start()#开始
    
    #----------------------QT界面主进程--------------------------------
    app = QApplication(sys.argv)
    ui=Example(ShareImages,lock) #ShareImages共享内存数据  lock 共享数据锁
    ui.show()
    sys.exit(app.exec_())
   

  

 

界面代碼

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file './UI_1creat.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(1445, 748)
        font = QtGui.QFont()
        font.setPointSize(24)
        Form.setFont(font)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(100, 80, 451, 41))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 0, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(143, 146, 147))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label.setPalette(palette)
        self.label.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignHCenter)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(90, 130, 451, 41))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(255, 85, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 85, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(143, 146, 147))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label_2.setPalette(palette)
        font = QtGui.QFont()
        font.setPointSize(16)
        self.label_2.setFont(font)
        self.label_2.setAlignment(QtCore.Qt.AlignBottom|QtCore.Qt.AlignHCenter)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(Form)
        self.label_3.setGeometry(QtCore.QRect(50, 220, 171, 41))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.lineEditDate = QtWidgets.QLineEdit(Form)
        self.lineEditDate.setGeometry(QtCore.QRect(240, 230, 301, 32))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.lineEditDate.setFont(font)
        self.lineEditDate.setObjectName("lineEditDate")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(290, 310, 151, 41))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")
        self.label_img = QtWidgets.QLabel(Form)
        self.label_img.setGeometry(QtCore.QRect(640, 60, 771, 651))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(255, 170, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(255, 170, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(143, 146, 147))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label_img.setPalette(palette)
        self.label_img.setAlignment(QtCore.Qt.AlignCenter)
        self.label_img.setObjectName("label_img")
        self.label_5 = QtWidgets.QLabel(Form)
        self.label_5.setGeometry(QtCore.QRect(80, 400, 171, 41))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.label_shibie = QtWidgets.QLabel(Form)
        self.label_shibie.setGeometry(QtCore.QRect(280, 380, 311, 91))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(0, 170, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 170, 0))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(143, 146, 147))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label_shibie.setPalette(palette)
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label_shibie.setFont(font)
        self.label_shibie.setObjectName("label_shibie")
        self.label_7 = QtWidgets.QLabel(Form)
        self.label_7.setGeometry(QtCore.QRect(80, 500, 171, 41))
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label_7.setFont(font)
        self.label_7.setObjectName("label_7")
        self.label_tongxing = QtWidgets.QLabel(Form)
        self.label_tongxing.setGeometry(QtCore.QRect(280, 500, 311, 41))
        palette = QtGui.QPalette()
        brush = QtGui.QBrush(QtGui.QColor(0, 85, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(0, 85, 255))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.WindowText, brush)
        brush = QtGui.QBrush(QtGui.QColor(143, 146, 147))
        brush.setStyle(QtCore.Qt.SolidPattern)
        palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.WindowText, brush)
        self.label_tongxing.setPalette(palette)
        font = QtGui.QFont()
        font.setPointSize(20)
        self.label_tongxing.setFont(font)
        self.label_tongxing.setObjectName("label_tongxing")
        self.pushButton_2 = QtWidgets.QPushButton(Form)
        self.pushButton_2.setGeometry(QtCore.QRect(160, 610, 151, 41))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(Form)
        self.pushButton_3.setGeometry(QtCore.QRect(410, 610, 151, 41))
        font = QtGui.QFont()
        font.setPointSize(18)
        self.pushButton_3.setFont(font)
        self.pushButton_3.setObjectName("pushButton_3")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "火车票二维码识别验票系统设计"))
        self.label_2.setText(_translate("Form", "2021届毕业生 测控162 江雪婷"))
        self.label_3.setText(_translate("Form", "请输入时间:"))
        self.lineEditDate.setText(_translate("Form", "2021-03-03 16:26:23"))
        self.pushButton.setText(_translate("Form", "检测识别"))
        self.label_img.setText(_translate("Form", "检测识别窗口"))
        self.label_5.setText(_translate("Form", "识别结果:"))
        self.label_shibie.setText(_translate("Form", "等待识别结果......"))
        self.label_7.setText(_translate("Form", "通行结果:"))
        self.label_tongxing.setText(_translate("Form", "等待通行结果......"))
        self.pushButton_2.setText(_translate("Form", "开闸门"))
        self.pushButton_3.setText(_translate("Form", "关闸门"))

  

 

标签:QtGui,Form,引脚,self,样例,label,brush,界面显示,QtCore
From: https://www.cnblogs.com/gooutlook/p/16749815.html

相关文章