HumansXドキュメントセンター 公式サイトへ ↗

システムアーキテクチャ設計

概要

インテリジェント顔追跡システムは統合MCPサーバーアーキテクチャ v2.0.0を採用し、顔検出と雲台制御の機能を1つのモジュール化されたシステムに統合しています。従来の単一Webアプリケーションから、AIアシスタントと連携しやすいマルチサービスプラットフォームへと進化し、MCPプロトコルとRESTful APIの両方に対応しています。

アーキテクチャの特長

  • ⚡ 統合サーバー: 単一のエントリーポイントですべてのサービスを管理
  • 🏗️ 階層設計: コアロジック層・サービス層・API層を明確に分離
  • ⚙️ 設定管理: YAML設定ファイルで複数環境に対応
  • 🔒 型安全: Pydanticによるデータ検証
  • 🔄 非同期協調: スマートなサービスライフサイクル管理
  • 🚨 例外駆動: きめ細かな例外処理の仕組み

ディレクトリ構成

Proj_Intelligent-Face-Tracker/
├── face_tracker_mcp/         # 主要源代码目录
│   ├── main.py              # 统一入口点
│   ├── config/              # 配置管理
│   │   ├── settings.py      # 配置数据模型
│   │   ├── config_loader.py # 配置加载器
│   │   └── logging_config.py # 日志配置
│   ├── core/                # 核心业务逻辑
│   │   ├── detection.py     # YOLO11人脸检测
│   │   ├── gimbal_control.py # 云台控制
│   │   ├── exceptions.py    # 自定义异常类
│   │   └── utils.py         # 工具函数
│   ├── services/            # 服务层
│   │   ├── web_service.py   # Web服务封装
│   │   └── mcp_service.py   # MCP服务
│   └── api/                 # API层
│       └── routes.py        # 路由定义
├── src/                     # 传统版本源代码(兼容)
│   ├── detection_core/      # 人脸检测核心
│   ├── utils/               # PID控制器、卡尔曼滤波等
│   └── web/                 # Flask Web应用
├── config/                  # 配置文件
│   └── default.yaml         # 默认配置
├── bin/                     # 脚本目录
├── tests/                   # 测试代码
├── docs/                    # 文档目录
├── logs/                    # 日志目录
└── model/                   # YOLO模型文件目录

🏗️ 全体アーキテクチャ

統合サーバーアーキテクチャ (UnifiedServer)

┌─────────────────────────────────────────────────────────────────┐
│                      统一服务器 (UnifiedServer)                      │
├─────────────────────────────────────────────────────────────────┤
│  主线程 (Asyncio Event Loop)                                      │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │                   MCP服务 (FastMCP)                         │ │
│  │  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────┐  │ │
│  │  │   8个工具函数     │  │   异步HTTP客户端   │  │  生命周期管理  │  │ │
│  │  └─────────────────┘  └─────────────────┘  └─────────────┘  │ │
│  └─────────────────────────────────────────────────────────────┘ │
│                                                                 │
│  后台线程 (Background Thread)                                    │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │                    Web服务 (Flask)                          │ │
│  │  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────┐  │ │
│  │  │   实时视频流     │  │    API端点       │  │   Web界面    │  │ │
│  │  └─────────────────┘  └─────────────────┘  └─────────────┘  │ │
│  └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘

サービス協調アーキテクチャ

┌─────────────────────────────────────────────────────────────────┐
│                        应用层 (Application Layer)                │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐  │
│  │   MCP服务层       │  │   Web服务层       │  │   API路由层      │  │
│  │  (FastMCP)       │  │   (Flask)        │  │  (RESTful)      │  │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘  │
├─────────────────────────────────────────────────────────────────┤
│                        业务逻辑层 (Business Logic Layer)           │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐  │
│  │   人脸检测模块     │  │   云台控制模块     │  │   追踪算法模块    │  │
│  │  (Detection)     │  │  (GimbalControl) │  │  (Tracking)     │  │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘  │
├─────────────────────────────────────────────────────────────────┤
│                        硬件抽象层 (Hardware Abstraction Layer)     │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────┐  │
│  │   摄像头接口       │  │   串口通信接口     │  │   BPU推理接口    │  │
│  │   (Camera)       │  │   (Serial)       │  │   (hobot_dnn)   │  │
│  └─────────────────┘  └─────────────────┘  └─────────────────┘  │
└─────────────────────────────────────────────────────────────────┘

