Raspberry PiでSDカードに優しいWebカメラによる定点観測を考えてみた。
- RAMディスク上にローカルの撮影画像は保持
- 差分があるときのみDropboxへアップロード
mount -t tmpfs -o size=2m tmpfs /mnt/ramdisk0
ImageMagickに便利なコマンドが用意されている
composite -compose difference A.jpg B.jpg diff.jpg
WebCamで撮影した画像は多少の差は撮影ごとに出るので、閾値を設け、これにより、アップロードの判定を行う。
identify -format "%[mean]" diff.jpg
0-65535
今回はDropboxでやってみました。 Dropboxはx86系のバイナリはLinuxにあるのですが、ARMなRaspberry Pi用は、サードパーティー製を使う 事になりますが、逆にこれが好都合で、コマンドラインで指定したファイルのみDropboxへアップロードする 「Dropbox-Uploader」というツールがあります。
- RamディスクにWebCamで撮影した画像ファイルを保存
- 前回の画像ファイルとの差分が閾値を超えたら採用
- Dropboxに送りつける
$threshold = 500;
$nowImagePath = "";
$snapImagePath = "";
$fswebcamCmd = "fswebcam "
`$fswebcamCmd`;
# 前回撮影画像と比較する
`composite -compose difference now.jpg snap.jpg diff.jpg`
$sabun = `identify -format "%[mean]" diff.jpg`;
if ($sabun > $threshold) {
# 採用
`mv now.jpg snap.jpg`
# Dropboxにアップロード
~/local/Dropbox-Uploader/dropbox_uploader.sh upload snap.jpg work/webcam/snap`date "+%y%m%d%H%M%S"`.jpg
}
実際は/boot以外はUSBメモリで運用しているのですが、今回の方法でSDカードや、USBメモリに書き込むことなく、定点観測な画像を クラウドにアップロードすることが出来ました。
- MavericksでもOpenCVでFacetime HDカメラが動いた
- VirtualBox上のUbuntuでFaceTime HD カメラが使えた
- Windows 7 64ビット版でProcessingでJMyron使えた!
- MOTION EYEをProcessingで使う
- Processing.jsでCaptureを使えるようにしてみた
- LifeCam CinemaでSkype
gistupで画像を毎回コミットすると、差分が見られるような気がする
動画の末尾に1枚ずつ画像を追加するのはどうなんだろか? バラの画像を保持して、都度動画を再作成する方が圧縮率上がりそうな気がするが