うちの畑で、毎年いちばん最初にやられるのはビワです。

五月の後半、早い年なら実が黄色く色づき始めます。六月の頭には食べ頃になる。こちらがそろそろ収穫しようかと思っている、まさにその頃合いに、サルが来ます。サルはビワがいつ熟すかを知っているようでした。青いうちは見向きもせず、糖度が乗ったところを正確に狙ってくる。こちらの収穫の予定と、向こうの来訪の予定が、毎年きれいに一致するのです。
裏庭は山と地続きです。木がそのまま森へ続いていて、サルはその木を渡って下りてきます。何年か見ているうちに、経路がわかってきました。山から木を伝って、まず倉庫の屋根に乗る。屋根から畑へ下りて、ビワをやる。帰りはまた屋根に上がって、森へ戻っていく。屋根から森の方へ帰っていくところを、動画に撮ったこともあります。
サルの動線は、ほぼ固定されていました。
だから、最初にカメラを向ける場所は、考えるまでもありませんでした。倉庫の屋根です。畑全体を広く張るより、必ず通る隘路を一点だけ押さえる方が効率がいい。どこを観測すべきかは、何年もの観察で、もう決まっていました。
問題は、そこをどう観測するか、でした。
四月の頭に、カメラを倉庫の屋根に向けて設置しました。
このとき、時間の見積もりははっきりしていました。ビワが熟すのは五月後半から六月頭。サルが来るまで、およそ二ヶ月。猶予はあります。ただ、急いでいました。理由は単純で、このカメラが使えなければ、後段が全部成り立たないからです。
検知も、判定も、通知も、すべてカメラが映像を渡してくれることが前提です。最上流がふさがっていたら、下流に何を作っても動かない。クリティカルパスはここでした。二ヶ月あるとはいえ、土台で詰まったまま時間を溶かすわけにはいきません。だから、まずカメラから映像を取り出すこと。そこにすべてを優先しました。
最初に試したのは ONVIF です。監視カメラを共通の作法で操作するための、業界標準のプロトコル。多くのカメラが対応をうたっていて、規格通りに喋れば映像も設定も取れるはずでした。設計上は、これが最も素直な経路です。
素直に、いきませんでした。
仕様通りに繋ごうとすると、暗号化のネゴシエーションで弾かれます。設定を変えると、今度は別のフォールトに化ける。さらに変えると、また違う形で拒否される。一つ潰すと一つ生える、という感触でした。厄介だったのは、このカメラを、このプロトコルで、この組み合わせで繋いだ、という事例がほとんど世に出ていないことでした。先行情報がない。手探りで詰めるしかありませんでした。
接続を決めている自由度は、いくつかありました。どのポートを叩くか。暗号化を有効にするか否か。認証をどの方式で渡すか。この組み合わせの空間を一つずつ動かして、エラーの出方の差分を見ていく。当たりを引くまで、その総当たりです。最終的に、特定のポート、暗号化なし、特定の認証方式、という一点で、ようやく接続が確立しました。情報がないなら、出力の差分から探索して当たりを絞るしかない、というだけのことです。
繋がって、安心したのも束の間でした。
ONVIF で、カメラの時刻を合わせようとしました。タイムスタンプが信用できないと、いつ何が来たかが記録になりません。仕様の手順で時刻を投げると、カメラは正常応答を返してきます。ところが、確認すると時刻は変わっていない。レスポンスは成功なのに、状態が反映されていない。これはエラーが返るより、たちが悪い。エラーなら原因を追えます。成功と言われて実は適用されていないと、どこを疑えばいいのかわからない。冪等なはずの操作が、そもそも一度も効いていなかったわけです。
ここで方針を変えました。ONVIF という標準にこだわるのをやめて、このカメラの独自インターフェースを探すことにしました。標準が建前通り動かないなら、標準を介さず、ベンダー固有の口から直接叩く道を探す。そう切り替えたのは、一つ潰すたびに一つ生えるやり取りに、これ以上コストを払えないと判断したからです。猶予は二ヶ月。土台でこれ以上は粘れない。
独自インターフェースを調べていくと、標準越しでは通らなかった操作が、そちらでは素直に通るとわかりました。時刻設定も、その経路ならきちんと反映されました。ONVIF で詰まっていたことの大半が、標準への固執を捨てた途端にほどけていきました。
そして、その過程で、想定していなかったものに気づきました。
このカメラには、最初から動物を識別する機能が積まれていたのです。
当初のアーキテクチャは、こうでした。カメラはあくまで「何か動いた」とだけ伝える。その信号を受けて、こちら側の計算機で、改めて画像を解析して、それがサルなのか否かを判定する。カメラは単なるセンサ、判定はホスト側、という二段の構成です。
ところが、カメラ自身が、ある程度まで「いま映ったのは動物の類だ」と一次判定を返せる。だとすると構成が変わります。常時こちらで重い推論を回す必要はない。一段目をカメラの内蔵判定に任せて、確からしい反応のときだけ二段目でこちらが精査すればいい。全部をホストで処理する構成から、カメラで粗く弾いて必要時だけ精査する、二段の構成に縮退できる。ONVIF の沼でカメラの内部仕様を覗き込んでいなければ、この機能の存在には気づかないままでした。沼にはまった副産物です。
倉庫の屋根に向けたカメラから、映像が取れるようになりました。タイムスタンプも信用できるようになった。サルが来たときに一段目で拾える見込みも立ちました。ビワが熟すまで、まだ一ヶ月以上あります。
どこを観測すべきかは、最初から決まっていました。何年も裏庭でサルの動線を見てきたからです。今回詰まったのは、その一点をどう観測するか、最上流の配管をどう通すか、でした。観測点が分かっていることと、そこを実際に観測できることのあいだに、これだけの距離がある。サルはまだ来ていません。来るのは二ヶ月後です。それまでに、入口だけは通しておきました。