private int OpenCVFaceDetector(string path) { // uses openCv Library OpenCvSharp.CascadeClassifier faceClassifier = new OpenCvSharp.CascadeClassifier(@"./haarcascade/haarcascade_frontalface_alt.xml"); OpenCvSharp.Mat result; Rect[] faces = new Rect[0]; using (var src = new OpenCvSharp.Mat(path, OpenCvSharp.ImreadModes.Color)) using (var gray = new OpenCvSharp.Mat()) { result = src.Clone(); Cv2.CvtColor(src, gray, ColorConversionCodes.BGR2GRAY); // Detect faces faces = faceClassifier.DetectMultiScale(gray, 1.08, 2, OpenCvSharp.HaarDetectionType.ScaleImage); List <System.Drawing.Rectangle> rfaces = new List <System.Drawing.Rectangle>(); foreach (Rect face in faces) { System.Drawing.Rectangle r = new System.Drawing.Rectangle(face.X, face.Y, face.Width, face.Height); this.GetLandmarks(gray, face, rfaces); rfaces.Add(r); } DrawOnImage?.Invoke(rfaces.ToArray(), new System.Drawing.Size(result.Width, result.Height)); } result.Dispose(); return(faces.Length); }
public void SwapImage(Byte[] frame) { // CurrentImage = ImageHelpers.BytesToBitmapImage(frame); Application.Current.Dispatcher.Invoke(new Action(() => { Bitmap temp = ImageHelpers.BytesToBitmap(frame); DrawOnImage?.Invoke(temp); BitmapSource bImg = ImageHelpers.ToBitmapImage(temp); temp.Dispose(); if (bImg != null) { CurrentImage = bImg; } }), DispatcherPriority.Render); }