接続中のカメラ番号を抽出する 【Open CV & Python】

programming Python

PC に接続してある USB カメラのカメラ番号を抽出する Python のスクリプトについてまとめておきます。

以下の環境で動作確認をしています。
環境: Windows 10、USB カメラ Python 3.x と OpenCV をインストールしています。

背景

Python を使うと、画像処理などが比較的簡単に実現できます。
もし、手元に USB カメラがあれば、ライブ画像でのバーコードの読み取りや顔画像の検出なども可能です。

しかし、パソコンに Python と OpenCV をインストールして、USB カメラを動かそうとすると、プログラム上で設定する必要のあるポート番号は、USB のポートの位置により変化します。プログラムで何番に設定したらよいのか明確ではありません。
また、USB カメラやパソコンが最新の製品ではない場合、そもそも、そのパソコンとカメラの組み合わせで、ハードウェアが動くのかすらわかりません。

そこで、PC に 接続されているカメラのデバイス番号(ポート番号)を簡単に確認できるプログラムを作成しましたので、公開しておきます。

Web カメラが複数接続されているときであっても、カメラが認識できているかどうか、また、デバイス番号はどうなっているか、簡単に確認できます。
スクリプトでは、余計な記載はできるだけ削り、最小限の知識で使いまわすことができるようまとめておきます。

サンプルコード:カメラ番号の検出

import cv2

for i1 in range(0, 20): 
    cap1 = cv2.VideoCapture( i1, cv2.CAP_DSHOW )
    if cap1.isOpened(): 
        print("VideoCapture(", i1, ") : Found")
    else:
        print("VideoCapture(", i1, ") : None")
    cap1.release() 

使い方

① camera_detector1.py 等のファイル名でテキストファイルを作成して上記のスクリプトをコピー&ペーストして保存してください。
② USB ポート等にカメラを接続し、コマンドプロンプトから①のスクリプトを実行してください。カメラが動作していると “Found” と示されます。カメラは20台(0, 1, …, 19)までチェックするようにしています。必要により修正してください。

まとめ

Python の OpenCV で、接続中のカメラ番号を抽出するサンプルコードをまとめました。

OpenCV で関数 cv2.VideoCapture() を使ってプログラミングをする際、カメラ番号の確認に使用できます。
古い USB カメラがあったとき、有効活用できそうか確認する際にも使えます。カメラ番号が抽出できていれば動くと思います。

※ 私の事例では、10年くらい前の USB カメラを接続して上記のスクリプトを実行してみたところ、Raspberry Pi では認識できて、カメラも正常に動きました。しかし、Windows 10 では、カメラの認識自体ができなくなっていました。そこで、古いカメラは Raspberry Pi 専用で使うことにし、Windows 用としては追加で、新しい USB カメラを購入しました(下記)。
なお、OpenCV などの画像処理用に新たにカメラを購入されるのであれば、プログラムが動かないときに原因特定が簡単となるよう、ピント合わせが可能なカメラ(マニュアルフォーカスかオートフォーカスのもの)をお勧めします。最近、固定焦点のカメラが増えているように思うためです。

関連リンク
・ 【Python】 USB カメラ 購入レポート【おすすめ、画像処理】
・ 【Python】 バーコードリーダ 【tkinter】
・ 【Python】 顔認識ソフトウェア 【OpenCV】
・ 【Tensorflow Lite】 Raspberry Pi で物体検出をやってみた
・ 【Python】 OpenCV の動作確認用サンプルコード 【USB カメラ】

タイトルとURLをコピーしました