GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verfügbare Geräte in python-opencv auflisten

Ich konnte dieses Problem umgehen, indem ich die Webcam-Indizes durchlaufen habe, bis ich gelesen habe, dass die Kamera nichts mehr zurückgibt:

index = 0
arr = []
while True:
    cap = cv2.VideoCapture(index)
    if not cap.read()[0]:
        break
    else:
        arr.append(index)
    cap.release()
    index += 1
return arr

Diese Methode gibt eine Liste aller Indizes zurück, die beim Lesen etwas zurückgeben; Ich bin mir sicher, dass es verbessert werden kann, aber es gibt kaum mehr als ein paar Webcams und das läuft ziemlich schnell.


Tolle Antwort von @Patrick, aber ich würde sie gerne verbessern und kann noch nichts dazu sagen.

Ich denke, Patricks Setup geht davon aus, dass die Kameras keine leeren Indizes dazwischen haben. Aber in meinem Fall befand sich meine eingebaute Kamera auf Index 0 und die USB-Webcam auf Index 2. Also brach "if not cap.read()[0]" aus der while-Schleife bei Index 1 aus, ohne die anderen zu erfassen . Wir müssen angeben, wie viele Indizes wir durchgehen und prüfen möchten, und nur diejenigen nicht hinzufügen, die null sind.

def returnCameraIndexes():
    # checks the first 10 indexes.
    index = 0
    arr = []
    i = 10
    while i > 0:
        cap = cv2.VideoCapture(index)
        if cap.read()[0]:
            arr.append(index)
            cap.release()
        index += 1
        i -= 1
    return arr

Dies gab mir erfolgreich die Indizes, die ich brauche. Nochmals vielen Dank an Patrick für das Layout!


Dies ist ein allgemeines Problem von OpenCV, wie Sie unten sehen können. Es scheint, dass nur die eingebaute oder die erste USB-Kamera (nur wenn Sie keine eingebaute Kamera haben) in OpenCV funktioniert:

So verwenden Sie eine Kamera mit OpenCV

Zugriff auf USB-Webcam über OpenCV, Cygwin nicht möglich

OpenCV-Erfassung von USB, nicht von iSight (OSX)

Derzeit gibt es keine Möglichkeit, die Anzahl der Kameras zu extrahieren, wie in dieser Funktionsanfrage aufgeführt:

https://code.ros.org/trac/opencv/ticket/935


Es ist möglich, eine Liste von Kameras zu erstellen, ohne cap.read() zu verwenden.

import cv2

index = 0
arr = []
while True:
    cap = cv2.VideoCapture(index)
    try:
        if cap.getBackendName()=="MSMF":
            arr.append(index)
    except:
        break
    cap.release()
    index += 1

print(arr)

Linux
  1. Artikel nicht mehr lieferbar

  2. Matplotlib-Animation Keine MovieWriters verfügbar

  3. Keine USB-Geräte in VirtualBox verfügbar

  4. Kein Pufferspeicherplatz beim Verbinden verfügbar

  5. Leichte X11-Alternative verfügbar?

Ubuntu 18.04 Bionic Beaver zum Download verfügbar

Fedora 30-Hintergründe zum Herunterladen verfügbar

Ubuntu 21.10 „Impish Indri“ zum Download verfügbar

Was ist I2C (Inter-Integrated-Circuit)?

Top 10 Linux-Distributionen

Verhindern der Auflistungsseite „Index von“ mithilfe des Index-Managers