# 生木強化線 CCTV → 人機圖：GT 先驗再全跑

> 產出根目錄：本檔所在的 `cursor-glass-factory/`  
> 影片來源：`/mnt/nas/archives/glass-factory/drive-0617/`（8/8 已齊）  
> GT：`glass-factory/20260630-recoreds.csv`（人機圖；等同 Drive「繞圈圈-人機圖」）

## 1. 目標（你要什麼）

用現有廣角 CCTV，驗證 AI 能否在**不認人姓名、不拆微動作**的前提下，產出可取代人工人機圖骨架的三類訊號：

1. **匿名 person tracking**（畫面內持續跟蹤）
2. **工作區 / 等待區佔用時長**（上片或下片對應 zone）
3. **製程 cycle**：上片＝玻璃上滾輪檯 → 推進/進爐；下片＝出爐/滾輪出現 → 收片離檯（Phase B）

成功定義不是「CSV 逐字複製」，而是：**班次級工/等時序 + cycle 次數與時刻**夠準，值得用同一套參數推到全班次。

本階段**忽略**：撕條碼、蓋 MARK、踩踏板、掃碼等微動作。

## 2. 階段策略（鎖定）

```mermaid
flowchart TD
  pilot[PhaseA1_pilot_30to60min]
  full[PhaseA2_full_4h_same_clip]
  gate{Metrics_pass}
  phaseB[PhaseB_all_7_remaining_clips]
  pilot --> full --> gate
  gate -->|yes| phaseB
  gate -->|no| tune[Tune_zones_and_cycle_thresholds]
  tune --> pilot
```

| 階段 | 範圍 | GT | 目的 |
|------|------|-----|------|
| **A1 Pilot** | `強化上片-20260617-0800-1200` 內 **30–60 分鐘高密度段**（**由執行者依 CSV 上片密度自動選窗**，寫入 `reports/phase_a1_window.md`） | CSV 對得上的列都對；**上/下片相關行為最高優先** | 調 zone、cycle 閾值到達標 |
| **A2 Full GT** | 同上片 **全長 4h**（00:00↔08:00） | 整張表能對的都對；上/下片優先 | 報正式正確率 |
| **B 全跑** | 其餘 7 支（上片×3 + 下片×4） | **不新建人工 GT** | **同一套參數推論 + Gemini 抽樣稽核** |

未過 A2 門檻不得把 B 的結果當「已驗證準確率」。

## 3. GT 對齊規則

- **來源**：`20260630-recoreds.csv`（曾建程/賴彥碩上片、阮文明/許信德收片、爐側等欄位）。
- **覆蓋**：**整張表能對時間軸的都納入評分**；評分權重／報告排序上 **上片、下片（收片）相關事件優先**於打掃、對話、裝水等。
- **影片對鐘**：該片 `t=0` → 牆上 **08:00**；CSV 時鐘 ∈ [08:00,12:00) → `video_t = clock − 08:00`。
- **語意映射（可計分）**：

  | CSV 粗類 | AI 對照 |
  |----------|---------|
  | 上片複合列（含撕碼/MARK/踏板文字） | **load cycle** + 期間 **work zone** 佔用 |
  | 等待* | **wait zone** 佔用（或無 cycle 的長駐） |
  | 搬/吊/整理玻璃、A 車 | work／搬運相關佔用或輔助事件 |
  | 下片/收片相關列 | Phase A 若同機位可見則對；否則標「跨機位／本片不可見」不硬罰 |
  | 微動作細節 | **本階段不計分** |

- **不要求**：AI 時長 = 單一具名員工列時長 1:1（AI 為匿名多人；報 scene-level 與 dominant-track 兩種聚合）。

## 4. 技術方案

- **主引擎**：本機 person detect + ByteTrack + 上片專用 zones + 滾輪檯 glass/motion 狀態機。
- **Gemini 3.6 Flash**：僅抽樣稽核（TP/FP/FN clip），不當全長標註器。
- **Zones**：新建 `configs/shengmuglass-tempering-load.zones.json`（上片紅滾輪在畫面左側）；**不可**直接用舊下片 unload zones。
- **Cycle 狀態機**：`empty → occupied → advancing → clear`；一 cycle = 佔用開始 → 向爐口推進 → 清空。
- **採樣**：分析用 1fps proxy；抽查用原片短 clip。

## 5. 指標與過關線（已同意）

### 稽核 UI（Phase A 必做）

為讓人工能稽核，A1/A2 必須提供：

- **Overlay**：影片上畫人框、track id、zone、cycle 標記
- **Scrub／timeline**：時間軸可拖；點「等待」或「上片 cycle」區間可跳到對應秒

實作優先：本地靜態頁或既有 demo-cache player 指向 `cursor-glass-factory/runs/...`（不強制先上 GCP）。

### Track
- 小標：2×約 10 分鐘（高峰 + 等待）
- 人在場 recall ≥ 0.90；IDSW 可控（目標 ≤ 3/10min，無嚴重遮擋時）

### 區佔用
- CSV → `work_like` / `wait_like` intervals
- Interval IoU≥0.3 → Precision/Recall
- 總 wait（及 work）MAPE ≤ 35%
- Work zone 對 CSV work_like 覆蓋 recall ≥ 0.80

### 上片 cycle
- CSV 上片複合「發生時間」為點事件，匹配窗 **±90s**
- Recall ≥ 0.75、Precision ≥ 0.70、median \|Δt\| ≤ 60s

**A2 同時達標** → 才開 Phase B。

## 6. Phase B（達標後）

- 輸入：其餘 7 支完整 mp4（上片下午/晚班/夜班 + 下片四班）。
- 參數：A2 鎖定的 zones、閾值、狀態機；下片需 **unload 專用 zone／cycle 定義**（幾何不同），但人物追蹤與佔用管線同一套。
- 驗證：每支抽樣 Gemini 稽核 + 摘要統計（cycle 數、work/wait 秒）；**不宣稱與 CSV 同等定量**，除非另補 GT。

## 7. 目錄結構（全部寫入本 folder）

```
cursor-glass-factory/
  PLAN.md                 # 本計畫
  README.md
  configs/                # load / unload zones
  scripts/                # proxy、track、cycle、gt、metrics、audit
  data/                   # CSV 連結、GT intervals/events
  media/
    proxies/
    frames/
    overlays/
    audit_clips/
  runs/
    phase_a1_pilot/
    phase_a2_full/
    phase_b/<clip_id>/
  metrics/
  audit/
  reports/                # A1/A2/B 一頁摘要
```

原始大影片只讀 NAS，不複製進本目錄。

## 8. 執行順序（確認「執行」後）

1. 建目錄樹 + README；連結 CSV → `data/`
2. 選 A1 高密度窗（建議對齊 CSV 上片最密的 30–60 分鐘）；抽幀手調 load zones
3. 建該窗 1fps proxy → detect+track → occupancy → cycle
4. CSV→GT；算指標；不達標則調 zone/閾值，重複 A1
5. A1 達標 → A2 全長 4h 同流程 → `reports/phase_a2_metrics.md`
6. A2 達標 → Phase B 批次推論 + 抽樣稽核 → `reports/phase_b_summary.md`

## 9. 風險（已知）

- 透明玻璃遠景「有/無」不穩 → cycle 必須靠推進動態，不能只靠靜態亮度
- 多人同時在檯邊 → 佔用用 scene-level；具名 TPM 仍需 badge 才對人
- 下片與上片機位不同 → B 階段 unload zone 另調，否則 wait/work 無意義
- CSV 收片列可能對應另一機位 → 標「不可見」避免假陰性懲罰
