public void DetectFaces() { try { Update_DetectorImageScale_DividedBy_CameraViewImageScale(); var scale = DetectorImageScale_DividedBy_CameraViewImageScale; var detectorImageWidth = (int)(CameraViewImageWidth * scale); var detectorImageHeight = (int)(CameraViewImageHeight * scale); if (false) { Debug.WriteLine("DetectorImageWidth: " + detectorImageWidth); Debug.WriteLine("DetectorImageHeight: " + detectorImageHeight); } if (ApplicationCommonSettings.IsDeveloperRelease) { DetectionElapsedStopwatch.Reset(); DetectionElapsedStopwatch.Start(); } DlibArray2dUcharImage.ResizeImage(detectorImageWidth, detectorImageHeight); DetectedFaceRectsInCameraViewImage = DlibHogSvm.DetectFaces(DlibArray2dUcharImage, DlibHogSvmThreshold) .Select(e => new System.Drawing.Rectangle((int)(e.X / scale), (int)(e.Y / scale), (int)(e.Width / scale), (int)(e.Height / scale))) .ToList(); if (ApplicationCommonSettings.IsDeveloperRelease) { DetectionElapsedMilliseconds = (int)DetectionElapsedStopwatch.ElapsedMilliseconds; } } catch (Exception ex) { if (ApplicationCommonSettings.IsDebugging) { Debugger.Break(); } Console.WriteLine(ex.Message); } }
public void DetectFaceRunWorkerAsync(System.Drawing.Bitmap cameraViewImageBitmap) { if (IsDetecting) { return; } IsDetecting = true; // Access to Bitmap must be in the same thread. Debug.Assert(cameraViewImageBitmap != null); Debug.Assert(cameraViewImageBitmap.Size.IsEmpty == false); CameraViewImageWidth = cameraViewImageBitmap.Width; CameraViewImageHeight = cameraViewImageBitmap.Height; using (var clonedBmp = (System.Drawing.Bitmap)cameraViewImageBitmap.Clone()) { DlibArray2dUcharImage.SetBitmap(clonedBmp); } if (true) { Worker.RunWorkerAsync(); } else { DetectFaces(); DetectFaces_RunWorkerCompleted(); } }
protected virtual void Dispose(bool disposing) { if (disposed) { return; } if (disposing) { // dispose managed objects, and dispose objects that implement IDisposable if (Device != null) { // When InitializeOnceAtStartup is not called. Device.CameraViewImageSourceBitmapCapture.CameraViewImageSourceBitmapChanged -= Device_CameraViewImageSourceBitmapCapture_CameraViewImageSourceBitmapChanged; } DetectFaceIntervalMinimumStopwatch.Reset(); DetectFaceIntervalMinimumStopwatch.Start(); while (IsDetecting) { System.Threading.Thread.Sleep(50); if (DetectFaceIntervalMinimumStopwatch.ElapsedMilliseconds > 2000) { if (ApplicationCommonSettings.IsDebugging) { Debugger.Break(); } Console.WriteLine("FaceDetection BackgroundWorkder did not completed."); break; } } if (DlibArray2dUcharImage != null) { DlibArray2dUcharImage.Dispose(); DlibArray2dUcharImage = null; } if (DlibHogSvm != null) { DlibHogSvm.Dispose(); DlibHogSvm = null; } } // release any unmanaged objects and set the object references to null disposed = true; }