Ruby入門のための練習プログラム第二段!GDを用いた動体認知を作ってみよー。わーいぱちぱちぱち。さて、ここに二枚の写真がある。これらは1秒おきに監視カメラが撮影している画像である。人が外から中へとドアをあけて入ろうとしている様子がうかがえる。このような監視カメラの映像を休まず24時間保存しようとすると、記憶容量がとんでもなく膨れあがってしまう。そのため動体認識などを行い、人が通過したらしい画像のみを保存することにする。これだと、うまくいけば数年分の記録を残せる。もちろん、下手すれば決定的瞬間を逃してしまうわけなので、じっくり検証してシステムを作らなくちゃあいけない。
とりあえずプログラムをぱぱっと書く。
このプログラムにより生成された画像は以下のようになる。黒いところは RGB の各色の変量が大きい部分。これがかたまっていればいるほど動体物が表れた可能性が高いと判断すればよい。(※ 最初に提示した画像は、この画像の左上一部分です)
(1) ドアを開けています。
(2) 人が通過しています。
ただし、このプログラムでは全てのドットに対して RGB 値を比較しているため、処理が非常に重い。自分の環境では 320x240 ピクセルの画像を処理するのに 1.3s ユーザー時間かかった。実際に運用する際には 1000 ピクセル程度の処理で済ませるつもりです(人が通れない部分も画像に含まれているため、その部分を検査から除外できる。)