본문 바로가기
프로그래밍/V4L2

v4l-utils 을 이용한 카메라 설정 변경

by makepluscode 2022. 8. 28.
반응형

v4l-utils 을 이용한 카메라 설정 변경

v4l-utils 패키지에 포함된 v4l2-ctl 명령은 video4linux 장치, 비디오 등의 멀티미디어 장치를 설정하고 제어할 수 있도록 한다. 임베디드 시스템에서 v4l-utils 을 이용하여 카메라의 설정을 변경하는 예제를 정리한다.

 

v4l2-ctl - An application to control video4linux drivers. The v4l2-ctl tool is used to control video4linux devices, either video, vbi, radio or swradio, both input and output. It is able to control almost any aspect of such devices covering the full V4L2 API.

v4l-utils 을 이용한 카메라 설정 변경하기

테스트 환경

  • NVIDIA NX Xavier devkit
  • 5MP NVIDIA Jetson Nano Camera - e-con Systems
  • L4T R32.6.1 / Jetpack 4.6

Ubuntu 에서 v4l-utils 설치하기

터미널에서 apt-get 명령어로 v4l-utils 패키지를 설치한다.

$ sudo apt-get install v4l-utils

v4l-utils 패키지를 설치하면, v4l2-ctl 명령어를 사용할 수 있다. v4l2-ctl 명령어로 설정 가능한 옵션을 list-up 한다.

$ v4l2-ctl -d /dev/video0 --list-ctrls

User Controls

                     brightness 0x00980900 (int)    : min=-15 max=15 step=1 default=0 value=0 flags=slider
                       contrast 0x00980901 (int)    : min=0 max=30 step=1 default=10 value=10 flags=slider
                     saturation 0x00980902 (int)    : min=0 max=60 step=1 default=16 value=16 flags=slider
        white_balance_automatic 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=40 max=500 step=1 default=220 value=220 flags=slider
                           gain 0x00980913 (int)    : min=1 max=50 step=1 default=1 value=1
                horizontal_flip 0x00980914 (bool)   : default=0 value=0
                  vertical_flip 0x00980915 (bool)   : default=0 value=1
      white_balance_temperature 0x0098091a (int)    : min=1000 max=10000 step=1 default=4500 value=4500
                      sharpness 0x0098091b (int)    : min=0 max=127 step=1 default=16 value=16 flags=slider

Camera Controls

                  exposure_auto 0x009a0901 (menu)   : min=0 max=2 default=0 value=0
         exposure_time_absolute 0x009a0902 (int)    : min=1 max=4300 step=1 default=312 value=312
                   pan_absolute 0x009a0908 (int)    : min=-648000 max=648000 step=1 default=0 value=0
                  tilt_absolute 0x009a0909 (int)    : min=-648000 max=648000 step=1 default=0 value=0
                  zoom_absolute 0x009a090d (int)    : min=100 max=800 step=1 default=100 value=100
                roi_window_size 0x009a0924 (int)    : min=8 max=64 step=8 default=24 value=24 flags=slider
                   roi_exposure 0x009a0926 (int)    : min=0 max=65535 step=1 default=32896 value=32896 flags=slider
                        denoise 0x009a092d (int)    : min=0 max=15 step=1 default=8 value=8 flags=slider
          exposure_compensation 0x009a0931 (int)    : min=8000 max=430000 step=1 default=140000 value=140000 flags=slider
                    bypass_mode 0x009a2064 (intmenu): min=0 max=1 default=0 value=0
                override_enable 0x009a2065 (intmenu): min=0 max=1 default=0 value=0
                   height_align 0x009a2066 (int)    : min=1 max=16 step=1 default=1 value=1
                     size_align 0x009a2067 (intmenu): min=0 max=2 default=0 value=0
               write_isp_format 0x009a2068 (int)    : min=1 max=1 step=1 default=1 value=1
       sensor_signal_properties 0x009a2069 (u32)    : min=0 max=4294967295 step=1 default=0 [30][18] flags=read-only, has-payload
        sensor_image_properties 0x009a206a (u32)    : min=0 max=4294967295 step=1 default=0 [30][16] flags=read-only, has-payload
      sensor_control_properties 0x009a206b (u32)    : min=0 max=4294967295 step=1 default=0 [30][36] flags=read-only, has-payload
              sensor_dv_timings 0x009a206c (u32)    : min=0 max=4294967295 step=1 default=0 [30][16] flags=read-only, has-payload
               low_latency_mode 0x009a206d (bool)   : default=0 value=0
               preferred_stride 0x009a206e (int)    : min=0 max=65535 step=1 default=0 value=0
                   sensor_modes 0x009a2082 (int)    : min=0 max=30 step=1 default=30 value=6 flags=read-only

 

예제에서 사용하는 카메라의 경우, 위와 같은 값을 설정할 수 있다.

v4l2-ctl 를 통한 flip 예제

예를 들어 v4l2-ctl 명령어를 사용하여 vertical_flip 을 변경하여 상하반전을 해보자. v4l2-ctl 명령어 중에 -C 를 통해 현재의 설정값을 읽을 수 있고, -c 를 통해 설정값을 변경 할 수 있다.

$ v4l2-ctl -d /dev/video0 -C vertical_flip
vertical_flip: 1
$ v4l2-ctl -d /dev/video0 -c vertical_flip=0
$ v4l2-ctl -d /dev/video0 -C vertical_flip
vertical_flip: 0

다음과 같은 스크립트를 만들어서 자동으로 실행하는 방법을 추천한다.

$ cat start.sh
#!/bin/bash

v4l2-ctl -d /dev/video0 -c vertical_flip=1
v4l2-ctl -d /dev/video1 -c vertical_flip=1

참고자료

아래 manpage 를 참고한다.

https://manpages.ubuntu.com/manpages/bionic/man1/v4l2-ctl.1.html

 

Ubuntu Manpage: v4l2-ctl - An application to control video4linux drivers

Powered by the Ubuntu Manpage Repository, file bugs in Launchpad © 2019 Canonical Ltd. Ubuntu and Canonical are registered trademarks of Canonical Ltd.

manpages.ubuntu.com

반응형