GNU/Linux >> Linux Esercitazione >  >> Linux

Elenco dei dispositivi disponibili in python-opencv

Sono stato in grado di aggirare questo problema ripetendo gli indici della webcam fino a quando la lettura della fotocamera non restituisce più nulla:

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

Questo metodo restituisce un elenco di tutti gli indici che restituiscono qualcosa quando vengono letti; Sono sicuro che può essere migliorato, ma non ci sono quasi mai più di poche webcam e funziona abbastanza velocemente.


Ottima risposta di @Patrick, ma mi piacerebbe migliorarla e non posso ancora commentare.

Penso che l'impostazione di Patrick presupponga che le telecamere non abbiano indici vuoti tra di loro. Ma nel mio caso, la mia fotocamera integrata era all'indice 0 e la webcam USB era all'indice 2. Quindi "if not cap.read()[0]" è uscito dal ciclo while all'indice 1, senza mai catturare gli altri . Dobbiamo specificare quanti indici siamo disposti a esaminare e controllare, e semplicemente non aggiungere quelli che sono nulli.

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

Questo mi ha fornito con successo gli indici di cui ho bisogno. Ancora grazie a Patrick per il layout!


Questo è un problema generale di OpenCV, come puoi vedere di seguito. Sembra che solo la cam incorporata o la prima USB cam (solo se non hai una cam incorporata) funzioni in OpenCV:

Come utilizzare una fotocamera con OpenCV

Impossibile accedere alla webcam USB tramite OpenCV, Cygwin

Acquisizione OpenCV da USB non iSight (OSX)

Al momento, non è possibile estrarre il numero di telecamere, come elencato in questa richiesta di funzionalità:

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


È possibile creare un elenco di telecamere senza utilizzare 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 Nessun MovieWriter disponibile

  2. Elenco di tutte le pagine man disponibili

  3. Btrfs:RAID 1 su 3+ dispositivi

  4. Nessun dispositivo USB disponibile in VirtualBox

  5. Nessuno spazio buffer disponibile su connect

Ubuntu 18.04 Bionic Beaver disponibile per il download

Fedora 30 sfondi disponibili per il download

Ubuntu 21.10 "Impish Indri" disponibile per il download

Che cos'è I2C (circuito inter-integrato)?

Le 10 migliori distribuzioni Linux

Impedire la pagina di elenco "Index Of" utilizzando Index Manager