jim800121chen c54f16fca0 Initial commit: visionA monorepo with local-tool subproject
local-tool/: visionA-local desktop app
- M1: Wails shell + Go server + Next.js UI + Mock mode (macOS dmg ready)
- M2: i18n (zh-TW/en) + Settings 4-tab refactor
- M3: Embedded Python 3.12 runtime (python-build-standalone) + KneronPLUS wheels
- M4: Windows Inno Setup script (build on Windows runner)
- M5: Linux AppImage script + udev rule (build on Linux runner)
- M6: ffmpeg (GPL, pending legal review) + yt-dlp bundled
- Lifecycle: watchServer health check, fatal native dialog,
            Wails IPC raise endpoint, stale process cleanup

.autoflow/: full PRD / Design Spec / Architecture / Testing docs
            (4 rounds tri-party discussion + cross review)
.github/workflows/: macOS / Windows / Linux build CI

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 22:10:38 +08:00

18 KiB
Raw Permalink Blame History

03 — 主要頁面 Wireframe結構化描述

以下為文字版 wireframe。所有尺寸以 Desktop 1280×800 為基準sidebar 固定 240px。

3.1 Dashboard/

設計意圖原本是叢集總覽local 版改為「快速開始 + 單機狀態」,幫使用者 3 秒內決定下一步動作。

┌─ Sidebar ─┬──────────────────────── Content ───────────────────────┐
│           │ Dashboard                    [Mock?]  [●Server] [?]    │
│           ├────────────────────────────────────────────────────────┤
│           │                                                        │
│           │  你好 👋                                               │
│           │  visionA-local 已準備就緒                              │
│           │                                                        │
│           │  ┌─ Quick Start ──────────────────────────────────┐   │
│           │  │ [①接上裝置] [②選擇模型] [③前往 Workspace →]    │   │
│           │  │ (步驟卡,已完成的打勾)                         │   │
│           │  └────────────────────────────────────────────────┘   │
│           │                                                        │
│           │  ┌─ Status ────┐ ┌─ Status ────┐ ┌─ Status ────┐     │
│           │  │ 🔌 已連裝置 │ │ 📦 可用模型 │ │ ⏱ Uptime    │     │
│           │  │    2        │ │    6        │ │  00:12:34   │     │
│           │  │  (KL720×1,  │ │  (預置 5 +  │ │             │     │
│           │  │   KL520×1)  │ │   自訂 1)   │ │             │     │
│           │  └─────────────┘ └─────────────┘ └─────────────┘     │
│           │                                                        │
│           │  ┌─ 最近活動 ────────────────────────────────────┐   │
│           │  │ • 10:42  USB 裝置「KL720-A」已連線             │   │
│           │  │ • 10:41  模型「fd_mask.nef」已載入             │   │
│           │  │ • 10:40  Server 已啟動localhost:3721       │   │
│           │  │ ...                                            │   │
│           │  └────────────────────────────────────────────────┘   │
│           │                                                        │
└───────────┴────────────────────────────────────────────────────────┘

