GNU/Linux >> Znalost Linux >  >> Linux

Výpis dostupných zařízení v python-opencv

Tento problém se mi podařilo obejít opakováním indexů webové kamery, dokud čtení této kamery již nic nevrací:

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

Tato metoda vrací seznam všech indexů, které při čtení něco vracejí; Jsem si jistý, že se to dá vylepšit, ale málokdy existuje více než několik webových kamer a to běží docela rychle.


Skvělá odpověď od @Patrick, ale rád bych ji vylepšil a zatím nemohu komentovat.

Myslím, že Patricks setup předpokládá, že kamery mezi sebou nemají prázdné indexy. Ale v mém případě byla moje vestavěná kamera na indexu 0 a webová kamera USB na indexu 2. Takže „if not cap.read()[0]“ se vylomilo ze smyčky while na indexu 1 a nikdy nezachytilo ostatní . Musíme určit, kolik indexů jsme ochotni přejít a zkontrolovat, a prostě nepřidávat ty, které jsou null.

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

To mi úspěšně poskytlo indexy, které potřebuji. Ještě jednou díky Patrikovi za layout!


Toto je obecný problém OpenCV, jak můžete vidět níže. Zdá se, že v OpenCV funguje pouze vestavěná nebo první USB kamera (pouze pokud vestavěnou kameru nemáte):

Jak používat kameru s OpenCV

Nelze získat přístup k usb webové kameře přes OpenCV, Cygwin

Zachycení OpenCV z USB, nikoli iSight (OSX)

V současné době neexistuje způsob, jak extrahovat počet kamer, jak je uvedeno v této žádosti o funkci:

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


Je možné vytvořit seznam kamer bez použití cap.read().

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. Matplotlib-Animation Nejsou k dispozici žádné filmaře

  2. Btrfs:RAID 1 na 3+ zařízeních

  3. Při připojení není k dispozici vyrovnávací paměť

  1. Microsoft Teams je nyní k dispozici na Linuxu

  2. Je k dispozici lehká alternativa X11?

  3. Přenos obsahu blokových zařízení

  1. Článek již není dostupný

  2. Seznam všech dostupných manuálových stránek

  3. co je ranlib?