前回 環境構築編 の続きです。
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
~~~
自動起動しているのでこのサービスを停止,自動起動しないようにします。
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でうまくいった設定は以下のとおり
# 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をバックグラウンドで実行するようにしました
# vim /etc/rc.local
~~~
## Add for Capture Timelaspse!
sh /home/pi/timelapse/capture.sh&
exit 0
これで準備は完了撮影ができます!
続く
次回は,後処理編 として,撮影した写真たちを動画にする処理について書きたいと思います.