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;
 }