Настройка абсолютной экспозиции V4L2 (почти) не влияет - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь вручную управлять экспозицией своей камеры, но настройка активна только на короткое время, но, по-видимому, все еще активен автоматический режим, как я вижу на изображениях с камеры.

Моя камера имеет следующие элементы управления:

v4l2-ctl --list-ctrls-menus
                     brightness 0x00980900 (int)    : min=-127 max=128 step=1 default=0 value=0
                       contrast 0x00980901 (int)    : min=0 max=30 step=1 default=15 value=15
                     saturation 0x00980902 (int)    : min=0 max=127 step=1 default=54 value=54
                            hue 0x00980903 (int)    : min=-180 max=180 step=1 default=0 value=0
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=20 max=250 step=1 default=88 value=88
                           gain 0x00980913 (int)    : min=0 max=10 step=1 default=0 value=0
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
                0: Disabled
                1: 50 Hz
                2: 60 Hz
      white_balance_temperature 0x0098091a (int)    : min=2500 max=7000 step=1 default=6000 value=6000 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=60 step=1 default=10 value=10
         backlight_compensation 0x0098091c (int)    : min=0 max=2 step=1 default=0 value=0
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=1
                1: Manual Mode
                3: Aperture Priority Mode
              exposure_absolute 0x009a0902 (int)    : min=78 max=1250 step=1 default=312 value=1250
         exposure_auto_priority 0x009a0903 (bool)   : default=0 value=0

Я устанавливаю и проверяю, просматривая изображение через базовый просмотрщик c opencv, который не контролирует:

# Verify initial setting
$ v4l2-ctl -C exposure_auto
exposure_auto: 3

# Set auto-exposure to "Manual exposure time, manual iris."
$ v4l2-ctl -c exposure_auto=1

# Verify that manual setting is active
$ v4l2-ctl -C exposure_auto
exposure_auto: 1

# Set an absolute exposure value
$ v4l2-ctl -c exposure_absolute=1000

# Verify set absolute exposure
$ v4l2-ctl -C exposure_absolute
exposure_absolute: 1000

Я также играю с настройкой exposure_auto_priority.

Однако, когда я меняю экспозицию, я очень быстро вижу эффект на изображениях с камеры, которые сразу же кажутся go назад. в "автоматический" режим. Т.е. камера автоматически регулирует яркость.

Тот же эффект, который я наблюдаю, когда использую guvcview, что в основном дает мне ползунок для каждого из вышеперечисленных элементов управления. Когда я меняю экспозицию, она кратковременно применяется, но затем, кажется, применяется автоэкспозиция. Хотя сам параметр может быть подтвержден как установленный (используя v4l2-ctl -C ...).

Отключение white_balance_temperature_auto работает, и я также попытался поиграть с любым другим значением, но я не смог найти никакой зависимости от экспозиция.

Что может быть за пределами настроек ручной экспозиции?

Обновление

Некоторая системная информация:

Ядро:

$ uname -r
5.3.0-51-generic
cat /proc/version
Linux version 5.3.0-51-generic (buildd@lgw01-amd64-034) (gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)) #44-Ubuntu SMP Wed Apr 22 21:09:44 UTC 2020

Носитель:

$ media-ctl -p
Failed to enumerate /dev/media0 (-13)

$ ls /dev/media* 
/dev/media0  /dev/media1  /dev/media2

V4L2:

$ v4l2-ctl --all
Driver Info:
    Driver name      : uvcvideo
    Card type        : HBV HD CAMERA: HBV HD CAMERA
    Bus info         : usb-0000:05:00.3-1.1
    Driver version   : 5.3.18
    Capabilities     : 0x84a00001
        Video Capture
        Metadata Capture
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps      : 0x04200001
        Video Capture
        Streaming
        Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
    Width/Height      : 1920/1080
    Pixel Format      : 'MJPG' (Motion-JPEG)
    Field             : None
    Bytes per Line    : 0
    Size Image        : 4147200
    Colorspace        : sRGB
    Transfer Function : Default (maps to sRGB)
    YCbCr/HSV Encoding: Default (maps to ITU-R 601)
    Quantization      : Default (maps to Full Range)
    Flags             : 
Crop Capability Video Capture:
    Bounds      : Left 0, Top 0, Width 1920, Height 1080
    Default     : Left 0, Top 0, Width 1920, Height 1080
    Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 1920, Height 1080, Flags: 
Selection: crop_bounds, Left 0, Top 0, Width 1920, Height 1080, Flags: 
Streaming Parameters Video Capture:
    Capabilities     : timeperframe
    Frames per second: 30.000 (30/1)
    Read buffers     : 0
                     brightness 0x00980900 (int)    : min=-127 max=128 step=1 default=0 value=0
                       contrast 0x00980901 (int)    : min=0 max=30 step=1 default=15 value=15
                     saturation 0x00980902 (int)    : min=0 max=127 step=1 default=54 value=54
                            hue 0x00980903 (int)    : min=-180 max=180 step=1 default=0 value=0
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=20 max=250 step=1 default=88 value=88
                           gain 0x00980913 (int)    : min=0 max=10 step=1 default=0 value=0
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
      white_balance_temperature 0x0098091a (int)    : min=2500 max=7000 step=1 default=6000 value=6000 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=60 step=1 default=10 value=10
         backlight_compensation 0x0098091c (int)    : min=0 max=2 step=1 default=0 value=0
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
              exposure_absolute 0x009a0902 (int)    : min=78 max=1250 step=1 default=312 value=312 flags=inactive
         exposure_auto_priority 0x009a0903 (bool)   : default=0 value=1

1 Ответ

2 голосов
/ 05 мая 2020

Взгляните на Контроль времени экспозиции (Абсолют) в спецификации класса UV C, которую вы можете найти на usb.org. Я цитирую приведенную ниже версию spe c.

Обратите внимание, что ручное управление экспозицией дополнительно ограничено интервалом кадра, который всегда имеет более высокий приоритет. Если интервал кадра изменяется на значение ниже текущего значения контроля экспозиции, значение контроля экспозиции будет автоматически изменено. Значение контроля экспозиции по умолчанию будет текущим интервалом кадра, пока не будет выбрано явное значение экспозиции.

Итак, это объясняет, что вы видите. Абсолютное время экспозиции выражается в единицах 100 мкс. По умолчанию установлено значение 312, то есть 31200 мкс, и это дает частоту кадров ~ 32.

exposure_absolute 0x009a0902 (int)    : min=78 max=1250 step=1 default=312 value=312 flags=inactive

Frames per second: 30.000 (30/1)

Вы устанавливаете Абсолютное время экспозиции на 1000, что составляет 100000 мкс. Это вступает в силу, но тогда интервал кадра (31200 мкс) имеет приоритет, и он возвращается к 31200 мкс.

...