새소식

사용팁/RaspberryPi

카메라 포커스(fswebcam focus, v4l2-ctl) 옵션

  • -

기록용으로 남깁니다.

raspberry pi 4 에서 fswebcam 으로 사진을 찍을 때 조명이 부족한 야간에 포커스를 자동으로 잡지 못해서 사진이 뿌옇게 나오는 경우가 있었습니다.

문서를 찾아보던 중 github 이슈 페이지에서 힌트를 얻어 일단 auto focus 를 끄고 강제로 focus 값을 지정하는 코드까지는 확인했습니다. 하지만, 사무실에서 테스트용으로 옵션 변경해서 얻은 실제 화질은 크게 차이가 나지 않아서 실제 외부에서 focus 값이 어떻게 얼마나 영향을 주는지를 확인해봐야 하는 작업이 남았습니다..

fswebcam --list-controls 명령으로 현재 지정된 옵션과 지정 가능한 값 범위(Range)를 확인합니다.

$ fswebcam --list-controls
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Available Controls        Current Value   Range
------------------        -------------   -----
Brightness                0 (50%)         -64 - 64
Contrast                  32 (32%)        0 - 100
Saturation                50 (50%)        0 - 100
Hue                       0 (50%)         -180 - 180
White Balance Temperature, Auto True            True | False
Gamma                     300 (50%)       100 - 500
Gain                      64 (50%)        0 - 128
Power Line Frequency      50 Hz           Disabled | 50 Hz | 60 Hz
White Balance Temperature 4600 (48%)      2800 - 6500
Sharpness                 0 (0%)          0 - 100
Backlight Compensation    0               0 - 2
Exposure, Auto            Aperture Priority Mode Manual Mode | Aperture Priority Mode
Exposure (Absolute)       625 (5%)        50 - 10000
Exposure, Auto Priority   True            True | False
Focus (absolute)          68 (6%)         0 - 1023
Focus, Auto               True            True | False
Adjusting resolution from 384x288 to 424x240.

Focus 항목을 수정해야 하는데 그냥 --set Focus, Auto=False --set Focus (absolute)=1 같이 지정하면 옵션이 인식안되고 옵션 이름으로 파일이 저장되었습니다..
아래와 같이 큰 따옴표로 묶어 주니 해당 옵션이 지정되는 것으로 보입니다.

$ fswebcam -r 640x480 --rotate 180 -S 50 --set brightness=50% --jpeg 95 --set "Focus, Auto"=False --set "Focus (Absolute)"=10 k10.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Setting Brightness to 0 (50%).
Setting Focus (absolute) to 10 (0%).
Setting Focus, Auto to False (0).
--- Capturing frame...
Skipping 50 frames...
Capturing 1 frames...
Captured 51 frames in 1.67 seconds. (30 fps)
--- Processing captured image...
Flipping image horizontally.
Flipping image vertically.
Setting output format to JPEG, quality 95
Writing JPEG image to 'k10.jpg'.

참고로 라즈베리파이v2/v3 등의 csi 카메라는 fswebcam 에서 잘 인지하지 못할 때가 있습니다.

v4l2-ctl 명령으로 해당 상태를 조회한 다음 원하는 상태로 변경해야 합니다.

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

v4l2-ctl -d /dev/video0 --list-ctrls
                     brightness 0x00980900 (int)    : min=-64 max=64 step=1 default=0 value=0
                       contrast 0x00980901 (int)    : min=0 max=100 step=1 default=32 value=32
                     saturation 0x00980902 (int)    : min=0 max=100 step=1 default=50 value=50
                            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=100 max=500 step=1 default=300 value=300
                           gain 0x00980913 (int)    : min=0 max=128 step=1 default=64 value=64
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
      white_balance_temperature 0x0098091a (int)    : min=2800 max=6500 step=10 default=4600 value=4600 flags=inactive
                      sharpness 0x0098091b (int)    : min=0 max=100 step=1 default=0 value=0
         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=50 max=10000 step=1 default=625 value=625 flags=inactive
         exposure_auto_priority 0x009a0903 (bool)   : default=0 value=1
                 focus_absolute 0x009a090a (int)    : min=0 max=1023 step=1 default=68 value=230
                     focus_auto 0x009a090c (bool)   : default=1 value=0


아래 명령으로 자동 포커스를 끄고 포커스 값을 160으로 변경했습니다.
v4l2-ctl --set-ctrl=focus_auto=0
v4l2-ctl --set-ctrl=focus_absolute=160

사진 포커스가 변화된 것을 확인할 수 있었습니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.