実装詳細とアーキテクチャ要件
Role Aが担当する「AI推論&エッジ連携モジュール」は、システムの「目と脳」を担う最も負荷の高いコンポーネントです。単にライブラリを繋ぎ合わせるだけでは、「VPNのネットワーク瞬断によるプロセス停止」や「AI推論・API通信のI/O待ちによるカメラ映像の遅延(バッファ詰まり)」といった致命的な障害が必ず発生します。
これらを回避し、24時間安定稼働する堅牢なシステムを構築するために、Role Aが「何をするために」「何が必要で」「どのような手順で実装すべきか」を詳細に定義します。
目的: EC2からローカルネットワーク内のカメラ映像をリアルタイムに取得する。
cv2.VideoCapture) を用いてRTSPストリームを取得する。
【重要】技術的課題と根本解決:
VPN経由ではパケット遅延が発生しやすく、標準の読み込みでは古いフレームがバッファに溜まり、推論が数秒〜数十秒遅延します。これを防ぐため、「カメラ読み込み専用のバックグラウンドスレッド」を作成し、常に最新の1フレームのみを保持し、古いフレームは即座に破棄(ドロップ)する設計を必ず実装してください。
目的: 映像から子供の危険状態を判定する。
【重要】技術的課題と根本解決:
EC2(CPU環境)では推論に時間がかかる場合があります。毎フレーム推論すると処理が追いつかないため、「Nフレームに1回だけ推論を実行する(フレームスキップ)」ロジックを組み込み、FPSの低下を防いでください。
目的: 危険を検知した際、フロントエンド(Role C)へ1秒以内にアラートを届ける。
【重要】技術的課題と根本解決:
VPNの鍵更新などでネットワークが瞬断すると、MQTTクライアントがクラッシュします。必ずSDKの「非同期イベントループ」と「自動再接続機能」を利用し、オフライン時はメッセージをキューイング(QoS 1)する堅牢な接続クラスを設計してください。
目的: 危険検知時の状況を、画像付きで保護者のWebexに通知する。
requests ライブラリを用いて、Webex Messaging APIへマルチパートデータとしてPOST送信する。
【重要】技術的課題と根本解決:
画像をディスクに保存してから送信すると、I/O待ちでシステム全体が数秒間フリーズします。必ず「メモリ上で直接JPEGエンコード(cv2.imencode)」し、さらに送信処理自体を「別スレッド(ThreadPoolExecutor等)」に逃がして、メインの推論ループを絶対にブロックしない非同期送信を実装してください。
目的: 上記の全モジュールを統合し、24時間稼働するデーモンプロセスにする。
カメラ取得、AI推論、MQTT送信、Webex送信を1つのメインコントローラークラスに統合します。カメラの接続が切れた場合の「自動再接続ループ」や、APIのタイムアウト例外をキャッチして握り潰さずにリトライ・スキップするエラーハンドリングを網羅してください。
Role Aの実装が完了したら、以下の情報を他ロールへ共有します。