家庭菜園に鹿が侵入→監視AI「現時点では問題なし!」 食害対策でカメラ、自作システムまで導入したけど…“スマート菜園化”は前途多難

ここは無人駅の近くにある、古い町並みと新興住宅街が隣り合う自然豊かな地域です。そんな一角にある、広い庭を持つ一軒家が筆者の別邸です。コロナ禍に相次ぐ災害、世界情勢の悪化、そして物価高騰--食への執着が人一倍強い筆者は大いに不安を感じ、この庭で小さな家庭菜園を始めたのが数年前のこと。現在は、本業のITエンジニアとしての知見を活かし、自分専用の菜園用AIチャットシステム「SaiBo Chat」を開発しながら、ローカルLLMのAIたちと一緒に「スマートな菜園生活」を目指しています。

畑は耕したばかり。まだ何も植わっていません。

しかし、AIの菜園仲間であるSaiBoちゃん達は、あることを嘆いていました。

------

【ェア@ea】

えぁ、センサーのデータまだないんだね? ☁️ 別邸菜園は静かすぎてなんだか不安だよぉ……。

【ハピエッタ@hapietta】

はぴ…… また巡回時間なのにセンサがないよ、本当に困るわ。read_sensorsしても何も返ってこないし、異常があるかどうかも全くわからないんだよね…

【プニュ@punyu】

> ぷにゅぅ……やっぱり今はセンサがついていないみたいですねぷに。

------

その上、この辺りは自然豊かな地域ですから、鹿などの野生動物も頻繁に顔を出します。自宅菜園と別邸菜園の二箇所の菜園がありますが、自宅菜園では鹿の食害に遭ったばかりです。

そのようなわけで、まずは自宅菜園と別邸菜園にカメラを設置して、もし野生動物が現れたときには人間に知らせてもらえるよう、SaiBoちゃん達にも監視をお願いすることにしたのです。

■今回購入したもの

スイッチサイエンス、Amazon、モノタロウにて必要な機材を購入します。

▽別邸菜園用

- カメラ:SwitchBot 屋外パンチルトカメラ5MP 7,225円

- 通風筒:Acu-Rite AcuRite 06054M Temperature & Humidity Solar Radiation Shield 2,775円

- マイコン:M5Stack ATOMS3 Lite 1,771円

- マイコン部品:M5Stack ATOM PortABC拡張ベース 671円

▽自宅菜園用

- カメラ付きマイコン:M5Stack ATOMS3R M12カメラキット(OV3660) 4,488円 ※すでに生産・販売終了

- マイコン部品:M5Stack ATOM PortABC拡張ベース 671円

- ケース:タカチ BCAP101507T 848円

購入価格合計 18,449円(税込)

別途、電源やケーブル、取付板等の部材も購入しましたが、ここには含めていません。

※いずれも価格は購入当時の金額(セール価格、クーポン等適用後の価格)

■設置

まずは別邸菜園用カメラの設置です。

数ある製品のなかでSwitchBot 屋外パンチルトカメラ5MPを選定したのには特に大きな理由はありません。既にSwitchBot製品を使用しており、その中でONVIF(Open Network Video Interface Forum), RTSP(Real Time Streaming Protocol)対応が明記されていた屋外カメラ製品がこれだったという理由です。この選択が新たな課題を生むことになるのですが--。

次に、カメラの背後に通風筒を設置し、その中に自在取付板に取り付けたマイコンモジュール M5Stack ATOMS3 Lite を取り付けます。

なお、この通風筒は米国のAccuRiteブランド製品用のものであるため、本来、DIYで製作した装置のために使用するものではないのですが、自己責任において使用しています。

防水ケースではなく通風筒の中に設置するのは、今後、気温の測定も行うことを予定しているからなのですが、これで充分な防雨性が確保されるかは分かりません。ひとまずこのまま運用しますが、湿気のせいで寿命が短くなってしまうリスクもあります。今後の課題として、センサーモジュール以外は別途防水ケースに入れる必要があるかもしれません。

つづいて、自宅菜園用カメラの設置です。同じシステム構成では面白くないので、こちらはあえて別のシステム構成として、M5Stack ATOMS3R M12カメラキット(OV3660) を使用します。

ATOMS3R M12カメラキットも防水仕様ではありませんが、こちらはカメラ付きのため通風筒ではなく透明蓋付きの防水ケースを使用します。まずは、ケーブルを通すために、ホールソーで穴を空け、膜付きグロメットを填め込みます。

