# 人脸关键点检测

VisionKit 从基础库 2.25.0 版本 (安卓微信>=8.0.25,iOS微信>=8.0.24) 开始提供人脸关键点检测,作为与 marker 能力OSD 能力 平行的能力接口。

# 方法定义

人脸关键点检测有2种使用方法,一种是输入一张静态图片进行检测,另一种是通过摄像头实时检测。

# 1. 静态图片检测

通过 VKSession.detectFace 接口 输入一张图像,算法检测到图像中的人脸,然后通过 VKSession.on 接口 输出人脸位置坐标、106个关键点坐标以及人脸在三维坐标系中的旋转角度。

示例代码:

const session = wx.createVKSession({
  track: {
    face: { mode: 2 } // mode: 1 - 使用摄像头;2 - 手动传入图像
  },
  version: 'v1'
})
session.detectFace({
  frameBuffer, // 图片 ArrayBuffer 数据。人脸图像像素点数据,每四项表示一个像素点的 RGBA
  width, // 图像宽度
  height, // 图像高度
  scoreThreshold: 0.5, // 评分阈值
  sourceType: 1,
  modelMode: 1,
})
// 静态图片检测模式下,每调一次 detectFace 接口就会触发一次 updateAnchors 事件
session.on('updateAnchors', anchors => {
  console.log('anchors.points', anchors.points)
  console.log('anchors.origin', anchors.origin)
  console.log('anchors.size', anchors.size)
  console.log('anchors.angle', anchors.angle)
})

# 2. 通过摄像头实时检测

算法实时检测相机中的人脸,通过 VKSession.on 接口 实时输出人脸位置坐标、106个关键点坐标以及人脸在三维坐标系中的旋转角度。

示例代码:

const session = wx.createVKSession({
  track: {
    face: { mode: 1 } // mode: 1 - 使用摄像头;2 - 手动传入图像
  },
  version: 'v1'
})

// 摄像头实时检测模式下,监测到人脸时,updateAnchors 事件会连续触发 (每帧触发一次)
session.on('updateAnchors', anchors => {
  console.log('anchors.points', anchors.points)
  console.log('anchors.origin', anchors.origin)
  console.log('anchors.size', anchors.size)
  console.log('anchors.angle', anchors.angle)
})

// 当人脸从相机中离开时,会触发 removeAnchors 事件
session.on('removeAnchors', () => {
  console.log('removeAnchors')
})

# 应用场景示例

  1. 人脸检测。
  2. 人脸特效。
  3. 人脸姿态估计。

# 程序示例

  1. 实时摄像头人脸检测能力使用参考
  2. 静态图像人脸检测能力使用参考