Phát hiện khuôn mặt ngước lên – cúi xuống bằng mediapipe

Bài này tương tự bài Phát hiện cử động khuôn mặt bằng Facemesh. Có đôi chút khác ở công thức tính nên tách riêng ra 1 bài để giải thích.

Bước 1: tìm landmark

Tìm 468 điểm trên khuôn mặt, các điểm này có tọa độ xyz trong không gian 3 chiều

Bước 2: tìm giá trị z1, z2 và height để tính kết quả

Ta cần tìm z1 và z2 theo công thức hình bên dưới do khuôn mặt có thể xa – gần camera. z1 và z2 là khoảng cách near-far với camera, được tính bằng hàm CalcNearFar() ở source code cuối bài.

Còn h là khoảng cách giữa 2 điểm nên tính bằng khoảng cách Euclid bằng hàm CalcDistance().

Tính toán giá trị của z1 và z2

Khuôn mặt phải ngước lên – cúi xuống quá 1 ngưỡng thì mới tính, hiện tại là 0.4. Tùy bài toán/yêu cầu mà điều chỉnh cho phù hợp.

Hình ảnh dùng để test:

Full source code