MotionPortrait 公司推出的PhotoSpeak 能让静态人像动起来,并可以跟使用者有互动,所用的 3D 互动效果是啥技术

目测网上搜索到的demo视频,我猜测PhotoSpeak应该是先用人脸特征识别技术来标记人脸上的特征点,然后,当你改变视点或让人脸说话时,先要移动这些特征点,然后使用二维图像变形方法,由这些移动过的特征点驱动整张照片变形。下面,我以“最容易实现”和“最容易理解”的原则,来解释一下关键的技术:1. 人脸特征识别。使用人脸特征识别技术可以自动对人脸上的特征点 (比如眼睛,鼻子,嘴巴等脸部器官的轮廓上的关键点)进行标记,让程序知道你输入的照片中,眼睛、鼻子、嘴巴等等特征都在什么地方,形状是什么样的。目前较为成熟的一个方法是基于Active Shape Model(ASM)和Active Appearance Model(AAM)这两个模型的。ASM使用一个特征点集的统计模型来描述人脸结构,AAM使用图像的统计模型来描述人脸上的纹理,两者一起可以较为充分地利用一张人脸照片中的所有信息。建模时需要提供大量标记过特征点的人脸照片作为训练样例。建模完成以后,通俗地说,就是可以用一些参数来描述并重建人脸了。然后,再提供一张新的照片时,可以通过改变模型的人脸参数,使得重建出的人脸和新照片上的人脸最相似(通常我们会用一些最优化方法来实现高维参数优化,简单的方法有牛顿法,最速梯度下降法),那么就可以知道新照片上的人脸的参数了。最终,根据这些参数和模型的定义,我们可以计算出新照片上的所有人脸特征点的坐标。如果你想用ASM和AAM来干些事情,你可以从找到一些开源资源,或者直接下载STASM,其中已经包含了训练好的人脸特征识别模型,可以直接用。2. 根据视点变化移动相应的脸部特征点。用一些特征点的移动来描述嘴唇的运动没有什么太大难度,所以这里只解释一下如何根据视点变化来移动相应的特征点。要实现这一点,需要恢复出照片上的特征点对应的三维坐标,只要有了三维坐标,当视点改变时再重新计算他们在新视点下的投影出的二维坐标将十分容易。恢复三维坐标的一个最简单的方法是预先建立一个人脸的三维模型,给所有脸部特征点赋上初始的三维坐标,称这些三维坐标组成了一个三维人脸模板。当给定一张新人脸照片(假设为正面的照片),并已经识别出了照片上的所有人脸特征点之后,我们按照尽量不移动的原则来移动三维人脸模板上的特征点,使其在正面视点下的二维投影和新照片上的特征点集最匹配。匹配完之后的模板上的三维特征点的坐标就是新照片上的特征点对应的三维坐标。3. 图像变形。当视点变化或说话时,照片上的人脸特征点的位置将会发生移动,如何根据图像上少数的几个特征点的移动,来对整幅图像进行变形就是图像变形技术要解决的问题。一个图像中通常有成千上万的像素,我们可以将一个图像看作是由许多有颜色的像素点组成,图像变形就是对这些像素点进行移动。一个在许多场合都合理的假设是,离特征点越近的像素点的移动应该和特征点的移动越相似。所以,如果假设只有一个特征点,我们用a0来表示一个特征点的移动,d0表示一个像素点离这个特征点的距离,b0表示这个像素点的移动,则b0可以根据b0=a0/d0来计算(根据实际情况,你可以对d0进行平方,或者立方或者...以调整变形的效果,事实上任何能够表示b0随d0的增大而减小的方程都是可以的)。当有很多个特征点时,我们可以用上面的方法分别计算出b0,b1,b2...,然后把它们加起来作为当前考虑的像素点的移动。想深入了解图像变形,可以参考。当对所有像素点进行移动之后,要生成最终的图像还差一步像素颜色插值。为更简单地说明像素插值的过程,我们把一个图像想象成由许多方形的盒子组成,每个盒子里有一个有颜色的球,每个盒子对应一个像素,每个盒子的颜色始终保持和里面的球一致,若盒子里有多个球,则将其平均颜色作为盒子的颜色。一开始,每个盒子里都有一个球,但对图像进行变形之后,所有的球都发生了移动,有些盒子里没有了球,而有些盒子里则有多个球,但绘制整个图像需要知道所有盒子的颜色。对于有多个球的盒子,我们在生成图像时,只要对盒子里的球的颜色求均值即可,对于没有球的盒子,我们需要根据附近有球的盒子推断其颜色。推断的方法是,找到离它最近的三个有球的盒子,并利用双线性插值方法得到其对应的颜色。参考: ASM和AAM模型的定义, http://personalpages.manchester.ac.uk/staff/timothy.f.cootes/Models/app_models.pdf 牛顿法,http://zh.wikipedia.org/wiki/%E7%89%9B%E9%A1%BF%E6%B3%95 最速梯度下降法,http://zh.wikipedia.org/wiki/%E6%A2%AF%E5%BA%A6%E4%B8%8B%E9%99%8D ASM的wiki词条(推荐页面上的reference,可以找到开源库),http://en.wikipedia.org/wiki/Active_shape_model 双线性插值,http://zh.wikipedia.org/wiki/%E5%8F%8C%E7%BA%BF%E6%80%A7%E6%8F%92%E5%80%BC Moving Least Image Deformation,http://faculty.cs.tamu.edu/schaefer/research/mls.pdf As-rigid-as-possible Shape Manipulation, http://www-ui.http://is.s.u-tokyo.ac.jp/~takeo/research/rigid/index.html Active Shape Models with Stasm,http://www.milbo.users.sonic.net/stasm/
■网友


推荐阅读