主要コンポーネント

1. 統合サーバー (UnifiedServer)

役割: システムのライフサイクル管理とサービスの協調

主な機能:

  • サービスの起動: モデルとサービスコンポーネントを順に初期化し、起動フローを協調
  • リソース管理: HTTPクライアントやスレッドプールなどのリソースを一元管理
  • シグナル処理: SIGINT/SIGTERMシグナルを適切に処理し、リソースを確実に解放
  • ネットワーク検出: 利用可能なすべてのネットワークアクセスアドレスを自動検出して表示

技術的な実装:

class UnifiedServer:
    async def start(self):
        # 1. 初始化YOLO模型
        self.initialize_model()
        # 2. 初始化Web和MCP服务
        self.initialize_services()
        # 3. 启动Web服务(后台线程)
        self.start_web_service()
        # 4. 启动MCP服务(主线程异步)
        await self.start_mcp_service()

2. 顔検出モジュール (Detection Core)

モデルアーキテクチャ: 顔検出向けに最適化されたYOLO11n量子化モデル

技術仕様:

  • 入力サイズ: 320×320ピクセル、NV12形式
  • 推論プラットフォーム: Horizon BPUアクセラレーション
  • 信頼度しきい値: 0.6(設定可能)
  • IoUしきい値: 0.45(設定可能)
  • 推論性能: 約30fpsのリアルタイム検出

データの流れ:

原始图像 → BGR2NV12转换 → 模型推理 → 后处理 → 结果输出
    ↓           ↓            ↓         ↓         ↓
 640×480    320×320      BPU推理   NMS过滤   边界框+置信度

主要クラスの設計:

class YOLO11_FaceDetect:
    def __init__(self, model_path, conf_thres, iou_thres):
        self.dnn_handle = load_model(model_path)
        self.conf_thres = conf_thres
        self.iou_thres = iou_thres

    def detect(self, frame) -> List[Detection]:
        # BGR → NV12 格式转换
        input_tensor = self.bgr2nv12(frame)
        # BPU推理
        outputs = self.forward(input_tensor)
        # 后处理:NMS + 坐标反量化
        return self.postprocess(outputs)

3. インテリジェント追跡モジュール (Tracking System)

複数対象追跡システム:

┌─────────────────────────────────────────────────────────────────┐
│                       目标追踪系统架构                              │
├─────────────────────────────────────────────────────────────────┤
│  检测结果输入 → 目标关联 → 目标评分 → 目标选择 → 追踪输出          │
│      ↓            ↓        ↓        ↓        ↓                │
│   边界框列表   → ID匹配  → 综合评分 → 最优选择 → 追踪坐标         │
├─────────────────────────────────────────────────────────────────┤
│                       卡尔曼滤波预测                                │
├─────────────────────────────────────────────────────────────────┤
│  位置预测 ← 状态更新 ← 测量更新 ← 预测步骤 ← 历史状态              │
│     ↓         ↓         ↓         ↓         ↓                │
│  未来位置   → 状态估计 → 观测融合 → 运动模型 → [x,y,vx,vy]        │
└─────────────────────────────────────────────────────────────────┘

対象スコアリングアルゴリズム:

def calculate_target_score(target):
    # 基础评分 = 置信度权重 × 置信度 + 大小权重 × 归一化面积
    base_score = (confidence_weight * target.confidence +
                 size_weight * normalized_area)

    # 持久性评分 = 连续检测次数 / 最大历史计数
    persistence_score = target.detection_count / max_history_count

    # 位置连续性评分 = 1.0 - min(距离/最大距离, 1.0)
    position_score = 1.0 - min(distance / max_distance, 1.0)

    # 当前目标加成(避免频繁切换)
    current_bonus = target_switch_threshold if is_current_target else 0

    return (base_score + persistence_weight * persistence_score +
            position_weight * position_score + current_bonus)

カルマンフィルターの設計:

  • 状態ベクトル: [x, y, vx, vy](位置+速度)
  • 状態遷移行列: 等速運動モデル
  • 観測行列: 位置を直接観測
  • ノイズモデル: プロセスノイズ+観測ノイズ

4. 雲台制御モジュール (Gimbal Control)

ハードウェアインターフェース:

  • 通信プロトコル: シリアル通信 (/dev/ttyS1, 115200ボーレート)
  • 制御方式: PWMサーボ制御
  • 角度範囲: 0°~270°(水平・垂直)
  • 制御精度: 1°刻み

