我想知道是否有任何方法可以从 Ubuntu 命令行提取有关系统中内置网络摄像头的硬件特定信息。
基本上,我想提取视场和焦距相机,用于其他程序。这些信息是否已存储?
谢谢!
答案1
尝试lsusb -v
或lsusb
例如:
description: Video
product: Laptop Integrated Webcam
vendor: OmniVision Technologies, Inc. -2640-07.05.16.3
bus info: usb@4:6
version: 1.00
capabilities: usb-2.00
configuration: driver=uvcvideo maxpower=500mA speed=480.0MB/s
答案2
您可以使用V4L2 接口从 python 获取这样的值,例如:
V4L2_CID_EXPOSURE_AUTO (枚举 v4l2_exposure_auto_type)启用曝光时间和/或光圈的自动调整。启用这些功能时,手动更改曝光时间或光圈的效果未定义,驱动程序应忽略此类请求。可能的值是:
V4L2_EXPOSURE_AUTO 自动曝光时间,自动光圈。V4L2_EXPOSURE_MANUAL 手动曝光时间,手动光圈。V4L2_EXPOSURE_SHUTTER_PRIORITY 手动曝光时间,自动光圈。V4L2_EXPOSURE_APERTURE_PRIORITY 自动曝光时间,手动光圈。
和
V4L2_CID_焦点_自动 (布尔值)启用自动对焦调整。启用此功能时手动对焦调整的效果未定义,驱动程序应忽略此类请求。
以下脚本仅获取上述两个值,但您可以使用/找到更多设置https://pypi.python.org/pypi/v4l2。
#!/usr/bin/env python3
import ctypes
import fcntl
_IOC_NRBITS = 8
_IOC_TYPEBITS = 8
_IOC_SIZEBITS = 14
_IOC_NRSHIFT = 0
_IOC_TYPESHIFT = _IOC_NRSHIFT + _IOC_NRBITS
_IOC_SIZESHIFT = _IOC_TYPESHIFT + _IOC_TYPEBITS
_IOC_DIRSHIFT = _IOC_SIZESHIFT + _IOC_SIZEBITS
_IOC_WRITE = 1
_IOC_READ = 2
V4L2_CTRL_CLASS_CAMERA = 0x009a0000
V4L2_CID_CAMERA_CLASS_BASE = V4L2_CTRL_CLASS_CAMERA | 0x900
V4L2_CID_EXPOSURE_AUTO = V4L2_CID_CAMERA_CLASS_BASE + 1
V4L2_CID_FOCUS_AUTO = V4L2_CID_CAMERA_CLASS_BASE + 12
def _IOC(dir_, type_, nr, size):
return (
ctypes.c_int32(dir_ << _IOC_DIRSHIFT).value |
ctypes.c_int32(ord(type_) << _IOC_TYPESHIFT).value |
ctypes.c_int32(nr << _IOC_NRSHIFT).value |
ctypes.c_int32(size << _IOC_SIZESHIFT).value)
def _IOC_TYPECHECK(t):
return ctypes.sizeof(t)
def _IOWR(type_, nr, size):
return _IOC(_IOC_READ | _IOC_WRITE, type_, nr, _IOC_TYPECHECK(size))
class v4l2_control(ctypes.Structure):
_fields_ = [
('id', ctypes.c_uint32),
('value', ctypes.c_uint32),
]
VIDIOC_G_CTRL = _IOWR('V', 27, v4l2_control)
exposure = v4l2_control(V4L2_CID_EXPOSURE_AUTO)
focus_auto = v4l2_control(V4L2_CID_FOCUS_AUTO)
with open('/dev/video1', 'r') as vd:
fcntl.ioctl(vd, VIDIOC_G_CTRL, exposure)
fcntl.ioctl(vd, VIDIOC_G_CTRL, focus_auto)
print("exposure auto: %i" % exposure.value)
print("focus auto : %i" % focus_auto.value)