在 iOS App 中實現類似「表情工廠」的實時人臉表情特效:眨眼、微笑、嘟嘴等,已知人臉關鍵點坐標,需對局部圖像進行變形處理。
VNDetectFaceLandmarksRequest) 獲取高精度關鍵點(無需額外模型文件,系統級優化)。// 以眨眼為例:控制上眼皮關鍵點向下移動,構建變形場
// 步驟:
// 1. 以關鍵點為頂點構建 Delaunay 三角剖分網格(覆盖人臉區域)
// 2. 定義目標關鍵點位置(如上眼皮點 Y 坐標增加,模擬閉合)
// 3. 對每個三角形,計算源頂點 -> 目標頂點的仿射變換矩陣
// 4. 遍歷目標三角形像素,反向映射到源圖像雙線性插值采樣
// 5. 合成所有三角形區域,得到變形後人臉
| 表情 | 關鍵控制點 | 變形方向/幅度 |
|---|---|---|
| 眨眼 | 上眼皮點 (37-41, 43-47) | Y 軸正向移動 (向下),幅度 0~1 參數化 |
| 微笑 | 嘴角點 (48, 54)、上唇點 (51, 52) | 嘴角向外上擴,上唇上揚 |
| 張嘴 | 上下唇中點 (51, 57, 62, 66) | 上唇上移、下唇下移,增大垂直距離 |
| 皺眉 | 眉頭點 (19, 24)、眉心點 (21, 22) | 眉頭下壓、眉心上推 |
opencv2.framework (CocoaPods: `pod 'OpenCV'`),注意體積 (~100MB) 與 Bitcode 設置。cv::UMat / Metal/GPU 加速矩陣運算與像素采樣。cv::Mat,預分配緩衝區池複用。將關鍵點作為 Uniform 傳入 Fragment/Compute Shader,在 GPU 上直接執行基于移動最小二乘 (MLS) 或薄板花樣 (TPS) 的稀疏圖像變形,極致性能、低延遲,適合高幀率濾鏡應用。
iOS 實現人臉表情特效的標準路徑是:關鍵點檢測 → 參數化表情建模 → 三角網格/MLS/TPS 稀疏變形 → GPU 加速渲染。OpenCV 提供成熟的 CPU 端實現,Metal Shader 則是高性能實時濾鏡的終極選擇。建議先用 Vision + CoreImage 快速驗證效果,再按性能需求遷移至 Metal。