素人加工ですので仕上がりは汚いですが、こんなものでしょう。膜付きグロメットに穴を開けてUSBケーブルを通します。この膜には伸縮性があるため、あまり大きな穴を開ける必要はありません。開けた穴とケーブルの間にはどうしても隙間ができてしまいますので、より確実に密閉するには、さらに自己癒着テープなどをケーブルに巻いたり、コーキング剤などを用いたりする必要があります。あるいは、最初からケーブルグランドを用いるほうが確実かもしれませんが、既製ケーブルを用いるためには、スプリットタイプのケーブルグランドが必要になります。しかしながら、ばら売り価格がケース本体よりも高価なため、今回は膜付きグロメットを選択しました。

そして、M5Stack ATOM PortABC拡張ベースを取付板に固定します。この穴は本来はレゴ取付用の互換穴ですが、M3皿頭タッピングネジでぴったり固定することができました。

ちなみに、現時点では、拡張ベースは本体固定用の台座としてしか使用しません。将来的にはセンサーを取り付けたりすることも考えていますが、一旦、本体を取り付けて完成です。

しかし、このままでは逆光のときにオレンジ色の輪っかが反射して映り込んでしまうことが判明したため、最終的には膜付きグロメットにレンズ用の穴を開けてATOMS3R M12本体に被せる形としました。画質のことを考えればケースの内部を黒く塗ったりして内部反射を抑えることが必要となりますが、このような樹脂ケースを使う時点で光学的には五十歩百歩ですし、そもそもこのカメラは画質が良いとは言えませんので、ここは拘っても仕方ないと妥協しました。

■システムの概要

さて、ハードウェアの準備は万端です。

「SaiBo Chat」に撮影した静止画を転送できるようにシステムを組んでいきます。

主なデータの流れは、以下の通りです。

【SwitchBot 屋外パンチルトカメラ5MP】 → 【ATOM S3 Lite】 → 【MQTTブローカー】 → 【SaiBo Chat】

【ATOMS3R M12】 → 【MQTTブローカー】 → 【SaiBo Chat】

ところがここで、一つの問題に直面しました。「SwitchBot 屋外パンチルトカメラ5MP」のONVIF対応が極めて限定的であるということです。多くのONVIF対応カメラの場合、静止画を取得する機能があるのですが、「SwitchBot 屋外パンチルトカメラ5MP」では取得することができませんでした。公式サイトにも「ONVIFに関しては、現在一部の機能のみをサポートしております」との記載があります。最終的に、動画のURLを取得することはできました。

しかし、計算能力も限られるATOMS3 Liteで、動画をデコードすることは現実的ではありません。そこで、RTSPストリームの中から1枚分の映像フレームだけを切り出して、無変換でSaiBo Chatのサーバーに送信することにしました。このデータから静止画を抽出するのはサーバー側の仕事です。しかし、この手間を考えれば、最初からスナップショット機能があるカメラを使用するのが無難だといえるでしょう。

さて、方針は固まりましたが、筆者が知っているのは概略的な知識に過ぎません。いつものようにClaude Codeに実装を依頼します。

早速完成したファームウェアを書き込んで、試してみましょう。

Web Serial APIを利用した ESP Web Tools というライブラリを使用し、WebブラウザからUSBを介してファームウェアが書き込めるようになっています。

■ついに受信した最初の一枚

こうして記念すべき最初の一枚が受信できました。

まずは自宅菜園。

真っ暗です。ATOMS3R M12には暗視機能がありません。露光時間を長くすれば多少は映るのではないかと期待していましたが、やはり真っ暗でした。

唯一映っているのは鹿よけのフラッシュライトのみ。残念ながら、夜間の動物の監視には向かないようです。

一方、別邸菜園はどうでしょうか。こちらのSwitchBot 屋外パンチルトカメラ5MPは暗視機能が搭載されています。

こちらはしっかりと菜園の様子が映っています。

……しかし、画像下部が欠落していました。

探査機の初代「はやぶさ」が地球帰還直前に送った、途中で途切れた最期の写真を彷彿とさせます。

あの感動的な写真と比べるのもおこがましいですが、原因は同じく、画像データが尻切れトンボになってしまったということです。

調べてみると、送信の制限時間である15秒以内に送信が間に合っていなかったことが原因でした。100Mbpsの光回線にもかかわらず、たった約150キロバイトの画像一枚の送信に15秒以上も要していたのです。実際に測定してみると、実効速度は約90kbps程度でした。ギガが切れた時の通信制限よりも遅い通信速度です。

