
昨天我們已經認識:
「 Google MediaPipe Face Landmarker 究竟師出何門?有哪些師兄弟們?」
今天我們進一步來觀察這位俠客 Face Landmarker 的絕技三式,
也就是模型輸出的三種結果:「Face Landmarks 、Blendshapes、Facial Transformation Matrix」。
從官方下載的 face_landmarker .task 其實是個 zip ,
內部構成是三個 tflite 模型+一個幾何設定檔:face_detector.tflite、face_landmarks_detector.tflite、face_blendshapes.tflite、geometry_pipeline_metadata_landmarks.binarypb。
| 名稱 | 用途 | 固定輸出 | 健口動一動用在哪 |
|---|---|---|---|
Face Landmarks 臉部特徵點 |
臉上 478 個點在哪裡? | true | 嘴巴開合比例、閉唇偵測、頭部姿勢粗估、畫面標記 |
Blendshapes 表情係數 |
現在做什麼表情、多用力? | false | 嘟嘴、張嘴、「衣」嘴型評分 |
Facial Transformation Matrix 臉部變換矩陣 |
頭在 3D 空間的姿勢? | false | 目前未啟用 |
第一式是基本功:臉上 478 個點的座標,後面兩式都建立在它上面。
(一)模型輸出:
| 屬性 | Swift 型別 | 說明 |
|---|---|---|
| faceLandmarks | [[NormalizedLandmark]] | 外層每張臉,內層 478 個點 |
| x | Float | 除以影像寬,範圍 0~1 |
| y | Float | 除以影像高,範圍 0~1 |
| z | Float | 深度,越小越靠近鏡頭 |
| visibility | NSNumber? | 是否可見(Optional) |
| presence | NSNumber? | 是否在畫面內(Optional) |
官方文件對座標的定義是:x、y 分別以影像寬、高正規化;z 表示相對深度,數值越小越靠近鏡頭,其大小尺度與 x 大致相同。
(二)特別注意:
要取特定部位,得用索引到陣列裡取值,例如 landmarks[61]。索引可以從官方連線定義 FaceLandmarker.lipsConnections() 或全尺寸編號圖查得。第二式是察顏觀色:不問點在哪,直接告訴你臉上每塊肌肉動作的「力道」。
(一)模型輸出:
| 屬性 | 欄位 | 說明 |
|---|---|---|
| faceBlendshapes | [Classifications] | 每張臉一個,沒開啟時為空陣列 |
| Classifications | headIndex: Int | 分類頭編號 |
| headName: String? | 分類頭名稱 | |
| categories: [ResultCategory] | 真正的資料 | |
| ResultCategory | index: Int | 類別編號 |
| score: Float | 係數,0~1 | |
| categoryName: String? | 名稱,例如 jawOpen | |
| displayName: String? | 顯示名稱 |
Classifications 代表一個分類頭的結果,實際的預測類別放在 categories 陣列裡。ResultCategory 包含標籤、顯示名稱、分數,以及標籤在標籤檔中的索引。
(二)特別注意:
cheekPuff 幾乎沒反應,這是我有踩過的坑。在做prototype時,想要拿雙頰鼓起的值,但幾乎拿不到。也有人回報 issue 給官方。第三式是身法:知道這張臉在 3D 空間中怎麼轉、離鏡頭多遠。
(一)模型輸出:
| 屬性 | 欄位 | 說明 |
|---|---|---|
| facialTransformationMatrixes | [TransformMatrix] | 每張臉一個 4×4 矩陣,沒開啟時為空陣列 |
| TransformMatrix | rows、columns | 列數、行數 |
| data: UnsafeMutablePointer | 原始數值 | |
| value(atRow:column:) | 取指定位置的值 |
這組矩陣是 4×4,未啟用時預設為空陣列。TransformMatrix 提供 rows、columns、data,以及依列與行取值的方法。
(二)特別注意:
距離只是近似值,只能當相對參考
今天我們拆解了 Face Landmarker 的絕技三式:
第一式・基本功|Face Landmarks 臉部特徵點:臉上 478 個點的正規化座標,是後兩式的基礎。取特定部位要靠索引;影像不是正方形時,計算距離前要先校正長寬比例。第二式・察顏觀色|Blendshapes 表情係數:52 個介於 0~1 的係數,直接反映臉部各部位的動作力道。要留意 cheekPuff 幾乎沒有反應,以及左右是以使用者本人為準。第三式・身法|Facial Transformation Matrix 臉部變換矩陣:一個 4×4 矩陣,描述頭部在 3D 空間中的旋轉與位置。預設不輸出,距離也只是近似值。希望這篇能讓大家對 Face Landmarker 多一些認識!
今天認識了這位 Face Landmarker 俠客的本事,明天就來看如何正式招攬他入府:
感謝有緣看到這裡的你~
希望佛菩薩也祝福你:🌟平安健康 開心順遂🌟
南無觀世音菩薩🍀 南無地藏菩薩🏠 南無阿彌陀佛☀️