YOLO11物体検出システム -- システムアーキテクチャ設計
概要
YOLO11幾何形状検出システムは、Flask をベースとしたリアルタイム幾何形状検出 Web アプリケーションです。Horizon RDK-X5 プラットフォーム向けに最適化されており、BPU によるハードウェアアクセラレーションに対応しています。本システムはモダンな階層型アーキテクチャを採用し、YOLO11 モデル推論、Web インターフェース、カメラ管理を効果的に分離して、高性能なリアルタイム幾何形状検出と計測サービスを提供します。
🏗️ システムアーキテクチャ
全体アーキテクチャ図
+-------------------+
| Web浏览器前端 |
+-------------------+
|
HTTP/WebSocket
|
+-------------------+
| Flask服务器 |
+-------------------+
|
+-----+-----+
| |
| 主应用 |<---> 配置管理
| main.py |
+-----------+
|
+----+----+
| |
| 物体检测 | 摄像头管理
| 模块 | 模块
+----+----+
|
+-----+-----+
| |
| YOLO推理 | 地平线BPU
| 引擎 | 硬件加速
+-----------+
|
+-----+-----+
| |
| 测量系统 | 几何计算
| 模块 | 模块
+-----------+
🔧 コアコンポーネント
1. メインアプリケーション (main.py)
- FastAPI アプリケーションのエントリポイント: HTTP API と映像ストリームサービスを提供
- ライフサイクル管理: アプリケーションの起動、初期化、終了の流れを管理
- ルーティング管理: REST API と静的ファイルの配信を処理
- リアルタイム映像ストリーム: MJPEG 形式のリアルタイム映像ストリームを生成
- システム監視: ヘルスチェックと統計情報のインターフェースを提供
主な機能:
- REST API エンドポイント:
/api/health、/api/stats、/api/info、/api/settings - 映像ストリームエンドポイント:
/video_feedMJPEG リアルタイム映像ストリーム - 静的ファイル配信:Web インターフェースのリソース
- ライフサイクル管理:グローバルリソースの初期化とクリーンアップ
2. 物体検出モジュール (app/object_detector.py)
- 検出器ラッパー: 統一された幾何形状検出インターフェースを提供
- 結果処理: 物体の境界ボックス、信頼度、クラスの処理
- 描画機能: 検出結果の可視化レンダリング、複数色表示に対応
- 統計監視: 検出性能と精度の統計
- エラー処理: 充実した例外処理とフォールバック機構
特長:
- 信頼度と IOU しきい値を調整可能
- 複数物体の検出に対応(オレンジ、緑、赤)
- リアルタイムの統計情報収集
- 柔軟な可視化オプション
- 中心点の計算と最大物体の識別
3. YOLO 推論エンジン (utils/yolo_shape_detector.py)
- YOLO11 モデル推論: Horizon BPU による効率的な推論
- 後処理アルゴリズム: DFL デコード、NMS、座標変換
- マルチスケール検出: 40x40、20x20、10x10 の 3 つの特徴層に対応
- パフォーマンス最適化: anchor 点と静的重みの事前計算
- CPU 互換モード: 開発環境向けのシミュレーション検出に対応
技術的特長:
- DFL (Distribution Focal Loss) による境界ボックス回帰
- 3 スケールの特徴ピラミッド検出
- 効率的な NMS(非最大値抑制)
- BPU 向けに最適化された NV12 入力形式
- 幾何形状に特化した検出最適化に対応
4. 基本モデルクラス (utils/base_model.py)
- ハードウェア抽象化層: 統一されたモデル推論インターフェース
- プラットフォーム適応: RDK-X5 BPU と CPU モードに自動適応
- 形式変換: BGR から NV12 への色空間変換
- リソース管理: モデルの読み込みとメモリ管理
- パフォーマンス監視: 推論時間とリソース使用量の統計
対応機能:
- プラットフォームの自動検出(hobot_dnn と CPU シミュレーション)
- メモリプールの管理と再利用
- 入力前処理パイプライン
- 出力形式の標準化
5. カメラ管理 (app/camera_manager.py)
- カメラ制御: OpenCV カメラインターフェースのラッパー
- 非同期取得: マルチスレッドによる非同期フレーム取得に対応
- 形式適応: 複数の解像度とフレームレートに対応
- バッファ管理: フレームのバッファリングとフレーム落ちの処理
- 状態監視: カメラの稼働状態の検出
特長:
- デバイス ID、解像度、フレームレートを設定可能
- 非同期取得スレッドにより遅延を低減
- フレーム統計とパフォーマンス監視
- 自動再接続とエラー回復
6. 設定管理 (config/)
- YAML 設定:
object_config.yamlメイン設定ファイル - 環境変数による上書き: 環境変数による動的設定に対応
- 設定の検証: 起動時のパラメータ有効性チェック
- ホットアップデート: 実行時の設定変更に対応
- 複数環境対応: 開発・テスト・本番環境の設定
設定の階層(優先度の高い順):
- 実行時の設定更新
- 環境変数
- YAML 設定ファイル
- コードのデフォルト値
特殊な設定:
- 検出クラスの設定:オレンジ・緑・赤の 3 種類の幾何形状に対応
- 計測システムの設定:座標系、距離計測、寸法計測
- 可視化の設定:複数色の検出枠、計測表示
7. 計測システム
- 座標系: 基準となる座標軸とグリッドを表示
- 距離計測: 物体間のピクセル距離を計算
- 寸法計測: 物体の境界ボックスの寸法を計測
- 幾何計算: 物体の中心点と面積を計算
- 可視化表示: 計測結果をグラフィカルに表示
計測機能:
- 座標軸表示の有効化/無効化
- 物体間距離の計算と表示
- 物体の寸法(幅、高さ、面積)の計算
- 相対位置と比率の計測
- 計測結果の色分け表示
8. Web インターフェース (static/ & templates/)
- レスポンシブデザイン: デスクトップとモバイルデバイスに対応
- リアルタイム映像: MJPEG ストリームプレーヤー
- パラメータ制御: 検出パラメータをリアルタイムで調整
- 統計表示: パフォーマンス指標の可視化
- 状態監視: システムの稼働状態を表示
フロントエンド技術:
- HTML5 Video/Canvas API
- JavaScript ES6+ によるネイティブ開発
- CSS3 レスポンシブレイアウト
- WebSocket によるリアルタイム通信
特色ある機能:
- 複数色の物体検出結果の表示
- 計測システムの可視化制御
- 統計情報のリアルタイム更新
🔄 データフロー
検出処理の流れ
- カメラによる取得: CameraManager が映像フレームを取得
- 形式変換: BGR を NV12 形式に変換し、BPU 入力に適合
- モデル推論: YOLO11 モデルが BPU 上で推論を実行
- 後処理デコード: DFL デコード、信頼度フィルタリング、NMS 処理
- クラス分類: オレンジ・緑・赤の幾何形状を識別
- 座標変換: 検出枠の座標を元画像に復元
- 計測計算: 物体の中心点、寸法、距離を計算
- 結果のレンダリング: 複数色の検出枠、計測情報、統計データを描画
- 映像ストリーム出力: MJPEG 形式でエンコードし Web 側へ配信
マルチスケール検出の流れ
- 特徴抽出: YOLO11 のバックボーンネットワークでマルチスケール特徴を抽出
- 3 層の検出ヘッド:
- 小物体の検出:40x40 特徴マップ、stride=8
- 中程度の物体:20x20 特徴マップ、stride=16
- 大物体の検出:10x10 特徴マップ、stride=32
- DFL 回帰: Distribution Focal Loss による境界ボックス回帰
- 分類予測: マルチクラス分類(オレンジ、緑、赤)
- 信頼度計算: Sigmoid 活性化関数で対象の信頼度を計算
- anchor 点のマッピング: 事前計算した anchor 点で座標変換
- 結果の統合: マルチスケール検出結果の統合と NMS 処理
リアルタイムストリーミングの流れ
- フレーム生成ループ: フレーム取得と検出を継続的に繰り返すループ
- 検出とレンダリング: 各フレームで幾何形状検出と結果描画を実行
- 計測システム: 座標軸、距離計測、寸法表示を追加
- 複数色表示: 物体のクラスに応じて異なる色の検出枠を使用
- JPEG エンコード: 設定可能な画質パラメータでフレームをエンコード
- Multipart ストリーム: MJPEG multipart HTTP レスポンスを生成
- フレームレート制御: 設定に応じて出力フレームレートを制御
- クライアント再生: ブラウザ側でリアルタイムに映像を再生
計測システムのデータフロー
- 検出結果の入力: 物体検出の境界ボックスと分類結果を受け取る
- 中心点の計算: 各物体の幾何学的中心点を計算
- 距離計測: 物体間のユークリッド距離を計算
- 寸法計算: 物体の幅、高さ、面積を計算
- 座標系の描画: 画像上に基準となる座標軸を描画
- 計測の可視化: 距離線、寸法表示、数値を描画
- 結果の出力: 計測結果を映像ストリームに統合
🛠️ 技術スタック
バックエンド技術
- Web フレームワーク: FastAPI - 高性能な非同期 Web フレームワーク
- コンピュータビジョン: OpenCV - 画像処理とカメラ制御
- 科学計算: NumPy、SciPy - 数値計算と後処理アルゴリズム
- AI 推論: hobot_dnn - Horizon BPU 推論エンジン
- 設定管理: PyYAML - YAML 設定ファイルの解析
- ログ記録: Python logging - 構造化ログシステム
AI/ML 技術
- 深層学習モデル: YOLO11 - 最新の物体検出アルゴリズム
- ハードウェアアクセラレーション: Horizon RDK-X5 BPU - AI 推論専用チップ
- 後処理アルゴリズム: DFL、NMS、Sigmoid - 検出結果の最適化
- マルチスケール検出: FPN 特徴ピラミッド - さまざまなサイズの物体検出
- 量子化最適化: INT8 量子化 - BPU による効率的な推論
- 幾何形状認識: 専用に学習させた色・形状分類モデル
フロントエンド技術
- HTML5: モダンな Web 標準、Canvas および Video API
- JavaScript ES6+: ネイティブ JavaScript、追加フレームワークへの依存なし
- CSS3: レスポンシブデザイン、Flexbox レイアウト
- MJPEG ストリーム: リアルタイム映像ストリーム再生技術
計測計算技術
- 幾何計算: ユークリッド距離、面積の計算
- 座標変換: ピクセル座標から実座標へのマッピング
- 可視化レンダリング: OpenCV のグラフィック描画機能
- データ統計: リアルタイム計測データの統計分析
🚀 デプロイアーキテクチャ
Horizon RDK-X5 へのデプロイ
用户浏览器
↓ HTTP/MJPEG
FastAPI Web服务 (端口8004)
↓
Python应用层
↓
hobot_dnn推理引擎
↓
地平线RDK-X5 BPU芯片
↓
USB/CSI摄像头硬件
性能の特長:
- BPU ハードウェアアクセラレーション、推論時間 < 20ms
- リアルタイム 30FPS の映像処理に対応
- 消費電力を最適化し、エッジでのデプロイに最適
- 複数物体の同時検出と計測
開発環境へのデプロイ
开发机浏览器
↓ HTTP/MJPEG
FastAPI开发服务器
↓
CPU模拟检测
↓
OpenCV摄像头接口
↓
本地摄像头设备
機能の特長:
- CPU シミュレーション検出、機能は完全
- ホットリロード開発モード
- デバッグログとパフォーマンス分析
🎨 幾何形状検出の特色
複数色検出アーキテクチャ
输入图像
↓
YOLO11特征提取
↓
多类别分类头
├── 橙色分支 → 橙色边界框 [0, 165, 255]
├── 绿色分支 → 绿色边界框 [0, 255, 0]
└── 红色分支 → 红色边界框 [0, 0, 255]
↓
NMS处理 (按类别)
↓
最终检测结果
計測システムアーキテクチャ
检测结果
↓
几何计算模块
├── 中心点计算
├── 距离测量 → 物体间距离
├── 尺寸测量 → 宽度/高度/面积
└── 坐标系统 → 参考坐标轴
↓
可视化渲染
├── 坐标轴绘制 [255, 255, 255]
├── 测量线绘制 [255, 255, 0]
└── 数值标注
↓
集成显示
ドキュメント