How do I get хардвер info about my laptop для полуторной кровати?

I want to know if there is any way to extract хардвер specific information about the built-in webcam in my system from the Ubuntu command line.

Basically, I want to extract the field of view and фокусный для полуторной кровати length of the, to использовал in another program. Is this info even stored?

Thanks!

2
задан 15 December 2015 в 18:15

2 ответа

попробуйте 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
0
ответ дан 2 December 2019 в 23:35

Можно использовать V4L2 API из 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_FOCUS_AUTO (булевская переменная) Включает автоматические корректировки фокуса. Эффект ручных корректировок фокуса, в то время как эта опция активирована, не определен, драйверы должны проигнорировать такие запросы.

следующий сценарий просто получает два выше значений, но можно использовать/находить больше настроек в 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)
0
ответ дан 2 December 2019 в 23:35

Другие вопросы по тегам:

Похожие вопросы: