SDK1.5中新增了人脸识别类库:Microsoft.Kinect.Toolkit.FaceTracking使得在Kinect中进行人脸识别变得简单,该类库的源代码也在Developer Toolkit中。在Developer Toolkit中也自带人脸识别的例子,您也可以打开运行或者查看源代码。

Kinect 开发 —— 面部追踪-LMLPHP


开发前准备


创建WPF项目

要使用面部追踪,在开启KinectSensor之后需要启用ColorImageStream,  DepthImageStream 和SkeletonStream这三个Stream,部分代码如下:

前面的代码应该都好懂,值得一提的是最后一句,初始化FaceTracker 对象。在初始化景深数据流时,我们使用最低分辨率的景深影像数据流,这样fps会更高,使得结果更加流畅. 最后,我们注册了AllFramesReady事件。


获取面部数据

前面的都是数据准备阶段,一旦数据都获取了之后,我们使用FaceTracker对象来对这些数据进行识别,提取面部信息。


绘制面部

完成之后,一个简单的人脸就绘制完成了,如下:

Kinect 开发 —— 面部追踪-LMLPHP


将数据和表情绑定

//如果识别出来,进行进一步处理
if (faceFrame.TrackSuccessful)
{
// 获取动画单位系数 Animation Units coeffs.
var AUCoeff = faceFrame.GetAnimationUnitCoefficients(); var jawLowerer = AUCoeff[AnimationUnit.JawLower];
jawLowerer = jawLowerer < ? : jawLowerer;
MouthScaleTransform.ScaleY = jawLowerer * + 0.1;
MouthScaleTransform.ScaleX = (AUCoeff[AnimationUnit.LipStretcher] + ); LeftBrow.Y = RightBrow.Y = (AUCoeff[AnimationUnit.BrowLower]) * ; RightBrowRotate.Angle = (AUCoeff[AnimationUnit.BrowRaiser] * );
LeftBrowRotate.Angle = -RightBrowRotate.Angle; CanvasRotate.Angle = faceFrame.Rotation.Z;
}

上面的动画参数的取值范围都是在-1和1之间。到这里一个简单的面部追踪小程序就完成了,您可以对着Kinect做一些表情试一试变化。下面是我做的一些截图:

Kinect 开发 —— 面部追踪-LMLPHP Kinect 开发 —— 面部追踪-LMLPHP Kinect 开发 —— 面部追踪-LMLPHP

05-11 22:06