GNU/Linux >> Belajar Linux >  >> Linux

Daftar perangkat yang tersedia di python-opencv

Saya dapat mengatasi masalah ini dengan mengulangi indeks webcam hingga membaca bahwa kamera tidak lagi mengembalikan apa pun:

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

Metode ini mengembalikan daftar semua indeks yang mengembalikan sesuatu saat dibaca; Saya yakin ini dapat diperbaiki, tetapi hampir tidak pernah ada lebih dari beberapa webcam dan ini berjalan cukup cepat.


Jawaban yang bagus dari @Patrick, tapi saya ingin memperbaikinya dan belum bisa berkomentar.

Saya pikir pengaturan Patrick mengasumsikan bahwa kamera tidak memiliki indeks kosong di antaranya. Namun dalam kasus saya, kamera bawaan saya berada di indeks 0, dan webcam USB berada di indeks 2. Jadi "if not cap.read()[0]" keluar dari while loop di indeks 1, tidak pernah menangkap yang lain . Kita harus menentukan berapa banyak indeks yang ingin kita periksa dan periksa, dan jangan menambahkan indeks yang 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

Ini berhasil memberi saya indeks yang saya butuhkan. Sekali lagi, terima kasih kepada Patrick untuk tata letaknya!


Ini adalah masalah umum OpenCV, seperti yang Anda lihat di bawah. Tampaknya hanya kamera bawaan, atau kamera USB pertama (hanya jika Anda tidak memiliki kamera bawaan) yang berfungsi di OpenCV:

Cara menggunakan kamera dengan OpenCV

Tidak dapat mengakses webcam usb melalui OpenCV, Cygwin

Pengambilan OpenCV dari USB bukan iSight (OSX)

Saat ini, tidak ada cara untuk mengekstrak jumlah kamera, seperti yang tercantum dalam permintaan fitur ini:

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


Dimungkinkan untuk membuat daftar kamera tanpa menggunakan 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 Tidak Ada Penulis Film yang Tersedia

  2. Daftar semua halaman manual yang tersedia

  3. apa itu ranlib?

  1. Tidak ada perangkat USB yang tersedia di VirtualBox

  2. Tidak ada ruang buffer yang tersedia saat terhubung

  3. Tersedia alternatif X11 yang ringan?

  1. Microsoft Teams Sekarang Tersedia di Linux

  2. Artikel tidak lagi tersedia

  3. Mentransfer konten perangkat blok