ESP32-CAMの画像だけで物体の動きを追跡できないか。そんな実験に挑んだ開発者の記録がブログで公開されている。PIRセンサーや外部ハードウェアを使わず、カメラ映像の差分からX軸・Y軸の動きをリアルタイムで検出しようという試みだ。
開発者のHJW Walters氏は、ESP32-CAMとGC9A01円形ディスプレイ(240×240ピクセル)を組み合わせ、自作のコンピュータビジョンアルゴリズムを実装した。アイデアは2024年9月、ベッドの中で思いついたという。
手法はシンプルだ。現在のフレームから1次元カーネルを取り出し、前のフレームに対して垂直方向に畳み込み演算を行う。差分の合計が最小となる列と行を見つければ、2フレーム間のX・Y方向のずれが分かるという理論だ。
ESP32の処理能力を考慮し、視野を40×40ピクセルに縮小、グレースケール変換を省略してRGBチャンネルをそのまま使用するなど、精度より速度を優先した設計となっている。カメラとディスプレイの更新は約80ms(12.5fps)で、アルゴリズムの処理時間はRGB版で約9ms、グレースケール版では約4msに収まった。
結果は「失敗だが、学びはあった」と開発者は振り返る。垂直方向の動きは追跡できたが、カメラに対して平行方向に動く物体は検出できない。1次元カーネルの限界だ。「額を動かしたときが一番うまくいった」というユーモラスなコメントも添えられている。
このプロジェクトはエッジ検出の実験にも発展しており、ガウシアンブラーとラプラシアンカーネルを組み合わせたリアルタイムエッジ検出も試みられている。コードは公開されていないが、問い合わせれば共有してもらえるとのことだ。