internal FaceModel(FaceTracker faceTracker, IFTModel faceModelPtr) { if (faceTracker == null || faceModelPtr == null) { throw new InvalidOperationException("Cannot associate face model with null face tracker or native face model reference"); } this.faceTrackingModelPtr = faceModelPtr; this.faceTracker = faceTracker; }
internal FaceTrackFrame(IFTResult faceTrackResultPtr, FaceTracker parentTracker) { if (faceTrackResultPtr == null) { throw new InvalidOperationException("Cannot associate with a null native frame pointer"); } this.faceTrackingResultPtr = faceTrackResultPtr; this.parentFaceTracker = new WeakReference(parentTracker, false); }
/// <summary> /// Updates the face tracking information for this skeleton /// </summary> public void OnFrameReady(KinectSensor kinectSensor, ColorImageFormat colorImageFormat, byte[] colorImage, DepthImageFormat depthImageFormat, short[] depthImage, Skeleton skeletonOfInterest) { this.skeletonTrackingState = skeletonOfInterest.TrackingState; if (this.skeletonTrackingState != SkeletonTrackingState.Tracked) { // nothing to do with an untracked skeleton. return; } if (this.faceTracker == null) { try { this.faceTracker = new FaceTracker(kinectSensor); } catch (InvalidOperationException) { // During some shutdown scenarios the FaceTracker // is unable to be instantiated. Catch that exception // and don't track a face. Debug.WriteLine("AllFramesReady - creating a new FaceTracker threw an InvalidOperationException"); this.faceTracker = null; } } if (this.faceTracker != null) { FaceTrackFrame frame = this.faceTracker.Track( colorImageFormat, colorImage, depthImageFormat, depthImage, skeletonOfInterest); this.lastFaceTrackSucceeded = frame.TrackSuccessful; if (this.lastFaceTrackSucceeded) { if (faceTriangles == null) { // only need to get this once. It doesn't change. faceTriangles = frame.GetTriangles(); } this.facePoints = frame.GetProjected3DShape(); } } }
public void Dispose() { if (this.faceTracker != null) { this.faceTracker.Dispose(); this.faceTracker = null; } }