http://www.cnblogs.com/yangecnu/p/Learning-KinectSDK.html
代码基本上都是来源于上面这个博客
最基本的例子
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Kinect; namespace demo1 { class Program { static void Main(string[] args) { KinectSensor sensor = KinectSensor.KinectSensors[0]; sensor.DepthStream.Enable(); sensor.DepthFrameReady += new EventHandler<DepthImageFrameReadyEventArgs>(sensor_DepthFrameReady); sensor.Start(); while (Console.ReadKey().Key != ConsoleKey.Spacebar) { } } static void sensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e) { using (var depthFrame = e.OpenDepthImageFrame()) { if (depthFrame == null) return; short[] bits = new short[depthFrame.PixelDataLength]; depthFrame.CopyPixelDataTo(bits); foreach (var bit in bits) Console.Write(bit); } } } }
最近老师让做的是人脸表情追踪,就是获取人脸上的那些点之后然后写入bvh文件,驱动candide人脸模型。
之前的kinect基础并不是很好,很多时间都浪费在看代码上了,其实今天仔细的看了看,很多代码直接使用demo
里面的就好。
FaceTrackFrame frame = this.faceTracker.Track( colorImageFormat, colorImage, depthImageFormat, depthImage, skeletonOfInterest); this.lastFaceTrackSucceeded = frame.TrackSuccessful; if (this.lastFaceTrackSucceeded) { var p = frame.Get3DShape(); if (faceTriangles == null) { // only need to get this once. It doesn't change. faceTriangles = frame.GetTriangles(); //You can git other params here } this.facePoints = frame.GetProjected3DShape(); }
这一段中的frame这个有几个方法,Get3DShape, GetTriangles, 和GetProjectedShape。第一个函数返回一个3D顶点坐标数组,也就是变形后的个人脸部模型上的各个顶点的3D坐标。第二个函数返回模型上的三角形面片数组,其中每个三角形面片表示为其三个顶点的索引值。通过这两个函数,就可以将变形后的脸部模型输出为3D文件格式,然后使用一些3D模型查看器来观看模型。
kinect和bvh文件都是使用左手系
接下来就应该是学习三维空间转换了,加油~