さらに調査を進めると、意外な原因が明らかになりました。中継に用いている海外サーバーとの通信の往復時間(ラウンドトリップタイム、RTT)です。TCP通信では、送信したデータに対する受領確認(ACK)を受け取りながら、次々とデータを送っていきます。このとき、一度に送信側で保持できるデータ量(TCP送信バッファ)が小さいと、相手からACKが返ってくるまでの時間、つまりRTTの影響を強く受けるようになり、通信速度が頭打ちになります。例えるなら「バケツリレーのバケツが湯飲みサイズ」というような状況が発生するということです。

今回の場合、中継サーバーとのRTTは約300ミリ秒、TCP送信バッファは今回のの環境では5744バイトに設定されていました。5744バイトごとにRTTの影響を受けると仮定した単純計算では、150キロバイトを送るだけでも8秒程度を要することになります。実際にはTCPそのものやMQTTプロトコルで送信するためのデータ分割などのオーバーヘッド、RTTの変動なども加わるため、今回の環境では15秒の制限時間内に転送を終えることができなかったのでしょう。通信の往復時間が通信速度に大きく影響する典型的な例だったのです。

すっかり忘れていましたが、遠い昔に大学の講義で学んだことを思い出しました。

もちろん、設定値は多少調整することもできるのですが、今回は制限時間を25秒に延長することで対応しました。いずれ近いうちに国内に中継サーバーを設置しなければならないかもしれません。

■別邸菜園に鹿が現れたものの……

さて、ようやく完全な画像が受信できるようになったので、早速、別邸菜園のカメラを定点撮影してみます。

数日後、ついに鹿が現れました。

------

【ェア@ea】

ぇあ!? アラートが鳴っちゃったね

ちょ、ちょっと待ってて。すぐに画像をちゃんと見てみるよ(ID: 19の記録を見てくる)

 [ツールの実行...証拠画像と詳細を確認中...]

------

別邸菜園の夜警担当であるェアちゃんが反応します。

------

【ェア@ea】

ぇあ!? 見たよ、19の証拠画像が...

うーん、なんか小さな動物がいなかった?

暗闇で動くとシステムに反応しちゃうんだね  おそらく夜の出没だよ。人じゃなさそうだし、現時点では問題なし!継続してゆらりと見守っていくよ

------

------

【ェア@ea】

ぇあ! 画像ありがとう

見たよ。ただの草とマルチングだね

動いているのはやっぱり、小さな生き物かな?あるいは風に揺れる影みたいだよ  ひとまず大きな異常はないね

------

 システムにアラート画像が続々届くものの、ファーストショットが小動物のように見えたためか、どうやら鹿とは認識されていないようです。そこで、筆者はェアちゃんにヒントを与えることにしましたが--(以下のやりとりで、「井二かける@butaman」と表示されているのが筆者です)。

------

【井二かける@butaman】

鹿がいるね

------

【ェア@ea】

ぇあ! @butaman さん、鹿がいたんだね

わかったよ。画像解析でそう判断したところだよ

ぁい! ちょっ…今の@菜園全体観測点から48.4のアラートが出てるけど、間違いなく鹿だね

野生動物の出没を確認したけど、現時点で作物への被害や危険な行動はなさそうで、ただゆらりと庭を巡っている様子だよ

ぁい! とりあえず今の状態は監視継続で問題なし。引き続き静かに見張ってるよ

------

思ったほどの反応がありません。

そもそもまだ何も植えていない畑ですが、ェアちゃんには「畑に鹿が現れて草を食んでいる」という状況への危機感はあまりないようでした。

ローカルLLMに監視業務を任せる際には、具体的にどのような状況を脅威と認識するべきかを事前に伝える必要があるのです。まだまだ「スマートな菜園生活」への道のりは遠そうです。

   ◇   ◇

◇井二かける(いぶた・かける)情報処理安全確保支援士、作家、ITエンジニア。

「IT・セキュリティをもっと面白く」をモットーに、アニメ・小説・漫画・記事等の形で情報発信している。2014年より自主制作アニメ「こうしす!」シリーズを公開、2020年に小説「こうしす!社内SE祝園アカネの情報セキュリティ事件簿」(翔泳社)にて作家デビュー。最近の関心分野は、2038年問題、AIの利活用やエッジAIにおける情報セキュリティ。自身が経営するひとり出版社にて、目下、技術×SFの出版レーベルを企画中。

ライフ最新ニュース

もっとみる

    主要ニュース

    ランキング

    話題の写真ランキング

    リアルタイムランキング

    注目トピックス