元件組成:

  • QuickStartCard3 步卡片,根據狀態打勾(狀態來自 /api/devices + /api/models
  • 3 個 StatCard:已連裝置 / 可用模型 / Uptime原有元件調整 label
  • ActivityTimeline:沿用,過濾掉 cluster 事件

互動:

  • 點「③前往 Workspace」= 跳到 /workspace
  • 點 StatCard 上的數字可跳到對應頁
  • 最近活動項目可 hover 顯示完整時間戳

空狀態:若還沒有任何裝置/模型,步驟卡會顯示引導文字「先接上一顆 Kneron 裝置吧」並附 CTA 到 Devices。


3.2 Models/models

設計意圖沿用原設計model-grid + filters + detail drawer只移除 cluster 欄位。

┌─ Sidebar ─┬────────────────────────── Content ─────────────────────┐
│           │ Models                                   [+ 上傳模型]  │
│           ├────────────────────────────────────────────────────────┤
│           │  [搜尋____]  [架構▾] [類別▾] [排序▾]   共 6 個模型      │
│           │                                                        │
│           │  ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐                 │
│           │  │ Card │ │ Card │ │ Card │ │ Card │                 │
│           │  │ 縮圖 │ │ 縮圖 │ │ 縮圖 │ │ 縮圖 │                 │
│           │  │ 名稱 │ │ 名稱 │ │ 名稱 │ │ 名稱 │                 │
│           │  │ 類別 │ │ 類別 │ │ 類別 │ │ 類別 │                 │
│           │  │ [詳情]│ │ [詳情]│ │ [詳情]│ │ [詳情]│                 │
│           │  └──────┘ └──────┘ └──────┘ └──────┘                 │
│           │                                                        │
│           │  ┌──────┐ ┌──────┐                                    │
│           │  │ Card │ │ Card │                                    │
│           │  └──────┘ └──────┘                                    │
│           │                                                        │
│           │  [將 .nef 拖放到這裡也可以上傳] ← dropzone 提示         │
└───────────┴────────────────────────────────────────────────────────┘
  • 拖放區域覆蓋整個 Models 頁面hover 拖曳時變藍色高亮
  • 點 Card 開啟 Detail Drawer側邊滑出
  • 上傳 Dialog 沿用原 model-upload-dialog

空狀態:無模型時顯示「還沒有模型,上傳一個 .nef 試試 →」,附大型上傳按鈕與預置模型列表連結。


3.3 Devices/devices

┌─ Sidebar ─┬────────────────────────── Content ─────────────────────┐
│           │ Devices                    [🔄 重新掃描]  [真實 / Mock]│
│           ├────────────────────────────────────────────────────────┤
│           │  ⓘ 插上 Kneron USB 裝置後自動出現在下方                │
│           │                                                        │
│           │  ┌─ Connected ─────────────────────────────────────┐   │
│           │  │ ┌──────────┐  ┌──────────┐                      │   │
│           │  │ │ KL720-A  │  │ KL520-B  │                      │   │
│           │  │ │ 🟢 Ready │  │ 🟢 Ready │                      │   │
│           │  │ │ FW 2.1.0 │  │ FW 1.8.3 │                      │   │
│           │  │ │ [Workspc]│  │ [Workspc]│                      │   │
│           │  │ └──────────┘  └──────────┘                      │   │
│           │  └─────────────────────────────────────────────────┘   │
│           │                                                        │
│           │  ┌─ Disconnected History ──────────────────────────┐   │
│           │  │ (過去連接過的裝置,用於顯示連線紀錄)            │   │
│           │  └─────────────────────────────────────────────────┘   │
│           │                                                        │
│           │  ⓘ Connection Log (drawer, 點右下角按鈕展開)            │
└───────────┴────────────────────────────────────────────────────────┘
  • 右上角 真實 / Mock 是切換 pill點擊彈出確認對話框避免誤觸
  • Device Card 點「Workspace」直接跳到 /workspace?device=<id>
  • 韌體燒錄按鈕已移除
  • Connection Log drawer 從右側滑出(沿用 device-connection-log.tsx

空狀態

  • 真實模式無裝置:顯示大型 empty state — 插圖USB 接頭)+ 「沒偵測到 Kneron 裝置」+ 排錯清單(重插 USB / 檢查權限 / 切到 Mock 模式)
  • Mock 模式:固定顯示 3 顆假裝置,每個都有 Mock 小標

3.4 Workspace/workspace

設計意圖:核心操作頁,左右分欄 — 左邊攝影機畫面+推論 overlay右邊控制面板。

┌─ Sidebar ─┬────────────────────────── Content ─────────────────────┐
│           │ Workspace  [裝置▾ KL720-A]   [▣ Live | ▤ Batch | ▧ Video]│
│           ├────────────────────────────────────────────────────────┤
│           │ ┌─────────── Camera Feed ────────────┐ ┌─ Control ──┐ │
│           │ │                                    │ │ 模型:      │ │
│           │ │                                    │ │  [fd_mask]│ │
│           │ │        [MJPEG + Overlay]           │ │            │ │
│           │ │                                    │ │ Confidence│ │
│           │ │                                    │ │  ━━━● 0.7 │ │
│           │ │                                    │ │            │ │
│           │ │                                    │ │ Source:    │ │
│           │ │                                    │ │  [webcam ▾]│ │
│           │ │                                    │ │            │ │
│           │ │                                    │ │ [▶ Start]  │ │
│           │ └────────────────────────────────────┘ │            │ │
│           │ ┌── Results Timeline ─────────────────┐ │ Perf:      │ │
│           │ │  (bounding boxes / classes list)   │ │  FPS: 24   │ │
│           │ └────────────────────────────────────┘ │  Latency:  │ │
│           │                                         │  180ms     │ │
│           │                                         └────────────┘ │
└───────────┴────────────────────────────────────────────────────────┘
  • 頂部 TabLive即時串流/ Batch批次圖片/ Video影片檔— 三模式切換
  • 裝置選擇器top bar 左邊,下拉選單顯示所有已連裝置;只有 1 顆時直接顯示名稱;無裝置時顯示 EmptyWorkspace
  • Camera Feed:沿用 camera-feed + camera-overlay
  • Control Panel:沿用 inference-panel + confidence-slider + source-selector
  • Results Timeline:底部時間軸,顯示每秒的推論結果摘要
  • Perf 指標說明
    • FPS 顯示目前即時影格率
    • LatencyMJPEG 端到端延遲(拍到→瀏覽器顯示),第四輪 R4-2 定案目標:首次 ≤250ms、穩定後 ≤150ms。上圖示例 180ms 為「穩定後但略高於理想」的典型值;實際數字會隨硬體與解析度變動。
    • 當 Latency > 250ms 時以 warning 顏色顯示,使用者可點擊查看瓶頸(未來功能)

空狀態EmptyWorkspace 元件):