PIDコントローラー:

class PIDController:
    def __init__(self, kp=0.6, ki=0.1, kd=0.05):
        self.kp, self.ki, self.kd = kp, ki, kd
        self.integral = 0.0
        self.previous_error = 0.0

    def update(self, error, dt):
        self.integral += error * dt
        derivative = (error - self.previous_error) / dt
        output = (self.kp * error +
                 self.ki * self.integral +
                 self.kd * derivative)
        self.previous_error = error
        return output

例外処理の仕組み:

# 自定义异常体系
class GimbalAngleOutOfRangeError(Exception): pass
class GimbalNotConnectedError(Exception): pass
class GimbalMoveError(Exception): pass

# 分层错误处理
try:
    gimbal.move_to(pan, tilt)
except GimbalAngleOutOfRangeError as e:
    return {"error_type": "ANGLE_OUT_OF_RANGE", "message": str(e)}

5. MCPサービスモジュール (MCP Service)

ツール関数のアーキテクチャ:

┌─────────────────────────────────────────────────────────────────┐
│                        MCP工具函数层                               │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌───────────┐ │
│  │  检测类工具   │  │  控制类工具   │  │  状态类工具   │  │ 追踪类工具  │ │
│  │             │  │             │  │             │  │           │ │
│  │detect_faces │  │control_     │  │get_gimbal_  │  │start_face_│ │
│  │             │  │gimbal       │  │status       │  │tracking   │ │
│  │             │  │             │  │             │  │           │ │
│  │             │  │move_gimbal_ │  │get_system_  │  │stop_face_ │ │
│  │             │  │relative     │  │status       │  │tracking   │ │
│  │             │  │             │  │             │  │           │ │
│  │             │  │reset_gimbal_│  │             │  │           │ │
│  │             │  │position     │  │             │  │           │ │
│  └─────────────┘  └─────────────┘  └─────────────┘  └───────────┘ │
├─────────────────────────────────────────────────────────────────┤
│                       HTTP客户端层                                │
├─────────────────────────────────────────────────────────────────┤
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │                   异步HTTP客户端                             │ │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────────────┐  │ │
│  │  │  连接池管理   │  │  错误处理     │  │     超时控制         │  │ │
│  │  └─────────────┘  └─────────────┘  └─────────────────────┘  │ │
│  └─────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│                        Web API层                                 │
└─────────────────────────────────────────────────────────────────┘

HTTPエラー処理:

def _handle_http_error(self, e: Exception, operation: str):
    if isinstance(e, httpx.HTTPStatusError):
        # 解析结构化错误响应
        error_data = e.response.json()
        return {
            "success": False,
            "error": error_data.get('message'),
            "error_type": error_data.get('error_type'),
            "error_code": error_data.get('error_code'),
            "details": error_data.get('details', {})
        }

6. Webサービスモジュール (Web Service)

Flaskアプリケーションのアーキテクチャ:

  • 静的リソース: HTMLテンプレート、CSSスタイル、JavaScriptスクリプト
  • 映像ストリーム: MJPEGストリームのリアルタイム伝送
  • APIエンドポイント: RESTfulインターフェース、JSONレスポンスに対応
  • CORS対応: クロスオリジンアクセスに対応

APIエンドポイントの設計:

GET  /api/faces              # 获取人脸检测结果
POST /api/gimbal/control     # 控制云台绝对位置
POST /api/gimbal/relative    # 控制云台相对移动
GET  /api/gimbal/status      # 获取云台状态
POST /api/tracking/start     # 启动自动追踪
POST /api/tracking/stop      # 停止自动追踪
GET  /api/system/status      # 获取系统状态
GET  /video_feed             # 实时视频流

🔧 設定管理のアーキテクチャ

設定の階層構造

┌─────────────────────────────────────────────────────────────────┐
│                        配置层次结构                                │
├─────────────────────────────────────────────────────────────────┤
│  环境变量 (最高优先级)                                             │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │  FACE_TRACKER_WEB_PORT=5000                                │ │
│  │  FACE_TRACKER_MCP_PORT=8000                                │ │
│  │  FACE_TRACKER_LOGGING_CONSOLE_LEVEL=INFO                   │ │
│  └─────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│  YAML配置文件 (中等优先级)                                         │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │  config/default.yaml                                       │ │
│  │  ├── logging: 日志配置                                      │ │
│  │  ├── model: 模型配置                                        │ │
│  │  ├── camera: 摄像头配置                                     │ │
│  │  ├── gimbal: 云台配置                                       │ │
│  │  └── tracking: 追踪配置                                     │ │
│  └─────────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│  代码默认值 (最低优先级)                                           │
│  ┌─────────────────────────────────────────────────────────────┐ │
│  │  Settings类中的dataclass默认值                               │ │
│  └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘

