Несколько каналов камер не работают с потоками PyQt5: - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть программное обеспечение для сбора данных, для которого требуются сигналы с камер от двух разных источников, один из которых - веб-камера Brio, а другой - IP-веб-камера, подключенная через USB-модем.Теперь, когда я редактировал код для потоковой передачи двух видео, он показывал только одно, а не другое.Код приведен ниже:

import sys
import cv2
#from gsp import GstreamerPlayer
import datetime
from pyfirmata import util, Arduino
from PyQt5 import QtCore, QtGui
import openpyxl
from openpyxl import load_workbook
from PyQt5.QtCore import pyqtSlot, QThread, pyqtSignal
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QLayout, QDialog, QApplication, QMainWindow, QFileDialog, QPushButton, QWidget, QLabel
from PyQt5.uic import loadUi
import xlrd
from xlutils.copy import copy
import serial
import xlsxwriter
from xlwt import Workbook
sys.setrecursionlimit(15000)

# For the camera feed
class Thread(QThread):
    changePixmap = pyqtSignal(QImage)
    def run(self):
        cap = cv2.VideoCapture(0)
        while True:
            ret, frame = cap.read()
            if ret:
                rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                convertToQtFormat = QImage(rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QImage.Format_RGB888)
                p = convertToQtFormat.scaled(256, 181)
                self.changePixmap.emit(p)


class Thread1(QThread):
    changePixmap = pyqtSignal(QImage)

    def run(self):
        cap = cv2.VideoCapture('http://192.168.42.129:8080/video')
        while True:
            ret, frame = cap.read()
            if ret:
                rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
                convertToQtFormat = QImage(
                    rgbImage.data, rgbImage.shape[1], rgbImage.shape[0], QImage.Format_RGB888)
                p1 = convertToQtFormat.scaled(111, 181)
                self.changePixmap.emit(p1)

Функции вызова в основном следующие:

 @pyqtSlot(QImage)
 def setImage(self, image):
     self.webcam.setPixmap(QPixmap.fromImage(image))

 @pyqtSlot(QImage)
 def setImage1(self, image):
     self.webcam_2.setPixmap(QPixmap.fromImage(image))

 def initUI(self):
    th = Thread(self)
    th1 = Thread1(self)
    th1.changePixmap1.connect(self.setImage1)
    th.changePixmap.connect(self.setImage)
    th.start()

Я новичок в программировании на Python, может кто-нибудь сказать мне, кто яздесь делаешь неправильно?Я попробовал другой подход - потоковую передачу в функции и настройку потоков, но это не был обычный подход, поскольку мое приложение продолжало падать из-за цикла while * (я полагаю) *.Если я использую один источник за раз, он работает, но я не могу заставить их работать одновременно.

1 Ответ

0 голосов
/ 22 апреля 2019

У меня все получилось, так как я не добавлял

thread.start ()

до этого.

...