GNU/Linux >> Linux の 問題 >  >> Linux

python-opencv で利用可能なデバイスを一覧表示する

カメラを読み取っても何も返されなくなるまで、ウェブカメラのインデックスを反復処理することで、この問題を回避することができました:

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

このメソッドは、読み取り時に何かを返すすべてのインデックスのリストを返します。改善できると確信していますが、ウェブカメラの数はほとんどなく、これはかなり高速に実行されます。


@Patrick による素晴らしい回答ですが、改善したいのでまだコメントできません。

パトリックのセットアップでは、カメラ間に空のインデックスがないことを前提としていると思います。しかし、私の場合、内蔵カメラはインデックス 0 で、USB Web カメラはインデックス 2 でした。そのため、"if not cap.read()[0]" はインデックス 1 で while ループから抜け出し、他のものをキャッチすることはありませんでした。 .調べてチェックするインデックスの数を指定する必要があり、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

これにより、必要なインデックスが正常に取得されました。繰り返しになりますが、レイアウトを作成してくれた Patrick に感謝します。


以下に示すように、これは OpenCV の一般的な問題です。ビルトイン、または最初の USB カメラ (ビルトイン カムがない場合のみ) のみが OpenCV で動作するようです:

OpenCV でカメラを使用する方法

OpenCV、Cygwin 経由で USB ウェブカメラにアクセスできません

iSight (OSX) ではなく USB からの OpenCV キャプチャ

現在、この機能リクエストに記載されているように、カメラの数を抽出する方法はありません:

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


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. ランリブとは?

  2. 接続時に使用できるバッファ スペースがありません

  3. 軽量 X11 の代替品はありますか?

  1. MicrosoftTeamsがLinuxで利用可能になりました

  2. 記事は利用できなくなりました

  3. Matplotlib-Animation 利用可能な MovieWriter がありません

  1. 利用可能なすべての man ページのリスト

  2. Btrfs:3 台以上のデバイスで RAID 1

  3. VirtualBox で使用できる USB デバイスがありません