Hallo zusammen,
Ich habe drei USB-Kameras an meinen Raspberry angeschlossen.
Wenn ich ein einfaches Programm starte, um ein Bild zu erzeugen und abzuspeichern, geht das mit allen drei Kameras einzeln einwandfrei.
Versuche ich allerdings zwei oder alle drei der Kameras in einem Programm zu starten bleibt das Programm beim starten der zweiten Kamera stehen.
- Raspberry Pi 4 Model B Rev 1.1
- Raspberry Pi OS (32-bit)
- Kameras:
https://www.robotshop.com/de/de/arducam-…5xoCA4UQAvD_BwE
import cv2
import time
timestr = time.strftime("%Y%m%d-%H%M%S")
cap_l = cv2.VideoCapture(0)
print("Kamera links gestartet")
ret1 = False
while not ret1: ret1, ref_l = cap_l.read()
cv2.imwrite('/home/Kl_%s.jpg' % timestr, ref_l)
print("gespeichert")
cap_l.release()
Alles anzeigen
Dieser Code funktioniert, auch mit den anderen Kameras (kamera links/rechts/oben)
lediglich folgendes wird angeigt:
pi@raspberrypi:~/Desktop/client/lro $ sudo python3 l.py
[ WARN:0@4.819] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
Kamera links gestartet
gespeichert
Versuche ich allerdings mit zwei oder drei Kameras, passiert folgendes: (hier Beispiel mit zwei Kameras)
import cv2
import time
timestr = time.strftime("%Y%m%d-%H%M%S")
cap_l = cv2.VideoCapture(0)
print("Kamera links gestartet")
cap_r = cv2.VideoCapture(2)
print("Kamera rechts gestartet")
ret1 = False
while not ret1: ret1, ref_l = cap_l.read()
ret2 = False
while not ret2: ret2, ref_r = cap_r.read()
cv2.imwrite('/home/Kl_%s.jpg' % timestr, ref_l)
cv2.imwrite('/home/Kr_%s.jpg' % timestr, ref_r)
print("gespeichert")
cap_l.release()
cap_r.release()
Alles anzeigen
starte ich diesen Code, wird folgendes angezeigt und das Programm bleibt stehen (mindestens 20 Minuten abgewartet)
pi@raspberrypi:~/Desktop/client/lro $ sudo python3 lr.py
[ WARN:0@4.928] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (1405) open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
Kamera links gestartet
weiter läuft das Programm nicht, d.h. die zweite Kamera lässt sich nicht initialisieren.
Breche ich ab wird folgendes angezeigt:
^C
(python3:9261): GStreamer-CRITICAL **: 12:24:06.421:
Trying to dispose element pipeline1, but it is in PAUSED instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.
[ WARN:0@68.105] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (1356) open OpenCV | GStreamer warning: unable to start pipeline
(python3:9261): GStreamer-CRITICAL **: 12:24:06.421:
Trying to dispose element videoconvert1, but it is in PLAYING instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.
[ WARN:0@68.106] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (862) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
(python3:9261): GStreamer-CRITICAL **: 12:24:06.421:
Trying to dispose element appsink1, but it is in READY instead of the NULL state.
You need to explicitly set elements to the NULL state before
dropping the final reference, to allow them to clean up.
This problem may also be caused by a refcounting bug in the
application or some element.
[ WARN:0@68.106] global /home/pi/opencv/modules/videoio/src/cap_v4l.cpp (902) open VIDEOIO(V4L2:/dev/video2): can't open camera by index
Traceback (most recent call last):
File "/home/pi/Desktop/client/lro/lr.py", line 9, in <module>
cap_r = cv2.VideoCapture(2)
KeyboardInterrupt
Alles anzeigen
Auch wenn ich die funktionierenden Skripte, die nur eine Kamera aufrufen mittels Multithreading parallel laufen lasse, startet nur die Kamera deren Skript als erstes aufgerufen wird...
Ich habe im Internet aber zahlreiche Beispiele gesehen, dass dies mit mehreren Kameras gleichzeitig geht- z.B.:
https://www.youtube.com/watch?v=haJfgQz_tKk&t=844s
Auch am Laptop konnte ich mit Python auf zwei Kameras parallel zugreifen- also an den Kameras sollte es nicht liegen.
P.S. Ich bezeichne mich eher als Laie und hoffe, dass ich keinen mit möglicher Unverständnis verärgere
Ich würde mich sehr über Hilfe dazu freuen:)
Gruß Paul