┌────────────────────────────────────────────────────┐
│                                                    │
│           🔌                                       │
│                                                    │
│     還沒有可用的裝置                                │
│                                                    │
│     接上一顆 Kneron USB 裝置,或切到 Mock 模式      │
│     先體驗看看。                                    │
│                                                    │
│     [前往 Devices]  [切到 Mock 模式]                │
│                                                    │
└────────────────────────────────────────────────────┘

3.5 Settings/settings/[tab]

┌─ Sidebar ─┬────────────────────────── Content ─────────────────────┐
│           │ Settings                                                │
│           ├────────────────────────────────────────────────────────┤
│           │ ┌── Tabs ──┬── Panel ────────────────────────────────┐│
│           │ │ ● 一般   │                                          ││
│           │ │ ○ 硬體   │   語言         [繁中 ▾]                 ││
│           │ │ ○ 模型   │                                          ││
│           │ │ ○ 進階   │   啟動時開啟  [Dashboard ▾]             ││
│           │ │          │                                          ││
│           │ │          │   資料目錄    ~/Library/Application    ││
│           │ │          │               Support/visiona-local/   ││
│           │ │          │               [在 Finder 顯示]          ││
│           │ │          │                                          ││
│           │ │          │   主題        跟隨系統(目前:深色)    ││
│           │ │          │               ⓘ 深色模式自動跟隨系統    ││
│           │ │          │                                          ││
│           │ └──────────┴──────────────────────────────────────────┘│
└───────────┴────────────────────────────────────────────────────────┘

分頁內容

一般

  • 語言(繁中 / English / 跟隨系統)
  • 啟動時預設頁Dashboard / Workspace / 上次開啟的頁)
  • 資料目錄(唯讀顯示 + 「在 Finder/Explorer 顯示」按鈕)
  • 主題(唯讀顯示「跟隨系統」+ 當前 light/dark 狀態)

硬體

  • 執行模式(真實硬體 / Mock— 切換時有確認對話框
  • USB 權限狀態(唯讀)
  • Server Port預設 3721衝突時可改
  • 裝置自動掃描頻率(預設 5 秒)

模型

  • 預置模型顯示開關(可隱藏內建模型只看自訂)
  • 自訂模型路徑(唯讀顯示 + 「新增路徑」)
  • 清除模型快取

進階

  • 開啟日誌 viewer嵌入 server-log-viewer
  • 開啟 Server 狀態(嵌入 server-status-dashboard
  • Server Port 唯讀顯示(預設 3721若被占用會自動挑下一個顯示實際使用的 port + 「複製」按鈕)
  • Python 執行模式(第四輪新增 UI 入口,對應 Architect dependency-bundling.md §1.5--python-mode CLI flag
    Python 執行模式    [內嵌 (推薦) ▾]
                      選項:
                      • 內嵌 — 使用 App 內建的 python-build-standalone完全離線
                      • 系統 — 使用系統 Python需自行安裝 KneronPLUS
                      • 自動 — 優先內嵌,失敗時退回系統
                      目前狀態:內嵌 Python 3.11.7(✓ 已就緒)
                      [重新偵測]
    
    切換後需要重啟 App 才能生效(顯示 toast 提示。此區塊資料來源Architect 需提供 /api/system/python-modeGET 讀目前狀態、POST 切換)。
  • 重置所有設定(危險操作,雙重確認)
  • 關於 visionA-local版本、授權、第三方套件、Kneron SDK 版本)

備註:原規劃有「外觀」分頁,因為只剩語言一項且主題跟隨系統,合併到「一般」分頁。