根据人脸图片构建简单的3D人脸模型,然后在摄像头预览画面中展示。基于该人脸模型进行换脸或者添加装饰品。
- dlib-android-app
- dlib-android 提供Android平台可用的Dlib库。
- More Than Technical这篇文章 的头部姿态估算算法。
- LearnOpenCV.com 的换脸算法。
- Rajawali OpenGL ES引擎。
-
根据人脸图片构建3D人脸模型
使用Dlib可以检测出人脸的68个关键点:
根据这68个点可以连线得到一个低面数的人脸模型:
我使用Blender 建立了该模型,这里称其为BaseModel,格式为obj。
-
动态修改BaseModel
查询obj文件结构可知,以“v”开头的行描述的是模型的顶点,以“vt”开头的行描述的是模型的贴图坐标点。
那么只要找到这些点与人类关键点的对应关系,就可以简单地通过替换对应行的数据,来达到动态修改模型的目的。
-
Dlib库依赖shape_predictor_68_face_landmarks.dat,其大小约100M,加载需要花费数秒。
-
Dlib库检测人脸的速度与图像的大小成反比,因此需要对摄像头的预览画面进行截取。
截取得太小的话也检测不出人脸。在大小不影响检测的情况下,检测速度依然不理想。
-
由于是从单张图片构建3D人脸,无法获取Z轴的数值,所以在估算三维姿态时用的是模拟数据,得出的数值可能不准确。
- 按照dlib-android 描述的步骤来构建Dlib-Android库。
- 从dlib-android-app 中找到shape_predictor_68_face_landmarks.dat,将其复制到手机根目录中。
Written with StackEdit.