← 工房に戻る
毎日の道具

Home Monitor

自宅のカメラで、見慣れた顔を自分のサーバーで認識し、誰が来たかを落ち着いたタイムラインで確認できます。

Home Monitor はセルフホスト型です。各自が自分専用のコピーを動かします。

通知設定、カメラの状態、3 台のデモカメラのスナップショットを表示した概要画面

アプリについて

Home Monitor は、自宅のカメラをセルフホストで見られるアプリです。カメラのそばに置いた小さなコレクターがスナップショットを取得し、何かが動いたときに画像を送ります。その後、自分のサーバーが人物と顔を探し、インストールできるウェブアプリに結果を 1 日のタイムラインとともに表示します。

連続録画はカメラの SD カードに残り、サーバーには選んだスナップショットだけが保存されます。人物と顔の認識はサーバーのプロセッサーで行うため、外部のサービスに画像が送られることはありません。

認識はあくまで推定です。Home Monitor は顔を慎重に照合し、はっきりしない顔は特定しないままにしますが、顔が本物かどうかの確認、確実な本人特定、カメラをまたいだ人物の追跡は行いません。同意した人だけを登録し、思いがけない一致は自分で確かめてください。

ギャラリー

このスクリーンショットの場面、人物、イベントはアプリのデモで生成したもので、実際のカメラ画像は使っていません。

仕組み

  1. カメラのそばで集める。 カメラの近くの小さな機器が 2 秒ごとに各カメラのスナップショットを確認し、何かが動いたときだけ画像を送ります。ほかに 15 秒ごとに 1 枚送ります。
  2. 自分のサーバーで認識する。 サーバーはグラフィックカードを使わずにプロセッサーで人物と顔を見つけ、登録した人のプライベートなライブラリと顔を照合します。
  3. アプリで確認する。 インストールできるウェブアプリで、最新のスナップショット、誰が認識されたか、カメラごとの 1 日のタイムラインを確認できます。
  4. 控えめな通知を受け取る。 オプションの通知は何かが起きたことだけを伝え、画像も名前も含みません。庭にいる間は、すべての端末で一度に一時停止できます。

機能

  • 見慣れた顔: 本人の同意を得て人物を登録すると、各イベントが「認識済み」「認識されなかった顔」「顔がはっきり見えなかった人」のいずれかで表示されます。
  • 1 日をひと目で: 活動タイムラインは、各カメラのイベントを 1 日を通して表示し、カメラ、結果、時刻で絞り込めます。カメラがオフラインだった時間や通知を一時停止していた時間も並べて表示します。
  • 何も明かさない通知: プッシュ通知は暗号化され、画像も名前も含みません。認識されなかった顔のときだけ通知を受け取ることも、すべての端末で一度に一時停止することもできます。
  • 招待制のアクセス: スマートフォンやパソコンは招待で有効化し、いつでも取り消せます。現時点では、招待された端末はすべて顔のライブラリを含めて完全にアクセスできます。
  • 小さく保たれる保存容量: イベントは経過時間と合計サイズに応じて削除され、登録した顔は別に保管されます。プライベートな画像がアプリのオフラインキャッシュに入ることはありません。
  • カメラなしで試す: ローカルのデモは架空の場面と人物を描き、実際の認識は使わず、停止すると自動で削除されます。

ボンネットの下で

Home Monitor は 2 つの部分からなります。コレクターに必要なのは Python と Pillow だけです。サーバーは Python 3.12、FastAPI、SQLite で動き、OpenCV と ONNX Runtime で 3 つの小さなモデルを使います。YOLOX-Nano が人物を、YuNet が顔を見つけ、SFace が顔を照合します。グラフィックカードのない ARM64 プロセッサー向けに設計されています。自分とコレクターは Tailscale 経由で非公開にサーバーへ接続し、オプションの公開アクセスは Cloudflare Tunnel と強化した Caddy リスナーを通ります。このプロジェクトは GPL-3.0-or-later ライセンスのオープンソースです。