在上一篇中,介绍了利用Face Tracking SDK来跟踪人脸的流程,并介绍了所涉及的四个类,其中IFTResult和IFTModel是用来查看跟踪结果的两个类。前者记录了脸部100个关键点的2D坐标,而后者则是用于将跟踪到的脸部由2D图像转换为摄像机空间中的3D网格。本篇主要就讨论一下IFTModel这个类。
IFTModel使用的是Candide3模型的一个子集,包括11个Shape Units和六个Animation Units。其中SU描述了脸部某些区域的形状,比如嘴、鼻子、眼睛的中点位置;而AU可以理解为描述了脸部肌肉的运动,换句话说,通过使用不同的AU参数,可以构造出不同的脸部表情。当所有的AU均为0时,就是所谓的neutral face完全无表情的脸部;如果同时所有的SU也均为0,则得到的就是标准的脸部模型。
在MSDN中,详细描述了各个SU和AU所对应的脸部特征与脸部运动,这里不再赘述。
之前提到过IFTModel需要通过IFTFaceTracker::GetFaceModel创建,然后就可以在跟踪成功后读取模型的参数来查看模型。这里需要注意的一点,IFTModel本身并不保存真正的模型,而是通过SU和AU对标准的脸部模型进行变形,从而得到个人的脸部模型。所以在IFTModel中,提供的主要是Get类函数