/// <summary> /// Draws the image captured from the camera. /// </summary> /// <param name="image">The image captured.</param> private void DrawCapturedImage(Affdex.Frame image) { // Update the Image control from the UI thread var result = this.Dispatcher.BeginInvoke((Action)(() => { try { // Update the Image control from the UI thread //cameraDisplay.Source = rtb; cameraDisplay.Source = ConstructImage(image.getBGRByteArray(), image.getWidth(), image.getHeight()); // Allow N successive OnCapture callbacks before the FacePoint drawing canvas gets cleared. if (++DrawSkipCount > 4) { canvas.Faces = new Dictionary<int, Affdex.Face>(); canvas.InvalidateVisual(); DrawSkipCount = 0; } if (image != null) { image.Dispose(); } } catch (Exception ex) { String message = String.IsNullOrEmpty(ex.Message) ? "AffdexMe error encountered." : ex.Message; ShowExceptionAndShutDown(message); } })); }
private void DisplayImageToOffscreenCanvas(Affdex.Frame image) { // Update the Image control from the UI thread var result = this.Dispatcher.BeginInvoke((Action)(() => { try { mCurrentTimeStamp = image.getTimestamp(); // Update the Image control from the UI thread //imgAffdexFaceDisplay.Source = rtb; imgAffdexFaceDisplay.Source = ConstructImage(image.getBGRByteArray(), image.getWidth(), image.getHeight()); // Allow N successive OnCapture callbacks before the FacePoint drawing canvas gets cleared. if (++mFeaturePointsSkipCount > 4) { canvasFacePoints.Children.Clear(); mFeaturePointsSkipCount = 0; } if (image != null) { image.Dispose(); } } catch (Exception ex) { String message = String.IsNullOrEmpty(ex.Message) ? "AffdexMe error encountered." : ex.Message; ShowExceptionAndShutDown(message); } })); }
/// <summary> /// Draws the facial analysis captured by Affdex.Detector. /// </summary> /// <param name="image">The image analyzed.</param> /// <param name="faces">The faces found in the image analyzed.</param> private void DrawData(Affdex.Frame image, Dictionary<int, Affdex.Face> faces) { try { // Plot Face Points if (faces != null) { var result = this.Dispatcher.BeginInvoke((Action)(() => { if ((Detector != null) && (Detector.isRunning())) { canvas.Faces = faces; canvas.Width = cameraDisplay.ActualWidth; canvas.Height = cameraDisplay.ActualHeight; canvas.XScale = canvas.Width / image.getWidth(); canvas.YScale = canvas.Height / image.getHeight(); canvas.InvalidateVisual(); DrawSkipCount = 0; } })); } } catch(Exception ex) { String message = String.IsNullOrEmpty(ex.Message) ? "AffdexMe error encountered." : ex.Message; ShowExceptionAndShutDown(message); } }
private void DisplayFeaturePoints(Affdex.Frame affdexImage, Affdex.Face affdexFace) { try { // Plot Face Points if ((mShowFacePoints) && (affdexFace != null)) { var result = this.Dispatcher.BeginInvoke((Action)(() => { if ((mCameraDetector != null) && (mCameraDetector.isRunning())) { // Clear the previous points canvasFacePoints.Children.Clear(); canvasFacePoints.Width = imgAffdexFaceDisplay.ActualWidth; canvasFacePoints.Height = imgAffdexFaceDisplay.ActualHeight; mImageXScaleFactor = imgAffdexFaceDisplay.ActualWidth / affdexImage.getWidth(); mImageYScaleFactor = imgAffdexFaceDisplay.ActualHeight / affdexImage.getHeight(); SolidColorBrush pointBrush = new SolidColorBrush(Colors.Cornsilk); var featurePoints = affdexFace.FeaturePoints; foreach (var point in featurePoints) { Ellipse ellipse = new Ellipse() { Width = 4, Height = 4, Fill = pointBrush }; canvasFacePoints.Children.Add(ellipse); Canvas.SetLeft(ellipse, point.X * mImageXScaleFactor); Canvas.SetTop(ellipse, point.Y * mImageYScaleFactor); } // Draw Face Bounding Rectangle var xMax = featurePoints.Max(r => r.X); var xMin = featurePoints.Min(r => r.X); var yMax = featurePoints.Max(r => r.Y); var yMin = featurePoints.Min(r => r.Y); // Adjust the x/y min to accomodate all points xMin -= 2; yMin -= 2; // Increase the width/height to accomodate the entire max pixel position // EllipseWidth + N to make sure max points in the box double width = (xMax - xMin + 6) * mImageXScaleFactor; double height = (yMax - yMin + 6) * mImageYScaleFactor; SolidColorBrush boundingBrush = new SolidColorBrush(Colors.Bisque); Rectangle boundingBox = new Rectangle() { Width = width, Height = height, Stroke = boundingBrush, StrokeThickness = 1, }; canvasFacePoints.Children.Add(boundingBox); Canvas.SetLeft(boundingBox, xMin * mImageXScaleFactor); Canvas.SetTop(boundingBox, yMin * mImageYScaleFactor); mFeaturePointsSkipCount = 0; } })); } } catch(Exception ex) { String message = String.IsNullOrEmpty(ex.Message) ? "AffdexMe error encountered." : ex.Message; ShowExceptionAndShutDown(message); } }