Skip to content

SimonCherryGZ/face-landmark-android

Folders and files

NameName
Last commit message
Last commit date

Latest commit

f5c797e · Jul 4, 2017

History

81 Commits
May 1, 2017
Jul 4, 2017
Jun 26, 2017
May 1, 2017
Jun 26, 2017
May 1, 2017
May 1, 2017
May 1, 2017
May 1, 2017
May 1, 2017
Jun 26, 2017
Jun 23, 2017
May 1, 2017
May 1, 2017
May 1, 2017
May 1, 2017

Repository files navigation

AR相机

根据人脸图片构建简单的3D人脸模型,然后在摄像头预览画面中展示。基于该人脸模型进行换脸或者添加装饰品。

基于

应用截图

GIF演示

image image

显示人脸3D模型

image image image

显示装饰品

image image image image

测试页面

image image

原理

  • 根据人脸图片构建3D人脸模型

    使用Dlib可以检测出人脸的68个关键点:

    image

    根据这68个点可以连线得到一个低面数的人脸模型:

    image

    我使用Blender 建立了该模型,这里称其为BaseModel,格式为obj。

  • 动态修改BaseModel

    查询obj文件结构可知,以“v”开头的行描述的是模型的顶点,以“vt”开头的行描述的是模型的贴图坐标点。

    那么只要找到这些点与人类关键点的对应关系,就可以简单地通过替换对应行的数据,来达到动态修改模型的目的。

不足

  • Dlib库依赖shape_predictor_68_face_landmarks.dat,其大小约100M,加载需要花费数秒。

  • Dlib库检测人脸的速度与图像的大小成反比,因此需要对摄像头的预览画面进行截取。

    截取得太小的话也检测不出人脸。在大小不影响检测的情况下,检测速度依然不理想。

  • 由于是从单张图片构建3D人脸,无法获取Z轴的数值,所以在估算三维姿态时用的是模拟数据,得出的数值可能不准确。

构建

  1. 按照dlib-android 描述的步骤来构建Dlib-Android库。
  2. dlib-android-app 中找到shape_predictor_68_face_landmarks.dat,将其复制到手机根目录中。

依赖库

Written with StackEdit.