監視カメラの通知は今も「動体を検知しました」で止まっている。本レシピでは、カメラ映像を vision 対応 LLM に読ませ、「玄関に宅配業者。荷物を置いて帰った」「猫が台所のコンロ横に乗っている」という言語化された通知に変える。設計の核心は一点だけ — LLM に常時映像を見せないこと。後述のコスト試算の通り、常時監視は月数十万円、イベント駆動なら月数百円で済む。
材料(機材・ソフト・費用概算)
- RTSP対応ネットワークカメラ: TP-Link Tapo C200(実売4,000円前後・1080p・RTSP/ONVIF対応)クラスで十分。Tapoはアプリで「カメラアカウント」を作成するとRTSPが使え、URLは
rtsp://user:pass@<IP>:554/stream1(1080p)/stream2(360p) - 常時稼働するLinuxマシン: Raspberry Pi 4/5・ミニPC・自宅サーバー等。構成BでFrigateを回すなら Google Coral TPU(任意・$60前後)があるとCPU負荷が激減する
- ソフト: ffmpeg、Python 3 +
anthropicSDK、(構成B)Frigate(OSS・無料)、Home Assistant(任意) - APIコスト: イベント駆動なら月数百円(後述)
- 通知チャネル: ntfy.sh・Slack・LINE 等、curlで叩けるものなら何でも
構成図(テキスト)
構成A(最小・ポーリング型)
[カメラ] --RTSP--> [ffmpegで静止画抽出] --> [vision LLM(Claude API)] --> [ntfy/Slack通知]
構成B(実用・イベント駆動)
[カメラ] --RTSP--> [Frigate: 動体検知→物体検知(person/car/cat…)]
└-- イベント発生時のみスナップショット --> [vision LLM] --> [通知]
手順
構成A: ffmpeg + Claude API(30分で動く)
RTSPから静止画を抜く。単発と定期抽出の2パターン。
# 1枚だけスナップショット
ffmpeg -rtsp_transport tcp -i "rtsp://user:pass@192.168.1.50:554/stream1" \
-frames:v 1 -q:v 2 snapshot.jpg
# 10秒に1枚を連続抽出(fps=1/10)
ffmpeg -rtsp_transport tcp -i "rtsp://user:pass@192.168.1.50:554/stream1" \
-vf fps=1/10 -q:v 2 frames/frame_%04d.jpg
抜いた画像をvision LLMに渡す。監視用途は枚数が多いのでコスト優先で Haiku 4.5 を使う。
import base64, anthropic
client = anthropic.Anthropic() # 環境変数 ANTHROPIC_API_KEY
img = base64.standard_b64encode(open("snapshot.jpg", "rb").read()).decode()
msg = client.messages.create(
model="claude-haiku-4-5",
max_tokens=300,
messages=[{"role": "user", "content": [
{"type": "image", "source": {"type": "base64",
"media_type": "image/jpeg", "data": img}},
{"type": "text", "text": "監視カメラ画像で起きていることを日本語1〜2文で。"
"人・車・動物とその行動を具体的に。特筆すべきものがなければ『変化なし』とだけ。"},
]}],
)
print(msg.content[0].text)
通知はwebhookに流すだけ。
curl -d "$SUMMARY" ntfy.sh/your-topic
cronで回せば動くが、この構成のままポーリング間隔を詰めるとコストが爆発する(次節で数字を示す)。動作確認と仕組みの理解までがこの構成の役割で、実用は構成Bへ進む。
構成B: Frigateでイベント駆動にする
Frigate はOSSのAI NVR。RTSPを受けてローカルで動体検知→物体検知(person/car/cat等)し、イベント単位でスナップショットを切り出す。LLMに渡すのはこのイベント画像だけにする。
Frigateには Generative AI 機能が組み込みである(0.14で導入、現行0.17系では object descriptions と review summaries の2系統)。設定キーは genai、ネイティブproviderは Ollama / Google Gemini / OpenAI / Azure OpenAI と OpenAI互換API。Claudeを直接指定する口はないので、Claudeで統一したければ LiteLLM 等の OpenAI互換ゲートウェイを挟むか、後述の Home Assistant 経由を使う。
# Frigate config.yml(公式ドキュメントの例に準拠)
genai:
provider: openai # OpenAI互換。Claude利用時はゲートウェイ経由
api_key: "{FRIGATE_OPENAI_API_KEY}"
model: gpt-4o
objects:
genai:
enabled: True
cameras:
front_door:
objects:
genai:
enabled: True
use_snapshot: True # 高品質スナップショット1枚を送る
プロンプトは object_prompts でラベル別にカスタマイズできる(例: person: に「行動と意図を推定せよ」)。組み込み機能を使わず自前で組む場合も、FrigateはMQTTにイベントを流すので、イベント購読→スナップショット取得→構成Aのスクリプトに渡すだけで成立する。
Home Assistant 経由という選択肢
Home Assistant を運用しているなら、HACSカスタム統合の LLM Vision(v1.7系・活発に開発中)が最短。providerとして Anthropic / OpenAI / Gemini / Ollama 等をネイティブサポートし、image_analyzer / stream_analyzer 等のアクションで画像・カメラフィードを解析できる。付属ブループリントを使えば「カメラ通知にAI要約を付ける」自動化が設定だけで組め、Frigateのイベントも扱える。
コスト設計 — なぜ常時LLMは非現実的か
Claudeの画像トークンは ⌈幅/28⌉×⌈高さ/28⌉。1080p画像は自動縮小されて約1,560トークン/枚(Haiku 4.5等の標準解像度モデル)。Haiku 4.5 は入力$1/100万トークン・出力$5/100万トークン(2026年8月時点の公式料金。1ドル150円、出力150トークン/件で概算)。
| 方式 | 画像枚数 | 月額概算 |
|---|---|---|
| 常時1fps | 86,400枚/日 ≈ 1.35億入力トークン/日 | 入力だけで約$4,000、出力込み約$6,000(約90万円) |
| イベント駆動(30件/日×1枚) | 30枚/日 ≈ 5万入力トークン/日 | 約$2.2(約330円) |
同じカメラ・同じモデルで約3,000分の1。これが「検知はローカル、理解だけLLM」という分業の根拠になる。さらに削るなら stream2(640×360)を渡せば約300トークン/枚と1/5になり、玄関の宅配判定程度なら精度も落ちない。
プライバシーと運用の注意
- クラウドに出るのは「イベントのスナップショット静止画」だけ、という線を設計で守る。録画・常時映像はFrigateのローカルストレージに留める
- LLMに渡すカメラは玄関・駐車場など境界のカメラに限定し、屋内の画は外に出さない。Frigateのゾーン/マスクで送信対象をさらに絞れる
- AnthropicはAPI経由の画像をモデル学習に使わない(公式FAQ)が、保持ポリシーは契約条件による。ゼロ送信にしたければ Frigate + Ollama(qwen3-vl等のローカルVLM) で同じレシピがAPI費ゼロで組める。精度と日本語の自然さはクラウドモデルが優位
- メーカーアプリのクラウド接続とRTSPローカル運用は別物。徹底するならカメラをVLANに隔離しRTSPだけ通す
発展
- 通知の要否判断までLLMに任せる: 「敷地に入った人は通知、通行人は無視」をプロンプトに書き、structured outputs で
{notify: bool, summary: string}を返させて通知をフィルタする - 履歴の自然言語検索: 要約をDBに貯め、「今日家の前で何があった?」と聞けるようにする(Frigate組み込みのGenAI説明文はセマンティック検索にも使われる)
- 本サイトの評価軸の見方は /rating を参照
参考情報
- Frigate Generative AI 設定: https://docs.frigate.video/configuration/genai/genai_config/
- Frigate Object Descriptions 設定: https://docs.frigate.video/configuration/genai/genai_objects/
- LLM Vision(GitHub): https://github.com/valentinfrlch/ha-llmvision
- LLM Vision ドキュメント: https://llmvision.gitbook.io/getting-started
- Claude Vision(画像トークン計算・料金): https://platform.claude.com/docs/en/build-with-claude/vision
いずれも2026年8月に内容を実確認。