產品目標
- 以比較為導向的臉部量測工具:記錄個人或不同「對象」在不同時間點、不同療程/保養(如按摩、音波、肉毒)後的客觀數據變化。
- 避免以「黃金比例」等單一審美製造焦慮,改用多項可量化指標(眼距、鼻寬、嘴寬、下顎線長等)追蹤趨勢。
主要使用流程(使用者視角)
- 首頁 → 按「開始臉部偵測 → 記錄」開啟偵測 Sheet。
- 偵測 Sheet → 透過相片(或相機)偵測臉與 Landmark,立即產出數據。
- 下一步:紀錄 → 填「對象」「療程」「日期時間」(預設現在;可改),下方顯示剛才量測結果 → 儲存。
- 首頁 → 顯示最近 5 筆(主標:對象;副標:療程+日期;右側顯示目前選取的指標值)。
- 產生圖表 → 依「對象」「療程」「指標」篩選並查看數據趨勢。
技術棧
- UI:SwiftUI(NavigationStack、Sheet、Form、Charts)。
- 影像/偵測:Vision(VNDetectFaceRectanglesRequest / VNDetectFaceLandmarksRequest)、CoreImage Fallback(CIDetectorTypeFace)。
- 相機:AVFoundation(AVCaptureSession、VideoDataOutput)。
- 照片選取:PhotosPicker(PhotosUI)。
- 架構/狀態:Swift Observation(@Observable、@Bindable、@ObservationIgnored),取代舊的 ObservableObject / @Published。
- 條件編譯:#if canImport(Charts)(若未加入 Swift Charts,提供文字 fallback)。
- 平台:iOS 17+(含 iOS 18 模擬器),Xcode 16。
專案架構(資料夾 & 檔案角色)
- Model/
- Records.swift:資料模型與邏輯(不含 UI)
- MetricKind:所有可視覺化/顯示的指標定義(單位 px)。
- MetricSnapshot:單次量測的原始數據(像素)。
- FaceRecord:一筆紀錄(date、subject、procedure、metrics)。
- RecordStore(@Observable):記錄陣列、歷史清單(subjects、procedures)、lastSubject、圖表序列產生 chartSeries(subject:procedure:metric:)。
- Engine/
- FaceMeasureEngine.swift:偵測核心(Vision + CI fallback + 相機管線)。輸出 measures(含座標點與量測線段)。