GNU/Linux >> Tutoriels Linux >  >> Linux

Liste des appareils disponibles dans python-opencv

J'ai pu contourner ce problème en parcourant les index de la webcam jusqu'à ce que la lecture de cette caméra ne renvoie plus rien :

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

Cette méthode renvoie une liste de tous les index qui renvoient quelque chose lors de la lecture; Je suis sûr qu'il peut être amélioré, mais il n'y a presque jamais plus que quelques webcams et cela fonctionne assez rapidement.


Excellente réponse de @Patrick, mais j'aimerais l'améliorer et je ne peux pas encore commenter.

Je pense que la configuration de Patrick suppose que les caméras n'ont pas d'index vides entre elles. Mais dans mon cas, ma caméra intégrée était à l'index 0 et la webcam USB était à l'index 2. Donc "if not cap.read()[0]" est sorti de la boucle while à l'index 1, sans jamais attraper les autres . Nous devons spécifier le nombre d'index que nous sommes prêts à parcourir et à vérifier, et simplement ne pas ajouter ceux qui sont nuls.

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

Cela m'a donné avec succès les index dont j'ai besoin. Encore merci à Patrick pour la mise en page !


C'est un problème général d'OpenCV, comme vous pouvez le voir ci-dessous. Il semble que seule la caméra intégrée, ou la première caméra USB (uniquement si vous n'avez pas de caméra intégrée) fonctionne dans OpenCV :

Comment utiliser une caméra avec OpenCV

Impossible d'accéder à la webcam USB via OpenCV, Cygwin

Capture OpenCV depuis USB et non iSight (OSX)

Actuellement, il n'existe aucun moyen d'extraire le nombre de caméras, comme indiqué dans cette demande de fonctionnalité :

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


Il est possible de créer une liste de caméras sans utiliser 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. Microsoft Teams est désormais disponible sur Linux

  2. Matplotlib-Animation Aucun MovieWriters disponible

  3. Liste de toutes les pages de manuel disponibles

  4. qu'est-ce que ranlib?

  5. Aucun périphérique USB disponible dans VirtualBox

Ubuntu 18.04 Bionic Beaver disponible au téléchargement

Fonds d'écran Fedora 30 disponibles au téléchargement

Ubuntu 21.10 « Impish Indri » disponible au téléchargement

Qu'est-ce que I2C (Inter-Integrated-Circuit) ?

Top 10 des distributions Linux

Empêcher la page de liste "Index de" à l'aide du gestionnaire d'index