設定データクラスの設計

@dataclass
class Settings:
    # 应用配置
    app_name: str = "智能人脸追踪系统"
    version: str = "2.0.0"
    environment: str = "development"

    # 服务配置
    web: WebConfig = field(default_factory=WebConfig)
    mcp: MCPConfig = field(default_factory=MCPConfig)

    # 业务配置
    model: ModelConfig = field(default_factory=ModelConfig)
    camera: CameraConfig = field(default_factory=CameraConfig)
    gimbal: GimbalConfig = field(default_factory=GimbalConfig)
    tracking: TrackingConfig = field(default_factory=TrackingConfig)

    # 系统配置
    logging: LoggingConfig = field(default_factory=LoggingConfig)

📊 データフローのアーキテクチャ

リアルタイムデータフロー

┌─────────────────────────────────────────────────────────────────┐
│                         实时数据流                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  摄像头 → 图像捕获 → 人脸检测 → 目标追踪 → 云台控制                │
│    ↓         ↓         ↓         ↓         ↓                  │
│  视频流   → BGR帧    → 边界框   → 追踪坐标 → 舵机角度             │
│                                                                 │
│                        ↓                                        │
│                                                                 │
│  Web界面 ← 视频流编码 ← 结果绘制 ← 状态更新 ← 反馈信息             │
│    ↑         ↑         ↑         ↑         ↑                  │
│  用户交互  ← MJPEG流  ← 可视化   ← JSON API ← 执行结果            │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

制御フローのアーキテクチャ

┌─────────────────────────────────────────────────────────────────┐
│                          控制流                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  AI助手/Web界面 → MCP工具/API → 业务逻辑 → 硬件控制               │
│       ↓              ↓           ↓         ↓                  │
│   自然语言/手动    → JSON请求   → 参数验证 → 串口通信              │
│                                                                 │
│                        ↓                                        │
│                                                                 │
│   结果反馈 ← JSON响应 ← 异常处理 ← 执行反馈 ← 硬件状态             │
│       ↑         ↑         ↑         ↑         ↑                │
│   用户界面   ← 结构化数据 ← 错误分类 ← 操作结果 ← 传感器数据        │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

🚀 性能最適化のアーキテクチャ

並行処理の設計

  • メインスレッド: MCPサービスの非同期イベントループ
  • バックグラウンドスレッド: WebサービスのFlaskアプリケーション
  • 検出スレッド: 独立した映像処理スレッド
  • 制御スレッド: 雲台制御を逐次実行

リソース管理

  • HTTPコネクションプール: httpx.AsyncClientで接続を再利用
  • メモリ最適化: 画像処理にインプレース操作を使用
  • CPU最適化: BPUハードウェアアクセラレーション推論
  • I/O最適化: 非同期シリアル通信

拡張性の設計

  • プラグインアーキテクチャ: 新しい検出モデルのプラグインに対応
  • 設定のホットリロード: 実行中の設定更新に対応
  • マルチデバイス対応: ハードウェアインターフェースを抽象化し、さまざまなプラットフォームに対応
  • 分散デプロイ: MCPサービスを単独でデプロイ可能

🛡️ セキュリティと安定性

例外処理の体系

  1. カスタム例外: ビジネスロジックに関連する正確な例外分類
  2. 階層的な処理: ハードウェア層からAPI層まで段階的に例外を伝達
  3. 構造化レスポンス: 統一されたエラーレスポンス形式
  4. 状態の回復: 例外発生後にシステム状態を自動回復

システム監視

  • ヘルスチェック: 各コンポーネントの状態を定期的にチェック
  • リソース監視: CPU・メモリ・ネットワークの使用状況
  • ログシステム: レベル別のログ記録とローテーション
  • 性能指標: リアルタイムのフレームレート・応答時間の統計

このアーキテクチャ設計により、システムの高性能・高可用性・高拡張性が確保され、今後の機能拡張と性能最適化のための堅固な基盤となります。

お問い合わせ

資料のダウンロード・技術サポートについては、HumansX株式会社までお問い合わせください。