システムに接続されている特定のカメラを使用する必要があるスクリプトを作成しています。
$ lsusb|grep C930e
Bus 001 Device 011: ID 046d:0843 Logitech, Inc. Webcam C930e
Lsusb出力から特定のデバイスIDに対応する/ dev/video *デバイスをプログラムで検出するにはどうすればよいですか?
これは簡単なはずですが、どうやらキーワードが足りないようです。 :-D
別のパッケージをインストールする必要があるにもかかわらず、私は自分がはるかに良い答えだと思うものを決定しました。インストールv4l-utils
(debian)は便利なv4l2-ctl
コマンド:
$ v4l2-ctl --list-devices
HPigh Definition Webcam (usb-0000:00:14.0-11):
/dev/video2
UVC Camera (046d:0821) (usb-0000:00:14.0-13):
/dev/video0
Logitech Webcam C930e (usb-0000:00:14.0-9):
/dev/video1 1.0MP H
。 。 。このようにアクセスすることができます:
def find_cam(cam):
cmd = ["/usr/bin/v4l2-ctl", "--list-devices"]
out, err = Popen(cmd, stdout=PIPE, stderr=PIPE).communicate()
out, err = out.strip(), err.strip()
for l in [i.split("\n\t") for i in out.split("\n\n")]:
if cam in l[0]:
return l[1]
return False
要旨 ここ 。
上記の@infixedで述べたように、/ sys/class/video4linuxディレクトリには必要なものが含まれています。これは脆弱な例です。
#!/usr/bin/env python
import sys
import os
def find_cam_dev(cam):
v4l2path = "/sys/class/video4linux"
for base, subs, filenames in os.walk(v4l2path , followlinks=True):
for filename in filenames:
if filename == "name":
pth = os.path.join(base, filename)
with open(pth, "r") as f:
name = f.read()
if cam in name:
return os.path.split(base)[1]
if __name__ == "__main__":
cam = "C930e"
print(find_cam_dev(cam))