さんや商事
猿とAI+人間の奮闘記

ついに捉えた屋根の上の猿

さんや
さんや
#カメラ内蔵AI #サル検知 #音声録音 #Dropbox #南房総
第3話の全体像をずんだもんと四国めたんが解説するインフォグラフィック
ずんだもんと四国めたんによる、この記事の全体解説

ヒヨドリで配管が通った話を前回書きました。鳥が映って、判定が出て、通知がスマホに飛ぶ。その経路が生きていることは確かめられた。けれど、ここから本命のサルが映るまでには、まだ時間が必要でした。

四月の頭にカメラを設置して、配管が通ったのが四月の十一日頃。ビワの収穫まではあと一ヶ月半あります。猶予はある。あとは入口にサルが来てくれればいい。そう思っていました。

来ません。


サルは月に一度来るかどうかです。逆算すれば、配管が通ってから本命が映るまで、何週間も間があくのは当たり前でした。頭ではわかっていました。それでも、通知が鳴るたびに私は Dropbox を開きました。

Dropbox に切り替えたのは、検知画像をどの端末からでも確認できるようにするためです。スマホでも Mac mini でも、通知のリンクから画像を開ける。畑にいても、家にいても、出先にいても、来た瞬間に確認できる。仕組みとしては理想的でした。

ところが開いても、来ているのは本命ではありませんでした。

昼間に来るのは、相変わらず人やベンチでした。画角を変えてから、ベンチや像は減ったはずでしたが、それでも誤検知の分布が入れ替わっただけで件数が劇的に減ったわけではない。問題は夜です。

夜の通知は、ほぼ全部がノイズでした。クモの糸が赤外線で光ったもの、レンズ近くを横切る虫、葉の揺れ。フレームの中で動いた何かを、モデルが低い確信度で人や動物と判定していた。本物は、一度も来ません。

夜間の通知をオフにすればいい話です。実際それは後でやることになります。けれどこの時点では、まだそれをやれませんでした。理由は単純で、本命のサルが昼に来るのか夜に来るのかすら、こちらには確証がなかったからです。夜に来ないとは言い切れない以上、検知を止めるのは情報を捨てるのと同じです。サルが一度でも映ってくれれば、そのデータを基に判断できる。けれどそれが来ない。だから止められない。誤検知に耐えるしかありませんでした。

通知を見る頻度は、自然と下がっていきました。最初の数日は鳴るたびに開いていたものが、一日に何度か、まとめて確認する形に変わっていく。期待してアプリを開いて、また虫だった、また屋根のエッジだった、を繰り返すと、人間の側が学習します。期待値が下がる。あれだけ楽しみだった通知が、いつの間にか「どうせまた」になっていました。


四月の二十日頃です。

その日も、午前中に何度か来ていた通知を、昼にまとめて確認しました。ベンチ、人、ベンチ、と流していくと、見慣れない種類の判定が混ざっていました。dog_cat、と書いてあります。カメラの内蔵 AI が、フレームの中に犬か猫を見たと言っている。

Dropbox を開きました。畑の隅に、近所の野良猫が映っていました。

しばらく画面を見ていました。猫です。何度か見かけたことがある、近所の野良。倉庫の脇を歩いている。判定は dog_cat。クラスは間違っていません。確信度も高い。誤検知ではない。本物の動物が、システムに記録された、初めての一枚でした。

監視カメラの映像に映った野良猫。倉庫の脇を歩いている
四月二十日、dog_cat 判定が初めて捉えた本物の動物。近所の野良猫だった

サルではありません。けれど、これは大きな確認でした。

カメラに積まれていた内蔵 AI が、本物の動物を本当に拾えることが、ようやく実証されたからです。第1話で、このカメラには動物を識別する機能が積まれていると気づきました。アーキテクチャはそれを前提に組んでいました。鳥は YOLOv8 が拾う。本命のサルは、まずカメラの dog_cat 内蔵 AI が拾って、そこから精査に回す。けれど内蔵 AI が本物の動物を本当に拾えるのかは、ここまで一度も検証できていませんでした。鳥で確認できたのは YOLOv8 側の配管だけで、内蔵 AI 側は誰も通っていなかった。

猫が、その配管も生きていることを示してくれました。鳥のとき、YOLOv8 の配管が生きていることを確認したのと同じです。今度は dog_cat 側の配管も生きていた。あとはここに、本命のサルが乗ってくれればいい。

ただし、まだサルではありません。猫の検知から、また通知の頻度が落ちていく日々が続きました。


四月の三十日です。

朝、いつも通り通知が何件か鳴っていました。私はその時間、別の作業をしていました。サル検知のシステムに張り付くつもりは、もう無くなっていました。来ない時間が長すぎて、通知が来ても反射的に開く習慣が薄れていた。昼前に手を止めて、Mac mini の前に座り、まとめて開きました。

ベンチ、人、ベンチ、と流していきます。途中で、dog_cat の判定が混ざっていました。

また猫だろう、と思いました。

開きました。倉庫の屋根の上に、サルが一匹、座っていました。

しばらく動けませんでした。

監視カメラの映像に映った倉庫の屋根の上のサル
四月三十日早朝五時。倉庫の屋根の上に映ったサル。通知を受け取ったのは数時間後だった

確かめるために、何度か画像を見直しました。背景の屋根は間違いなくうちの倉庫の屋根です。輪郭、毛並み、姿勢。サルです。第1話で何年も観察してきたあの動線の、最初の経由地点。倉庫の屋根の上に、本物が映っていました。

検知時刻は早朝でした。私が寝ている時間です。通知は鳴っていたはずですが、夜から早朝の通知はノイズが多すぎて、もう即時に確認する対象から外れていた。サルが屋根に乗った瞬間、システムは正しく検知して、正しく通知を飛ばしていた。受け取る側の私が、それを数時間放置していただけです。

並行して動かしていた音声録音にも、当該時刻の音が残っていました。再生してみると、屋根材を踏む音が一つ。木が大きく揺れる音はありません。複数頭が同時に動いていれば、屋根の音も森の側の枝の音ももっと派手に入るはずでした。音は静かでした。一匹です。群れの先回りでも、群れそのものでもない、はぐれた個体が一頭だけ、屋根に乗って、また森に戻っていった。


四月の頭にカメラを設置してから、二十六日が経っていました。

何が確かめられたか、整理しておきます。第1話でカメラから映像が取れるようになり、時刻が信用できるようになりました。第2話で鳥のおかげで YOLOv8 側の配管が生きていることが確かめられました。今回、四月の二十日に猫が映ったことで、もう一方の配管 — カメラ内蔵 AI が動物を本当に拾える経路 — も生きていることが確かめられました。そして三十日に、その配管にようやく本命が乗りました。

入口から入って、判定が出て、出口の通知まで、サルで一本通りました。

ただし、これで終わりではありません。むしろ、ここから本当の問題が始まります。サルが屋根に乗ったことが事後にわかった、ということは、サルが屋根に乗った時には何もできなかった、ということと同じです。記録には残った。けれど畑は守れていない。それに、今回は一匹のはぐれでした。群れで来た時、同じ仕組みで間に合うのか。間に合わせるためには何が要るのか。

サルが映った安堵と、何もできなかった現実が、同じ画像から同時に出てきました。ビワは色づき始めていました。