Sep-03-2019, 05:18 PM
I've adapted my project to PyQt5 but have failed on getting the video to work.
This version fails to "connect() failed between Thread.changePixmap[QImage] and setImage()" in line 76. I've done some other tests where I managed to get it to connect, but it failed with "Thread destroyed before being terminated" (or maybe the opposite of that).
This version fails to "connect() failed between Thread.changePixmap[QImage] and setImage()" in line 76. I've done some other tests where I managed to get it to connect, but it failed with "Thread destroyed before being terminated" (or maybe the opposite of that).
from PyQt5 import QtCore, QtGui, QtWidgets from pyqt_led import Led from PyQt5.QtCore import pyqtSlot import cv2 import socket import time class Thread(QtCore.QThread): changePixmap = QtCore.pyqtSignal(QtGui.QImage) def run(self): cap = cv2.VideoCapture('http://192.168.1.1:8080/?action=stream') while True: ret, frame = cap.read() if ret: # https://stackoverflow.com/a/55468544/6622587 rgbImage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) h, w, ch = rgbImage.shape bytesPerLine = ch * w convertToQtFormat = QtGui.QImage(rgbImage.data, w, h, bytesPerLine, QtGui.QImage.Format_RGB888) p = convertToQtFormat.scaled(640, 480) self.changePixmap.emit(p) class Ui_MainWindow(object): def setupUi(self, MainWindow): super().__init__() MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 754) font = QtGui.QFont() font.setPointSize(10) MainWindow.setFont(font) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.vlabel = QtWidgets.QLabel(self.centralwidget) self.vlabel.setGeometry(QtCore.QRect(80, 40, 640, 480)) self.vlabel.setObjectName("vlabel") self.vlabel.move(80, 40) self.vlabel.resize(640, 480) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") self.menuCar_Control_v = QtWidgets.QMenu(self.menubar) self.menuCar_Control_v.setObjectName("menuCar_Control_v") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.menubar.addAction(self.menuCar_Control_v.menuAction()) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) self.initUI() @pyqtSlot(QtGui.QImage) def setImage(self, image): self.vlabel.setPixmap(QPixmap.fromImage(image)) def initUI(self): th = Thread() th.changePixmap.connect(self.setImage) th.start() def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.vlabel.setText(_translate("MainWindow", "VLable")) self.menuCar_Control_v.setTitle(_translate("MainWindow", "Car Control v")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())