RaspberryPi

ラズパイ+Webカメラでタイムラプス撮影してみた 撮影設定編

More than 3 years have passed since last update.

前回 環境構築編 の続きです。

Webカメラ占有問題

Webカメラで画像を撮影できるソフトをインストールし,試してみるWebカメラが占有されており,撮影に失敗しました。

$ fswebcam a.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Error selecting input 0
VIDIOC_S_INPUT: Device or resource busy // デバイスが占有されている

プロセスを観察し,動作しているアプリケーションを調べていくと

motionというWebカメラを使うツールが起動している事が判明

$ ps ax

2212 ? Sl 0:05 /usr/bin/motion
~~~
```

自動起動しているのでこのサービスを停止,自動起動しないようにします。

参考
Debianの不要なサービスの自動起動を停止

unlevel を調べる

# runlevel
N 2

runlevel 2で起動されるサービスを参照しmotionの自動起動設定を発見

サービスを停止し,自動起動の設定を消去する

そして,再起動し,motionが自動起動していないことを確認

$ ls -la /etc/rc2.d/ |grep motion
lrwxrwxrwx   1 root root   16  6月 26 22:54 S02motion -> ../init.d/motion
# /etc/rc2.d/S02motion stop // サービスの停止
[ ok ] Stopping motion detection daemon: motion.
# update-rc.d motion remove //自動起動設定の消去
update-rc.d: using dependency based boot sequencing

# reboot

# ps ax |grep motion
 2366 pts/0    S+     0:00 grep --color=auto motion

$ fswebcam -r 640x512 -d /dev/video0 test.jpg
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 640x512 to 640x480.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'test.jpg'. // 撮影出来た

一定間隔で撮影するスクリプトを作成

Web Camera BSW32KM03BKでうまくいった設定は以下のとおり

Capture.sh
# bin/Bash

while true; do
    sleep 10;
    fswebcam --no-banner -p MJPEG -S 2 --set brightness=55% --set "White Balance Temperature, Auto"=False -r 1920×1080 /home/pi/timelapse/`date +%Y%m%d/%H-%M-%S`.jpg;
done

setのオプションで設定できる項目はカメラによって異なるようです

確認は--list-controlsオプションで確認できます

$ fswebcam -d /dev/video0 --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                25 (54%)        -255 - 255
Contrast                  32 (12%)        0 - 255
Saturation                64 (25%)        0 - 255
Hue                       0               -4 - 4
White Balance Temperature, Auto False           True | False
Gamma                     100 (17%)       16 - 500
Power Line Frequency      60 Hz           Disabled | 50 Hz | 60 Hz
White Balance Temperature 5200 (66%)      2662 - 6500
Sharpness                 25 (19%)        0 - 127
Backlight Compensation    0               0 - 1
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Captured frame in 0.00 seconds.
--- Processing captured image...
There are unsaved changes to the image.

カメラをアクティブにした数フレームは映像が正しく撮影できない問題が発生していました

そこで,以下のオプションでカメラをアクティブにして2フレーム後に撮影するようにしました

-S 2

デフォルトで色温度の自動調整がTrueになっていました

これが有効になっていると,コマンドを実行した瞬間に色温度の調整と撮影を始めるようで,暗さがバラバならタイムラプスになってしまいました.

そこで以下のオプションを利用

--set "White Balance Temperature, Auto"=False

自動起動設定

作成したCapture.shに実行権限を与え,RaspberryPiが起動した際に撮影を開始するように設定します

RaspberryPiの環境では起動時に /etc/rc.local に記述されたスクリプトを実行するようです

なので,rc.localのexitの文より先に撮影用のCapture.shをバックグラウンドで実行するようにしました

rc.local
# vim /etc/rc.local

Add for Capture Timelaspse!

sh /home/pi/timelapse/capture.sh&

exit 0
```

これで準備は完了撮影ができます!

続く

次回は,後処理編 として,撮影した写真たちを動画にする処理について書きたいと思います.