Skip to content

人脸关键点

概述

GPUPixel使用Mars Face进行Landmark检测,是一个基于MNN(Mobile Neural Network)框架的高性能人脸检测和面部特征点检测解决方案。它提供精确的人脸检测功能,可返回106个基础面部特征点,并扩展到111个特征点以实现更详细的面部特征分析。

功能特点

  • 基于MNN框架的高性能人脸检测
  • 106个基础面部特征点检测
  • 扩展至111个面部特征点
  • 跨平台支持
  • 简单易用的API接口

基础面部特征点

SDK检测的106个基础面部特征点覆盖了以下关键面部特征:

  • 眼睛轮廓
  • 眉毛
  • 鼻子
  • 嘴部轮廓
  • 面部轮廓

扩展特征点

基于106个基础特征点,SDK通过特定面部特征点计算得出5个额外的特征点(107-111):

  • 点106:特征点102和98的中点
  • 点107:特征点35和65的中点
  • 点108:特征点70和40的中点
  • 点109:特征点5和80的中点
  • 点110:特征点81和27的中点

这些额外的特征点为高级应用提供了更详细的面部特征信息。

点序

集成指南

初始化

cpp
#include "face_detector.h"

// 创建人脸检测器实例
FaceDetector detector;

// 检测器将自动使用资源路径进行初始化

人脸检测和特征点提取

cpp
// 注册回调函数以接收检测结果
detector.RegCallback([](std::vector<float> landmarks) {
    // 处理特征点数据
    // landmarks包含所有111个点的归一化坐标(x,y)
});

// 对图像数据进行检测
detector.Detect(
    imageData,      // 图像数据指针
    width,          // 图像宽度
    height,         // 图像高度
    format,         // 图像格式
    frameType       // 帧类型
);

支持的图像格式

SDK支持多种输入格式,包括:

  • RGBA8888
  • YUVI420

性能考虑

  • SDK使用MNN框架针对移动端和嵌入式设备进行了优化
  • 特征点坐标已归一化到[0,1]范围
  • 通过回调机制提供检测结果,实现高效集成

API参考

FaceDetector类

cpp
class FaceDetector {
    public:
        FaceDetector();
        ~FaceDetector();
        
        // 对图像数据进行人脸检测
        int Detect(const uint8_t* data,
                   int width,
                   int height,
                   GPUPIXEL_MODE_FMT fmt,
                   GPUPIXEL_FRAME_TYPE type);
        
        // 注册检测结果回调函数
        int RegCallback(FaceDetectorCallback callback);
};

回调函数

cpp
typedef std::function<void(std::vector<float> landmarks)> FaceDetectorCallback;

检测结果

回调中的landmarks向量包含所有111个点的归一化坐标(x,y),按顺序排列:

  • 索引0-211:基础106个特征点(x,y对)
  • 索引212-221:扩展的5个特征点(x,y对)

基于 Apache-2.0 License 许可发布