Ich brauche wirklich eure Hilfe. Ich versuche nur schon seit circa 2 Wochen mehrere Webcams an meinem Raspberry Pi zu betreiben und finde einfach meinen Fehler nicht. Das Programm soll zu Beginn nacheinander Livebilder der einzelnen Kameras erzeugen. Wenn die ESC-Taste gedrückt wird, soll ein Ordner für die Kamera angelegt werden und anschließend soll sich das nächste Livebild erzeugen. Das ganze ist nur der Programmstart zur Ausrichtung der Kameras. Jede Kamera alleine funktioniert ohne Probleme. Sobald ich 2 oder mehr Kameras anschließe stürzt das Programm immer ab. Wenn ich dann die Kameras wieder abziehe und in anderer Reihenfolge einstecke funktioniert es beim nächsten mal meistens.
Ich verwende dafür Python3, opencv, Raspberry Pi3+, mehrere USB-Webcams und einen Hub mit externer Stromversorgung.
Code: Alles auswählen
from __future__ import print_function
import sys, os
from PyQt5 import QtGui
from PyQt5.QtWidgets import*
import PyQt5.QtWidgets as widgets
import PyQt5.uic as uic
from PyQt5.QtGui import QIcon
import cv2
import threading
import RPi.GPIO as GPIO
import time
import subprocess
import numpy
from PyQt5. QtCore import QThread
import signal
class Initialisierung(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi('/home/pi/Bildprogramm/Ui - Dateien/KameraInit.ui', self)
self.setWindowTitle('Kamerainitialisierung')
self.setWindowIcon(QtGui.QIcon('/home/pi/Bildprogramm/VWLogo.jpeg'))
self.StartKameraInit.clicked.connect(self.CamInit)
self.show()
def CamInit(self):
global a
a = self.AnzCam.text()
if a == "":
IN = Initialisierung()
if a != "0":
self.Anzeige()
self.H = Hauptfenster()
self.close()
def Anzeige(self):
global a
a = int(a)
global pfad
pfad = []
q = (['/media/pi/FE21-4590/Bilder/Kamera 1/', '/media/pi/FE21-4590/Bilder/Kamera 2/', '/media/pi/FE21-4590/Bilder/Kamera 3/', '/media/pi/FE21-4590/Bilder/Kamera 4/',' /media/pi/FE21-4590/Bilder/Kamera 5/'])
cam1 = cv2.VideoCapture(0)
cam1.set(cv2.CAP_PROP_FPS,40)
cam1.open(0)
while True:
ret_val1, img1 = cam1.read()
cv2.imshow('Livebild Kamera: 1', img1)
if cv2.waitKey(1) == 27:
break
cam1.release()
cv2.destroyWindow('Livebild Kamera: 1')
NeuerOrdner , result = QInputDialog.getText(self,'Ordner anlegen','Bitte Ordner für Kamera 1 anlegen:')
pfad.append(q[0] + NeuerOrdner + "/")
os.makedirs(pfad[0])
time.sleep(1)
if a >= 2:
cam2 = cv2.VideoCapture(1)
cam2.set(cv2.CAP_PROP_FPS,40)
cam2.open(1)
while(True):
ret_val2, img2 = cam2.read()
cv2.imshow('Livebild Kamera: 2', img2)
if cv2.waitKey(1) == 27:
break
cam2.release()
cv2.destroyAllWindows()
NeuerOrdner , result = QInputDialog.getText(self,'Ordner anlegen','Bitte Ordner für Kamera 2 anlegen:')
pfad.append(q[1] + NeuerOrdner + "/")
os.makedirs(pfad[1])
if a >= 3:
cam3 = cv2.VideoCapture(2)
cam3.set(cv2.CAP_PROP_FPS,40)
cam3.open(2)
while(True):
ret_val3, img3 = cam3.read()
cv2.imshow('Livebild Kamera: 3', img3)
if cv2.waitKey(1) == 27:
break
cam3.release()
cv2.destroyAllWindows()
NeuerOrdner , result = QInputDialog.getText(self,'Ordner anlegen','Bitte Ordner für Kamera 3 anlegen:')
pfad.append(q[2] + NeuerOrdner + "/")
os.makedirs(pfad[2])
if a >= 4:
cam4 = cv2.VideoCapture(3)
cam4.set(cv2.CAP_PROP_FPS,40)
cam4.open(3)
while(True):
ret_val4, img4 = cam4.read()
cv2.imshow('Livebild Kamera: 4', img4)
if cv2.waitKey(1) == 27:
break
cam4.release()
cv2.destroyAllWindows()
NeuerOrdner , result = QInputDialog.getText(self,'Ordner anlegen','Bitte Ordner für Kamera 4 anlegen:')
pfad.append(q[3] + NeuerOrdner + "/")
os.makedirs(pfad[3])
if a >= 5:
cam5 = cv2.VideoCapture(4)
cam5.set(cv2.CAP_PROP_FPS,40)
cam5.open(4)
while(True):
ret_val5, img5 = cam5.read()
cv2.imshow('Livebild Kamera: 5', img5)
if cv2.waitKey(1) == 27:
break
cam5.release()
cv2.destroyAllWindows()
NeuerOrdner , result = QInputDialog.getText(self,'Ordner anlegen','Bitte Ordner für Kamera 5 anlegen:')
pfad.append(q[4] + NeuerOrdner + "/")
os.makedirs(pfad[4])
class Hauptfenster(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi('/home/pi/Bildprogramm/Ui - Dateien/Bildprogramm.ui', self)
self.setWindowTitle('Serienbildaufnahme')
self.setWindowIcon(QtGui.QIcon('/home/pi/Bildprogramm/VWLogo.jpeg'))
self.show()
global pfad
global a
a = int(a)
print(pfad[0])
if a >= 2:
print(pfad[1])
if a >= 3:
print(pfad[2])
if __name__=="__main__":
app=QApplication(sys.argv)
app.setStyle('Fusion')
subprocess.Popen('/usr/bin/matchbox-keyboard')
IN = Initialisierung()
sys.exit(app.exec())
Ich hoffe ihr könnt mir helfen und wisst was ich falsch mache... Schon mal danke im voraus!!OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /home/pi/opencv-3.2.0/modules/highgui/src/window.cpp, line 304
Traceback (most recent call last):
File "/home/pi/Bildprogramm/test ordner nach stream.py", line 50, in CamInit
self.Anzeige()
File "/home/pi/Bildprogramm/test ordner nach stream.py", line 123, in Anzeige
cv2.imshow('Livebild Kamera: 4', img4)
cv2.error: /home/pi/opencv-3.2.0/modules/highgui/src/window.cpp:304: error: (-215) size.width>0 && size.height>0 in function imshow
Backend terminated (returncode: -6)
Fatal Python error: Aborted
Gruß, okliw994