【Python】カメラのデバイスIDなどのデバイス情報を取得する


今回はPythonプログラムからカメラのデバイス番号(ID)、解像度、FPS、バックエンド名を取得する方法をご紹介します。

OpenCVのおかげで、PythonプログラムでUSBカメラの画像取得や動画保存がかんたんに行えます。
この時に必ず登場するのがカメラのデバイス番号(ID)です。
1台しか繋いでいない場合は、cap = cv2.VideoCapture(0)で事足りました。

ではカメラ2台になったら?

急に何番にどれが繋がっている?となります。
例えばノートPCはPC固有のカメラが0番で、USBポートに接続したwebカメラは1番となったりします。
こういったカメラ複数の場合に、何番のデバイスIDが繋がっているか調べられると助かります。
調べ方はとても簡単です。

やること
・OpenCVのインストール
・デバイスIDを取得
・解像度、フレームレート、バックエンド名の取得

それでは順に見ていきましょう!
最後にサンプルコード形式も載せています!

目次

やること

OpenCVのインストール

何はともあれ、OpenCVが無いと始まりません。
インストールがまだの方はインストールしておきます。

pip install opencv-python

デバイスIDを取得

カメラのデバイスIDを取得します。
取得にもOpenCVを使います。

import cv2

for camera_id in range(10):
    try:
        camera = cv2.VideoCapture(camera_id)
        print(f"Camera ID: {camera_id}")
    except Exception as e:
        print(f"{camera_id}: None")

カメラをオープンできるか試し、オープンできた番号を表示しています。
カメラIDを取得するというより、番号を決め打ちで走査ですね。

解像度、フレームレート、バックエンド名の取得

カメラIDが見つかれば、後は応用です。
同じように解像度、フレームレート、バックエンド名を取得できます。

import cv2
 
camera = cv2.VideoCapture(camera_id)
camera_info = cv2.VideoCapture(camera_id).getBackendName()
frame_width = int(camera.get(3))
frame_height = int(camera.get(4))
frame_rate = camera.get(5)

camera_idは先ほど試したデバイスIDです。0とか1とかの整数値です。

サンプルコード

これらを合体したものが次になります。

import cv2

for camera_id in range(10):
    try:
        camera = cv2.VideoCapture(camera_id)
        camera_info = cv2.VideoCapture(camera_id).getBackendName()
        frame_width = int(camera.get(3))
        frame_height = int(camera.get(4))
        frame_rate = camera.get(5)
        
        print(f"Camera ID: {camera_id}")
        print(f"Backend Name: {camera_info}")
        print(f"Resolution: {frame_width}x{frame_height}")
        print(f"Frame Rate: {frame_rate} fps")
    except Exception as e:
        print(f"{camera_id}: None")

実行結果がこちらになります。


実施した環境では、次を接続していました。
0:ノートPC備え付けのカメラ
1:USBカメラ

どちらも解像度が640×480で、30fpsのカメラでした。
バックエンド名のMSMFは、Microsoft Media Foundationの略です。
MicrosoftがWindowsプラットフォーム上でメディア関連の機能を提供するために開発したフレームワークで動いているよ、となります。

調べてみたところ、バックエンド名の例は下記があるようです。

v4l2: Video4Linux2(V4L2)は、Linux上でビデオキャプチャデバイスと対話するためのフレームワーク
gstreamer: GStreamerは、Linux上でのメディア処理に使用されるフレームワーク
ds: DirectShowは、Windowsプラットフォーム上でメディアデバイスと対話するためのAPI
ffmpeg: FFmpegは、多くのマルチメディアファイルフォーマットに対応するオープンソースのマルチメディアフレームワーク

今回は以上となります。
この記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次