Я работаю с многопроцессорной программой Python с тремя процессами.Первый захватывает изображения из модуля pyCamera, второй представляет собой графический интерфейс, а третий выполняет простую обработку изображений.Я пытаюсь показать текущее изображение, снятое камерой в Qlabel.Мне не нужно иметь более 10 кадров в секунду, это может быть даже медленным, как 1 кадр / с.Но каждый раз, когда я использую setPixmap, похоже, что обновленное изображение показывается слишком долго.
class Ui_MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(Ui_MainWindow,self).__init__()
uic.loadUi('/usr/local/bin/meltingPoints/GUI.ui',self)
#variables that contain the captured image
self.Gimage = mp.Array('B',768*1024*3,lock = mp.Lock())
#Image update timer
self.updateTimer = QtCore.QTimer()
self.updateTimer.timeout.connect(self.update_labels)
self.updateTimer.start(1000)
def update_labels(self):
#Reading the image from mp.Array
self.Gimage.acquire()
imageD = np.frombuffer(self.Gimage.get_obj(),dtype=np.uint8)
self.Gimage.release()
#Converting the image to Qimage
imageD.shape = [768,1024,3]
imageP = Image.fromarray(imageD[0:564,149:901,:].astype('uint8'), 'RGB')
imageQ = ImageQt(imageP.resize((400,300)))
#Setting Pixmap
self.imageDisplay.setPixmap(QtGui.QPixmap.fromImage(imageQ))
#Other simple label text updates go on after this
Я получаю изображение в виджете Qlabel, но вместо того, чтобы потратить одну секунду на обновление, как предполагает конфигурация таймера, требуется около 5 секунд, чтобы показать любое изменение изображения.Я попытался использовать OwnImageWidget, показанный здесь https://www.kurokesu.com/main/2016/08/01/opencv-usb-camera-widget-in-pyqt/, и он обновляет изображения вовремя, но GUI перестает отвечать на запросы, когда происходит обновление изображения.
Есть идеи о том, что может произойти?Я также включу функцию захвата изображений (эта функция вызывается как процесс в основном скрипте и захватывает изображение в два разных многопроцессорных массива)
from time import sleep
import numpy as np
import picamera
def fotografo(Gimage,Oimage):
#Configuracion y encendido de la camara
with picamera.PiCamera() as camera:
#Fotos en blanco y negro
camera.color_effects = (128,128)
#Resolucion maxima
camera.resolution = (1024,768)
#Cambio de los parametros para fotos consistentes
camera.iso = 600
sleep(2)
camera.shutter_speed = camera.exposure_speed
camera.exposure_mode = 'off'
g = camera.awb_gains
camera.awb_mode = 'off'
camera.awb_gains = g
Pic = np.empty((768*1024*3), dtype = np.uint8)
while True:
camera.capture(Pic,'rgb')
Gimage[:] = Pic
Oimage[:] = Pic
sleep(0.25)
Спасибо
unlucky_code