【要約】正拳突き人形に「目」を与える ── Vue・Flask・OpenCVが役を分担するSW設計 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
開発者は、IoTデバイスの制御とデータ管理において、リアルタイム性とセキュリティ、データの整合性をどう両立させるかという課題に直面した。具体的には、以下の問題が発生していた。
- ・映像配信と操作命令の遅延や、通信の非効率性。
- ・カメラ映像における動体検知の誤検知(ノイズ)。
- ・リセット操作による過去の統計データの喪失。
- ・認証・認可の不備による、第三者への映像流出や不正操作のリスク。
// Approach
開発者は、役割を明確に分離した4層のソフトウェアアーキテクチャを構築することで、これらの課題を解決した。
- ・フロントエンド:Vue.jsによるSPA構成と、AxiosインターセプターによるJWTの自動付与。
- ・バックエンド:FlaskによるREST APIと、Room機能を用いたSocket.IOの統合管理。
- ・エッジ処理:OpenCV(MOG2)による背景差分と、ROI(関心領域)指定による検知精度の向上。
- ・データ管理:SQLiteを用い、生ログとリセット時のスナップショットを分離する論理リセット設計。
// Result
この設計により、ユーザーは低遅延な操作と正確な統計データの取得が可能となった。具体的な成果は以下の通りである。
- ・Socket.IOのRoom機能により、特定のデバイス映像を特定のユーザーへ安全に配信。
- ・デバウンス処理の導入により、パンチの二重検知を防止。
- ・論理リセット設計により、リセット後も過去の生ログに基づいた統計の追跡が可能。
- ・セキュリティ対策により、接続時およびリクエスト時の所有権検証を完備。
Senior Engineer Insight
> エッジとサーバーの役割分担が明確で、設計思想が極めて実戦的である。特にSQLiteでの論理リセット設計は、統計の整合性と監査性を両立しており、現場レベルの知見を感じる。一方で、ラズパイ1台にサーバーとエッジ処理を同居させる構成は、負荷増大時のレイテンシ悪化が懸念される。また、リクエストボディの検証漏れといった脆弱性の指摘は、実戦での教訓として価値が高い。小規模IoTのプロトタイプとしては完成度が高いが、大規模展開には分散構成への移行が必須となるだろう。