visionA/docs/autoflow/02-prd/features/feature-inference.md
jim800121chen fb7da5d180 chore(autoflow): migrate .autoflow/ 共享層文件至 docs/autoflow/
依 autoflow-agent workspace v2 設計把 PRD / 設計 / 架構 / 交付類
共享文件從個人層 .autoflow/(ignored)搬到 docs/autoflow/(進 git),
讓團隊可共享產品與架構文件,個人層只留 progress / review / testing 等
per-branch 筆記。

- 02-prd/        21 個檔(PRD、features、market-analysis 等)
- 03-design/     18 個檔(design-spec、wireframes、flows 等)
- 04-architecture/ 31 個檔(TDD、design-doc、ADR×14、API 規格等)
- 07-delivery/   3 個檔(project-summary、phase-0.6-handover、stage-deployment-setup)

合計 73 檔。原檔已從 .autoflow/ 移除(migration 工具執行 git mv,
但因 .autoflow/ 在 .gitignore 中、git 將此操作視為新增、無 rename history)。
2026-05-04 16:55:55 +08:00

5.8 KiB
Raw Permalink Blame History

Feature推論操作P0CameraP1Image / Video / Batch

父文件:PRD.md | 對應 User StoriesUS-10、US-11、US-15


概述

使用者選裝置 + 模型 + 來源後能啟動推論並即時看到結果bounding box / 分類結果)。

這是visionA Cloud 最核心的價值體驗。推論結果要即時、低延遲、UI 和 local-tool 一致。


使用者行為

Workspace 進入點(/workspace/workspace/[deviceId]

三段式選擇:

  1. 選裝置:從已配對的裝置列表挑一個
  2. 選模型:從模型庫挑一個(需和裝置型號相容)
  3. 選來源
    • CameraPhase 0:使用者 agent 端的 USB / IP camera
    • ImagePhase 1:從瀏覽器上傳單張圖片
    • VideoPhase 1從瀏覽器上傳影片MP4/AVI/MOV 等)
    • Batch ImagesPhase 1:批次上傳多張圖片

選完後進推論工作區。

推論工作區

UI 沿用 local-tool 的設計

  • 左上:即時 MJPEG 畫面 + overlaybounding box + label + confidence
  • 右側:控制面板
    • 信心度門檻 slider
    • 推論 FPS / 延遲顯示
    • 開始 / 停止按鈕
  • 底下:分類結果 / 偵測框列表
  • 右上 headerTunnel 延遲顯示visionA Cloud 獨有)

Camera 推論流程Phase 0 重點)

┌────────────────────────────────────────────────────────────┐
│                    Camera 推論資料流                        │
│                                                            │
│  1. Browser 呼叫 api-serverPOST /workspace/start         │
│     { deviceId, modelId, source: "camera", cameraId }      │
│       ▼                                                    │
│  2. api-server 找到對應的 tunnel session                   │
│     透過 remote-proxy 轉發到 local agent                   │
│       ▼                                                    │
│  3. local agent 啟動 KneronPLUS inference pipeline         │
│     Camera → 幀捕捉 → Kneron → 推論結果                    │
│       ▼                                                    │
│  4. local agent 把 MJPEG stream 推給 tunnel                │
│     tunnel ─yamux stream─> remote-proxy ─> api-server      │
│       ▼                                                    │
│  5. Browser 透過 /api/camera/stream 拿到 MJPEG             │
│     (遠端 stream 經過 api-server proxy 到瀏覽器)         │
│       ▼                                                    │
│  6. Browser 透過 WebSocket /ws/inference 拿到推論結果      │
│     Canvas overlay bounding box                            │
└────────────────────────────────────────────────────────────┘

關鍵技術挑戰(給 Architect 參考)

  1. MJPEG binary stream 要能過 tunnelyamux 支援,但需要測試吞吐量
  2. WebSocket推論結果也要過 tunnel:雲端前端的 WebSocket 連到 api-serverapi-server 的對應連線再過 tunnel 到 local agent
  3. 多 client 存取同一個 streamlocal-tool 支援多 client multipart MJPEG。visionA Cloud 可能一個使用者開多個 tab要處理並發
  4. Tunnel 斷線處理:推論中 tunnel 斷線UI 要明確提示並自動重連

延遲預算

路徑段 延遲
Camera → local agent 幀捕捉 ~10ms
local agent → Kneron 推論 ~30msmodel 而異)
local agent → remote-proxytunnel經 WAN ~50-200ms RTT
remote-proxy → api-server ~5ms同機房
api-server → Browser ~10-50ms
端到端總延遲P95 目標) < 500ms

local-tool 端到端 ~150-250ms多的部分主要是 tunnel 的 WAN RTT


驗收條件Phase 0Camera only

  • 能從 Workspace 頁選裝置 + 模型 + Camera 來源
  • 點「開始」後MJPEG 畫面在 2 秒內出現
  • Bounding box / 分類結果 overlay 正確即時更新
  • 信心度門檻調整立即反映在畫面
  • 推論 FPS 顯示正確(大約 10-30 fps
  • 端到端延遲 P95 < 500ms內網測試
  • Tunnel 延遲顯示正確header
  • Tunnel 斷線時立即提示使用者並自動嘗試重連
  • 重連成功後推論自動恢復
  • 停止推論後,畫面停在最後一幀 + 有明確「已停止」狀態
  • 同一使用者開兩個 tab 看同一裝置推論 → 都能看(多 client multipart
  • 不同使用者之間互相隔離(不會看到別人的推論畫面)

Phase 1 擴充Image / Video / Batch

Image / Video / Batch 推論不需要即時 stream,使用者上傳檔案到 api-server透過 tunnel 把檔案送到 local agentagent 做完回傳結果。

技術挑戰:

  • 大檔案傳輸的 tunnel 效率
  • 檔案臨時儲存策略api-server 記憶體 or 暫存磁碟)
  • 影片 seek 操作的 tunnel 往返

Phase 0 的 TODO

  • TODO 1Image / Video / Batch 推論Phase 1
  • TODO 2:推論結果的 history / 回放Phase 1需 DB
  • TODO 3:多 client 同時看同一推論的效能優化Phase 1
  • TODO 4:推論結果下載 / exportPhase 1
  • TODO 5Camera 來源的使用者選擇 UI — local agent 可能有多個 camera要讓使用者選
  • TODO 6:推論 logging / analyticsPhase 2用於叢集指標追蹤

連結