Gleichzeitiges Lesen von zwei Kameras in OpenCV

8

Wie können Sie Videos von zwei oder mehr Kameras gleichzeitig (oder fast) mit OpenCV mithilfe der Python-API erfassen?

Ich habe drei Webcams, die alle Videostreams unterstützen und sich in / dev / video0, / dev / video1 und / dev / video2 befinden.

Wenn Sie zum Beispiel das Tutorial verwenden, ist das Erfassen von Bildern von einer einzelnen Kamera einfach:

%Vor%

Und das funktioniert gut.

Wenn ich jedoch versuche, eine zweite Kamera zu initialisieren, wird% ce_de% zurückgegeben, wenn keine zurückgegeben wird:

%Vor%

Um sicherzustellen, dass ich OpenCV nicht versehentlich einen schlechten Kamera-Index gegeben habe, habe ich jeden Kamera-Index einzeln getestet und alle funktionieren alleine. z.B.

%Vor%

Was mache ich falsch?

Bearbeiten: Meine Hardware ist ein Macbook Pro, auf dem Ubuntu läuft. Bei der Untersuchung des Problems speziell auf Macbooks habe ich andere gefunden, die dieses Problem auch auf OSX und mit verschiedenen Arten von Kameras haben. Wenn ich auf die iSight zugreife, schlagen beide Aufrufe in meinem Code fehl.

    
Cerin 16.04.2015, 02:35
quelle

3 Antworten

2

Ja, Sie sind definitiv durch die USB-Bandbreite begrenzt. Wenn Sie versuchen, von beiden Geräten mit voller Geschwindigkeit zu lesen, haben Sie wahrscheinlich einen Fehler erhalten:

%Vor%

Und dann, wenn Sie die Res auf 160x120 reduzieren:

%Vor%

jetzt scheint es zu funktionieren! Ich wette, Sie haben beide Kameras auf der gleichen USB-Karte angeschlossen. Sie können den Befehl lsusb ausführen, um sicherzustellen, dass etwas wie folgt angezeigt wird:

%Vor%

(Beachten Sie beide Kameras am selben Bus.) Wenn möglich, können Sie Ihrem Gerät eine weitere USB-Karte hinzufügen, um mehr Bandbreite zu erhalten. Ich habe das schon einmal gemacht, um mehrere Kameras mit voller Auflösung auf einer einzigen Maschine laufen zu lassen. Obwohl es sich um eine Tower-Workstation mit verfügbaren Motherboard-Steckplätzen handelt, ist diese Option auf einem MacBook-Laptop möglicherweise nicht verfügbar.

    
Velimir Mlaker 17.04.2015, 14:46
quelle
2

Ich habe "imutils" und lese Webcam Show auf dem Bild.

  

Imutils importieren

erfassen Sie Vedio-Frames

  

--- WebCam1

     

cap = cv2.VideoCapture (0)   cap.set (cv2.CAP_PROP_FRAME_WIDTH, 300)   cap.set (cv2.CAP_PROP_FRAME_HEIGHT, 300)

     

--- WebCam2

     

cap1 = cv2.VideoCapture (1)   cap1.set (cv2.CAP_PROP_FRAME_WIDTH, 300)   cap1.set (cv2.CAP_PROP_FRAME_HEIGHT, 300)

     

--- WebCam3

     

cap2 = cv2.VideoCapture (2)   cap2.set (cv2.CAP_PROP_FRAME_WIDTH, 300)   cap2.set (cv2.CAP_PROP_FRAME_HEIGHT, 300)

     

--- WebCame4

     

cap3 = cv2.VideoCapture (3)   cap3.set (cv2.CAP_PROP_FRAME_WIDTH, 300)   cap3.set (cv2.CAP_PROP_FRAME_HEIGHT, 300)

Ich erstelle die Funktion read_frame () sende Parameter über Image.fromarray und zeige

an
  

def read_frame ():   webCameShow (cap.read (), display1)   webCameShow (cap1.read (), display2)   webCameShow (cap2.read (), display6)   webCameShow (cap3.read (), display7)
  window.after (10, read_frame)

und letzte Funktion zeigen Video auf dem "imageFrame"

  

def webCameShow (N, Anzeige):      _, frameXX = N     cv2imageXX = cv2.cvtColor (frameXX, cv2.COLOR_BGR2RGBA)    imgXX = Bild.fromarray (cv2imageXX)    #imgtkXX = BildTk.PhotoImage (Bild = imgXX)     Display.imgtk = imgtkXX    Display.configure (image = imgtkXX)

Beispiel. 4-Webcam

Youtube: Youtube

    
quelle
2

Mit OPENCV und zwei Standard-USB-Kameras konnte ich Multithreading nutzen. Definieren Sie im Wesentlichen eine Funktion, die ein opencv-Fenster und ein VideoCapture-Element öffnet. Erstellen Sie dann zwei Threads mit der Kamera-ID und dem Fensternamen als Eingaben.

%Vor%

Große Ressource zum Erlernen, wie man in Python einfädelt: Ссылка

    
TheoreticallyNick 21.10.2017 17:19
quelle

Tags und Links