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

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

概要

インテリジェント顔追跡システムは 統合 MCP サーバーアーキテクチャ v2.0.0 を採用し、顔検出機能とパン・チルト制御機能をモジュール化されたシステムに統合しています。従来の単一 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. 統合サーバー

役割:システムのライフサイクル管理とサービスのオーケストレーション

主な機能:

  • サービス起動:モデルとサービスコンポーネントを順に初期化し、起動プロセスを協調させます。
  • リソース管理: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株式会社までお問い合わせください。