Skip to content

Instantly share code, notes, and snippets.

@kjunichi
Last active August 29, 2015 13:59
Show Gist options
  • Save kjunichi/10957588 to your computer and use it in GitHub Desktop.
Save kjunichi/10957588 to your computer and use it in GitHub Desktop.

はじめに

Raspberry PiでSDカードに優しいWebカメラによる定点観測を考えてみた。

  • RAMディスク上にローカルの撮影画像は保持
  • 差分があるときのみDropboxへアップロード

RAMディスクの準備

mount -t tmpfs -o size=2m tmpfs /mnt/ramdisk0

画像の差分が出たときのみ、Dropboxにアップロード

画像の差を求める

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」というツールがあります。

Perlで書いてみる

  • 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メモリに書き込むことなく、定点観測な画像を クラウドにアップロードすることが出来ました。

Link

関連記事

GitHubに怒られそうなこと

gistupで画像を毎回コミットすると、差分が見られるような気がする

気になること

動画の末尾に1枚ずつ画像を追加するのはどうなんだろか? バラの画像を保持して、都度動画を再作成する方が圧縮率上がりそうな気がするが

関連

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment