今回は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は、多くのマルチメディアファイルフォーマットに対応するオープンソースのマルチメディアフレームワーク
今回は以上となります。
この記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!