public IEnumerable<WeightedRect> DetectFaces( ColorImageFormat colorImageFormat, byte[] colorImage, DepthImageFormat depthImageFormat, short[] depthImage, Rect roi) { if (this.operationMode != OperationMode.Kinect) { throw new InvalidOperationException( "Cannot use Track with Kinect input types when face tracker is initialized for tracking videos/images"); } if (colorImage == null) { throw new ArgumentNullException("colorImage"); } if (depthImage == null) { throw new ArgumentNullException("depthImage"); } if (colorImageFormat != this.initializationColorImageFormat) { throw new InvalidOperationException("Color image frame format different from initialization"); } if (depthImageFormat != this.initializationDepthImageFormat) { throw new InvalidOperationException("Depth image frame format different from initialization"); } if (colorImage.Length != this.videoCameraConfig.FrameBufferLength) { throw new ArgumentOutOfRangeException("colorImage", "Color image data size is needs to match initialization configuration."); } if (depthImage.Length != this.depthCameraConfig.FrameBufferLength) { throw new ArgumentOutOfRangeException("depthImage", "Depth image data size is needs to match initialization configuration."); } this.copyStopwatch.Start(); this.colorFaceTrackingImage.CopyFrom(colorImage); this.depthFaceTrackingImage.CopyFrom(depthImage); this.copyStopwatch.Stop(); var sensorData = new SensorData(this.colorFaceTrackingImage, this.depthFaceTrackingImage, DefaultZoomFactor, Point.Empty); FaceTrackingSensorData faceTrackSensorData = sensorData.FaceTrackingSensorData; int hr; uint count = 4; WeightedRect[] rects = new WeightedRect[count]; GCHandle handle = GCHandle.Alloc(rects, GCHandleType.Pinned); try { IntPtr rectsPtr = handle.AddrOfPinnedObject(); hr = this.faceTrackerInteropPtr.DetectFaces(ref faceTrackSensorData, ref roi, rectsPtr, ref count); } finally { if (handle.IsAllocated) { handle.Free(); } } this.trackSucceeded = hr == (int)ErrorCode.Success; return rects.Take((int)count); }
public IEnumerable <WeightedRect> DetectFaces(ColorImageFormat colorImageFormat, byte[] colorImage, DepthImageFormat depthImageFormat, short[] depthImage, Rect roi) { if (this.operationMode != OperationMode.Kinect) { throw new InvalidOperationException( "Cannot use Track with Kinect input types when face tracker is initialized for tracking videos/images"); } if (colorImage == null) { throw new ArgumentNullException("colorImage"); } if (depthImage == null) { throw new ArgumentNullException("depthImage"); } if (colorImageFormat != this.initializationColorImageFormat) { throw new InvalidOperationException("Color image frame format different from initialization"); } if (depthImageFormat != this.initializationDepthImageFormat) { throw new InvalidOperationException("Depth image frame format different from initialization"); } if (colorImage.Length != this.videoCameraConfig.FrameBufferLength) { throw new ArgumentOutOfRangeException("colorImage", "Color image data size is needs to match initialization configuration."); } if (depthImage.Length != this.depthCameraConfig.FrameBufferLength) { throw new ArgumentOutOfRangeException("depthImage", "Depth image data size is needs to match initialization configuration."); } this.copyStopwatch.Start(); this.colorFaceTrackingImage.CopyFrom(colorImage); this.depthFaceTrackingImage.CopyFrom(depthImage); this.copyStopwatch.Stop(); var sensorData = new SensorData(this.colorFaceTrackingImage, this.depthFaceTrackingImage, DefaultZoomFactor, Point.Empty); FaceTrackingSensorData faceTrackSensorData = sensorData.FaceTrackingSensorData; int hr; uint count = 4; WeightedRect[] rects = new WeightedRect[count]; GCHandle handle = GCHandle.Alloc(rects, GCHandleType.Pinned); try { IntPtr rectsPtr = handle.AddrOfPinnedObject(); hr = this.faceTrackerInteropPtr.DetectFaces(ref faceTrackSensorData, ref roi, rectsPtr, ref count); } finally { if (handle.IsAllocated) { handle.Free(); } } this.trackSucceeded = hr == (int)ErrorCode.Success; return(rects.Take((int)count)); }