古いAndroidスマホをAI搭載のスマート監視システムに変身させる方法
ほぼどの家庭にも、引き出しの中で埃をかぶっている古いAndroidスマホがあると思います。画面は無事映るし、カメラもまあまあ使える、でもバッテリーは半日も持たない、またはプロセッサが最近のアプリに対応できない。そんな端末は親戚に回されるか、そのまま忘れ去られるのが常です。先日、面白いリポジトリCCTV-Smartphone-AI-Monitoringを見つけました(作者は「Sentinel」と呼んでいますが)、このガジェットを有効活用する方法が紹介されています。
このプロジェクトはスマホからローカルネットワーク経由で動画をキャプチャし、PC側で録画を実行、マルチモーダルニューラルネットワークを連携させてフレーム内の状況を認識します。

Sentinelの内部構造
スマホを監視カメラに変えるアイデアは新しくありませんが、市販のソリューションには大抵2つの問題があります。有料の中国製クラウドサービスにロックインされているか、まともな解析機能なしで生RTSPストリームしか提供していないかのどちらかです。Sentinelはこの両方を同時に解決しています。
システムは2つの部分に分かれています:
- CamFlow — Android 8.0+向けの軽量アプリで、カメラ映像をキャプチャしてJPEGフレームをHTTP POSTでサーバーに送信します。
- Pythonサーバーコンポーネント(Flask + OpenCV)— ストリームを受信し、フレームバッファを管理、ブラウザへのストリーミングを организует、アーカイブをディスクに書き込み、AI呼び出しを管理します。
すべての動画とログは厳密にローカルネットワーク内に留まります。イベント解析用にクラウドニューラルネットワークに接続することを選んだ場合のみ、個々のフレームが外部に送信されます。

トークン効率に優れたパイプラインの仕組み
25fpsの動画ストリームをそのまま最新のマルチモーダルニューラルネットワークに流し込むと、どんな開発者でも痛い出費になります。Sentinelの作者は実績のある2層アプローチを採用しました:
まず、OpenCVベースの古典的コンピュータビジョンが動作します。motion_triggerモジュールが連続するフレーム間の差分を計算します。部屋に何も起きていない間は、サーバーはアイドル状態を維持し、APIリソースを消費しません。
動きが設定された閾値を超えると、システムはアクティブ状態に切り替わります。そこでビジョンモデルが起動します。フレームを分析し、人の存在を確認し、リスクレベルを評価してから、厳密なJSONを返します:
実際に人がフレーム内に閾値を超えて留まると、イベントはデータベースに記録されダッシュボードに表示されます。動きが停止すると、システムは一時停止を待ってからスリープ状態に戻ります。

プロジェクトの主な機能
プラグイン不要の動画ストリーミング。WebインターフェースがMJPEG経由でライブフィードを提供します。家庭用Wi-Fiでの遅延は最小限で、ソフトウェアをインストールせずに任意のブラウザで動画を開けます。
モデルプロバイダーとの柔軟な連携。プロジェクトは中国のVolcengine Arkを中心に構築されていましたが、バージョン1.1で作者は汎用クライアントを追加しました。今ではOpenAI(GPT-4o-mini)、Google Gemini、DashScope(Qwen VL)、SiliconFlow、OpenAI互換APIを持つローカルゲートウェイを接続できます。
プロンプトによる動作のカスタマイズ。ダッシュボードの設定には、長期的なコンテキスト(Scene Profile)と運用上のフォーカス(Session Focus)のフィールドが含まれています。Webインターフェースに直接書き込めます:「これは研究室の廊下です。誰かが箱を持っている場合や、ドアに10秒以上立ち止まっている場合に注目してください。」
自動ネットワーク検出。CamFlowアプリではPCのIPアドレスを手動入力する必要はなく、UDPブロードキャスト経由で実行中のサーバーを検出できます。
アーカイブのセグメント化。動画はタイマー별로(例えば5分または10分のセグメント)ローカルに記録され、avc1、mp4v、XVIDコーデックから選択できます。

プロジェクトのデプロイ方法
Python 3.9+が動作するPCと、Androidが動作するスマホが必要です。
リポジトリをクローンして依存関係をインストールします:
依存関係には標準的なセットが含まれます:Flask、OpenCV、NumPy、Ark SDKクライアント。
サーバーを起動します:
コンソールにブラウザ用のローカルアドレス(例:http://127.0.0.1:5000/)と、スマホ用のネットワークIP(例:http://192.168.x.x:5000/)が表示されます。
手机のPhoneCamSender/CamFlow-v1.0.0-beta.apkフォルダからAPKをインストールし(またはAndroid Studioでプロジェクトをビルド — ソースは公開されています)、起動してカメラへのアクセスを許可し、Wi-Fiに接続してサーバーIPを入力します。
セキュリティのため、PCダッシュボードではフレームキャプチャがデフォルトで無効になっています。Enable Ingestボタンを押し、ブラウザにライブストリームが表示されます。

独自のAIプロバイダーを接続する
AI解析を有効にするには、ダッシュボード右パネルのAI解析をオンにします。適切なProviderを選択し、モデル(Model ID)を指定して、APIキーを入力します。
例えば、互換性のあるローカルサーバーやOpenAIと連携する場合は、単に設定を入力します:
パラメータは環境変数(AI_PROVIDER、AI_MODEL、AI_API_KEY)でも渡せます。サーバーはモデル応答を検証し、フィールド構造がWebインターフェースを壊さないことを確認します。
活用場面
Sentinelは小規模なローカル実験に最適です:
- サードパーティのクラウドサービスに動画をストリーミングできない工作室や研究室の監視。
- 異常 ситуацииのテキスト説明を含む注釈付きデータセットの収集。
- 構造化されたアラート通知付きでアパートのペットを見守る。
- 過度なコストをかけずに古典的CV(動体検知)と重いLLM/VLMの連携方法を学ぶ。
まとめ
このプロジェクトは、整理された実用的なエンジニアリングプロトタイプでした。重たいフレームワークや不必要な魔法は一切ありません:明確なアーキテクチャ(FrameBuffer)、動作するpytestテスト、箱から出してすぐに使える機能的なAndroidクライアント。
古いスマホを有効活用し、リアルタイムでマルチモーダルモデルを実験する言い訳を探しているなら、suzuran0y/CCTV-Smartphone-AI-Monitoringリポジトリをチェックしてみてください。
関連プロジェクト