void InitializeFaceDetection(int cameraindex) { Thread thread = new Thread(() => { try { ReleasePreviousDetectors(); WebcamManager.SetPropertyValueManual(cameraindex, WebcamManager.CAMERA_PROPERTY.CAMERA_FOCUS, camerafocus); WebcamManager.SetPropertyValueManual(cameraindex, WebcamManager.CAMERA_PROPERTY.CAMERA_ZOOM, camerazoom); faceDetector = new WebCamFaceDetector(); faceDetector.ToggleVisualization(); faceDetector.RegisterForImages(WebcamManager.GetCamera(cameraindex)); faceDetector.SelectedCameraIndex = cameraindex; faceDetector.RoiX = roiX; faceDetector.RoiY = roiY; faceDetector.RoiWidth = roiWidth; faceDetector.RoiHeight = roiHeight; faceDetector.FaceDetected += WebCamFaceDetected; } catch (Exception err) { MessageBox.Show(err.ToString()); } }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); }
public void OnSaved(WpfConfiguration configurationControl) { WebCamFaceDetectionConfig config = configurationControl as WebCamFaceDetectionConfig; config.Cleanup(); captureWidth = 640; captureHeight = 480; selectedCameraPath = config.SelectedCameraPath; selectedCameraName = config.SelectedCameraName; selectedCameraIndex = config.SelectedCameraIndex; roiX = config.RoiX; roiY = config.RoiY; roiWidth = config.RoiWidth; roiHeight = config.RoiHeight; camerafocus = config.CameraFocus; camerazoom = config.CameraZoom; if (WebcamManager.IsServiceRestartRequired()) { WebcamManager.RestartService(); } selectedCameraIndex = LookforSelectedCamera(true); if (selectedCameraIndex != -1 && selectedCameraConnected) { if (!callbacksRegistered) { WebcamManager.RegisterWebcamConnectionEvent(OnCameraConnected); WebcamManager.RegisterWebcamRemovalEvent(OnCameraDisconnected); callbacksRegistered = true; } InitializeFaceDetection(selectedCameraIndex); } }
public void OnSaved(WpfConfiguration configurationControl) { WebcamSnapshotConfig config = configurationControl as WebcamSnapshotConfig; config.Cleanup(); folderLocation = config.SaveLocation; fileNamePrefix = config.FilenamePrefix; captureWidth = 640; captureHeight = 480; selectedCameraPath = config.SelectedCameraPath; selectedCameraName = config.SelectedCameraName; showPreview = config.ShowPreview; playShutterSound = config.PlayShutterSound; if (WebcamManager.IsServiceRestartRequired()) { WebcamManager.RestartService(); } //look for the selected camera selectedCameraIndex = LookforSelectedCamera(true); if (selectedCameraIndex != -1 && selectedCameraConnected) { if (!callbacksRegistered) { WebcamManager.RegisterWebcamConnectionEvent(OnCameraConnected); WebcamManager.RegisterWebcamRemovalEvent(OnCameraDisconnected); callbacksRegistered = true; } InitializeSnapshot(selectedCameraIndex); } }
private void Button_Clicked(object sender, RoutedEventArgs e) { if (!_selectedState) { SelectedCameraIndex = _selectedCameraIndex = camera_selector.GetSelectedCameraIndex(); SelectedCameraName = WebcamManager.GetCamera(SelectedCameraIndex).WebCamName; SelectedCameraPath = WebcamManager.GetCamera(SelectedCameraIndex).WebCamPath; if (SelectedCameraIndex > -1 && SelectedCameraIndex < WebcamManager.NumberConnectedCameras()) { Image_Viewer.SetImageSource(WebcamManager.GetCamera(_selectedCameraIndex)); } SelectorPanel.Visibility = Visibility.Collapsed; ROIPanel.Visibility = Visibility.Visible; ButtonState.Content = "<< Select another camera"; } else { ROIPanel.Visibility = Visibility.Collapsed; if (_selectedCameraIndex > -1) { WebCam camera = WebcamManager.GetCamera(_selectedCameraIndex); Image_Viewer.RemoveImageSource(camera); Image_Viewer.Clear(); Image_Viewer_Orig.RemoveImageSource(camera); } SelectorPanel.Visibility = Visibility.Visible; ButtonState.Content = "Configure person detector >>"; } _selectedState = !_selectedState; }
void InitializeMotionDetection(int cameraindex) { Thread thread = new Thread(() => { try { ReleasePreviousDetectors(); WebcamManager.SetPropertyValueManual(cameraindex, WebcamManager.CAMERA_PROPERTY.CAMERA_FOCUS, camerafocus); WebcamManager.SetPropertyValueManual(cameraindex, WebcamManager.CAMERA_PROPERTY.CAMERA_ZOOM, camerazoom); motionDetector = new WebCamMotionDetector(); motionDetector.ToggleVisualization(); motionDetector.RegisterForImages(WebcamManager.GetCamera(cameraindex)); motionDetector.SelectedCameraIndex = cameraindex; motionDetector.MotionAreaPercentageSensitivity = percentageSensitivity; motionDetector.TimeSensitivity = timeThreshold; motionDetector.RoiX = roiX; motionDetector.RoiY = roiY; motionDetector.RoiWidth = roiWidth; motionDetector.RoiHeight = roiHeight; motionDetector.MotionDiffSensitivity = differenceThreshold; motionDetector.MotionDetected += WebCamMotionDetected; } catch (Exception err) { MessageBox.Show(err.ToString()); } }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); }
private void Time_ValueChanged(object sender, RoutedPropertyChangedEventArgs <double> e) { CurrentTime = e.NewValue; if (_selectedCameraIndex > -1 && _selectedCameraIndex < WebcamManager.NumberConnectedCameras()) { Image_Viewer.TimeSensitivity = (float)CurrentTime; } }
private void Difference_ValueChanged(object sender, RoutedPropertyChangedEventArgs <double> e) { CurrentDifference = e.NewValue; if (_selectedCameraIndex > -1 && _selectedCameraIndex < WebcamManager.NumberConnectedCameras()) { Image_Viewer.MotionDiffSensitivity = (int)CurrentDifference; } }
public void Zoom_ValueChanged(object sender, RoutedPropertyChangedEventArgs <double> e) { long value = Convert.ToInt64(e.NewValue); CurrentZoom = Convert.ToInt32(value); if (_selectedCameraIndex > -1 && _selectedCameraIndex < WebcamManager.NumberConnectedCameras()) { WebcamManager.SetPropertyValueManual(_selectedCameraIndex, WebcamManager.CAMERA_PROPERTY.CAMERA_ZOOM, value); } }
public void CleanUp() { if (_selectedCameraIndex > -1) { WebCam camera = WebcamManager.GetCamera(_selectedCameraIndex); Image_Viewer.RemoveImageSource(camera); Image_Viewer.Clear(); Image_Viewer_Orig.RemoveImageSource(camera); } }
public void SetImageSource(int index) { if (index > -1 && _selectedCameraIndex < WebcamManager.NumberConnectedCameras()) { _selectedCameraIndex = index; WebCam camera = WebcamManager.GetCamera(index); long mn = 0, mx = 0, step = 0; if (WebcamManager.GetMinPropertyValue(index, WebcamManager.CAMERA_PROPERTY.CAMERA_FOCUS, ref mn) && WebcamManager.GetMaxPropertyValue(index, WebcamManager.CAMERA_PROPERTY.CAMERA_FOCUS, ref mx)) { FocusMinimum = Convert.ToDouble(mn); FocusMaximum = Convert.ToDouble(mx); if (FocusMinimum != FocusMaximum) { Focus_Slider.IsEnabled = true; } else { FocusMinimum = 0; FocusMaximum = 1; Focus_Slider.IsEnabled = false; } } else { FocusMinimum = 0; FocusMaximum = 1; Focus_Slider.IsEnabled = false; } if (WebcamManager.GetMinPropertyValue(index, WebcamManager.CAMERA_PROPERTY.CAMERA_ZOOM, ref mn) && WebcamManager.GetMaxPropertyValue(index, WebcamManager.CAMERA_PROPERTY.CAMERA_ZOOM, ref mx)) { ZoomMinimum = Convert.ToDouble(mn); ZoomMaximum = Convert.ToDouble(mx); if (ZoomMinimum != ZoomMaximum) { Zoom_Slider.IsEnabled = true; } else { ZoomMinimum = 0; ZoomMaximum = 1; Zoom_Slider.IsEnabled = false; } } else { ZoomMinimum = 0; ZoomMaximum = 1; Zoom_Slider.IsEnabled = false; } Image_Viewer.SetImageSource(camera); Image_Viewer_Orig.SetImageSource(camera); } }
protected int LookforSelectedCamera(bool force = false) { bool selectedCameraFound = false; selectedCameraConnected = false; if (!IsEnabled && !force) { return(-1); } int numberConnectedCameras = WebcamManager.NumberConnectedCameras(); if (numberConnectedCameras == 0) { selectedCameraConnected = false; Logger.WriteLine("No camera available"); ErrorLog.AddError(ErrorType.Failure, "Motion detection is disabled because no camera was detected"); return(-1); } int index = -1; if (selectedCameraPath == default(string)) { ErrorLog.AddError(ErrorType.Message, "No webcam configuration. Defaulting to first available webcam."); return(-1); } else { for (int i = 0; i < numberConnectedCameras; i++) { if (WebcamManager.GetCamera(i).WebCamPath == selectedCameraPath) { if (WebcamManager.GetCamera(i).IsActive) { index = i; selectedCameraConnected = true; selectedCameraFound = true; break; } else if (WebcamManager.StartCamera(i, captureWidth, captureHeight)) { index = i; selectedCameraConnected = true; selectedCameraFound = true; break; } } } if (!selectedCameraFound && numberConnectedCameras > 0) { ErrorLog.AddError(ErrorType.Failure, "The originally selected camera is not available."); } return(index); } }
public string GetSelectedCameraName() { if (selectedCameraIndex != -1) { return(WebcamManager.GetCamera(cameraList[selectedCameraIndex]).WebCamName); } else { return(null); } }
public void OnCameraDisconnected(object sender, USBEvent e) { string[] changedParts = WebcamManager.GetDeviceInfoFromPath(e.DevicePath); string[] selectedParts = WebcamManager.GetDeviceInfoFromPath(selectedCameraPath); if (string.Compare(changedParts[1], selectedParts[1], true) == 0 && string.Compare(changedParts[2], selectedParts[2], true) == 0) { selectedCameraConnected = false; ReleasePreviousBuffers(); WebcamManager.ReleaseInactiveCameras(); Logger.WriteLine("Selected camera disconnected"); ErrorLog.AddError(ErrorType.Warning, "Selected camera has been disconnected"); } }
// Start is called before the first frame update void Start() { m_WebcamManager = GetComponent <WebcamManager>(); m_NativeCvPlugin = GetComponent <CvPlugin>(); InitializeCamera(); m_CaptureButton.onClick.AddListener(() => { CapturePrep(); }); m_DebugButton.onClick.AddListener(() => { ResetAllDebug(); }); }
protected override void OnDeleted() { if (webcambuffer != null && selectedCameraIndex != -1) { webcambuffer.UnregisterForImages(WebcamManager.GetCamera(selectedCameraIndex)); ReleasePreviousBuffers(); WebcamManager.ReleaseInactiveCameras(); if (callbacksRegistered) { WebcamManager.UnregisterWebcamConnectionEvent(OnCameraConnected); WebcamManager.UnregisterWebcamRemovalEvent(OnCameraDisconnected); callbacksRegistered = false; } } }
public void OnCameraConnected(object sender, USBEvent e) { if (!selectedCameraConnected) { Thread.Sleep(50); WebcamManager.RestartService(); selectedCameraIndex = LookforSelectedCamera(); if (selectedCameraIndex != -1) { Logger.WriteLine("Selected camera reconnected"); ErrorLog.AddError(ErrorType.Message, "Selected camera has been reconnected"); webcambuffer.RegisterForImages(WebcamManager.GetCamera(selectedCameraIndex)); WebcamManager.ReleaseInactiveCameras(); } } }
protected override void OnDeleted() { if (motionDetector != null && selectedCameraIndex != -1) { motionDetector.MotionDetected -= WebCamMotionDetected; ReleasePreviousDetectors(); WebcamManager.SetPropertyValueAuto(selectedCameraIndex, WebcamManager.CAMERA_PROPERTY.CAMERA_FOCUS); WebcamManager.SetPropertyValueAuto(selectedCameraIndex, WebcamManager.CAMERA_PROPERTY.CAMERA_ZOOM); WebcamManager.ReleaseInactiveCameras(); if (callbacksRegistered) { WebcamManager.UnregisterWebcamConnectionEvent(OnCameraConnected); WebcamManager.UnregisterWebcamRemovalEvent(OnCameraDisconnected); callbacksRegistered = false; } } }
public void Cleanup() { foreach (ImageViewer viewer in cameraPreviews) { for (int i = 0; i < viewer.ImageSource.SubscribedImagers.Count; i++) { viewer.ImageSource.UnregisterForImages(viewer.ImageSource.SubscribedImagers[i]); } } //foreach (ImageViewer viewer in mainView) //{ // for (int i = 0; i < viewer.ImageSource.SubscribedImagers.Count; i++) // viewer.ImageSource.UnregisterForImages(viewer.ImageSource.SubscribedImagers[i]); //} WebcamManager.ReleaseInactiveCameras(); WebcamManager.UnregisterWebcamConnectionEvent(OnCameraConnected); WebcamManager.UnregisterWebcamRemovalEvent(OnCameraDisconnected); }
protected override void OnAfterLoad() { selectedCameraIndex = LookforSelectedCamera(); if (selectedCameraIndex != -1 && selectedCameraConnected) { if (WebcamManager.IsServiceRestartRequired()) { WebcamManager.RestartService(); } if (!callbacksRegistered) { WebcamManager.RegisterWebcamConnectionEvent(OnCameraConnected); WebcamManager.RegisterWebcamRemovalEvent(OnCameraDisconnected); callbacksRegistered = true; } InitializeMotionDetection(selectedCameraIndex); } }
// Start is called before the first frame update void Start() { WindowsVoice.speak("こんにちは。写真を登録してください。"); retrievedHoroscope += OnRetrievedHoroscope; StartCoroutine(NetworkManager.GetRequest("http://api.jugemkey.jp/api/horoscope/free/2019/05/20", retrievedHoroscope)); m_WebcamManager = GameObject.FindGameObjectWithTag("CameraManager").GetComponent <WebcamManager>(); m_AzureManager = GameObject.FindGameObjectWithTag("AzureManager").GetComponent <AzureManager>(); m_BaseManager = GameObject.Find("BaseManager").GetComponent <BaseManager>(); m_ActivePersonGroup = GetPersonGroupId(); m_StatusText = GameObject.FindGameObjectWithTag("Status").GetComponent <TMPro.TextMeshProUGUI>(); m_GroupNameText = GameObject.FindGameObjectWithTag("GroupNameText").GetComponent <TMPro.TextMeshProUGUI>(); m_Endpoint = m_AzureManager.GetEndpoint(); m_ApiKey = m_AzureManager.GetApiKey(); m_CreatePersonButton = GameObject.FindGameObjectWithTag("CreatePersonButton").GetComponent <Button>(); m_CreatePersonButton.onClick.AddListener(() => { if (!m_CreatePersonButtonClicked) { string name = GetCurrentPersonName(); string birthday = GetCurrentPersonBirthday(); if (!name.Equals("null") && !birthday.Equals("null")) { Debug.Log("Checking if person Id exists..."); StartCoroutine(CheckPersonIdExists(name, birthday)); m_CreatePersonButtonClicked = true; } } }); m_AddFacesButton = GameObject.FindGameObjectWithTag("AddFacesButton").GetComponent <Button>(); m_AddFacesButton.onClick.AddListener(() => { // TODO : add body Debug.Log("Add faces body"); AddFacesToAzure(); }); }
void Start() { webcam = GameObject.FindObjectOfType<WebcamManager>(); width = webcam.texture.width; height = webcam.texture.height; texture = new Texture2D(width, height); segments = height; colorList = new Color[segments][]; for (int i = 0; i < segments; ++i) { Color[] color = new Color[width * height]; for (int c = 0; c < width * height; ++c) { color[c] = Color.black; } colorList[i] = color; } texture.SetPixels(colorList[0]); texture.Apply(false); Shader.SetGlobalTexture("_TimeTexture", texture); }
// Start is called before the first frame update void Start() { m_ApiKey = EnvironmentVariables.GetVariable("GREETER_AZURE_FACE_API_KEY"); Debug.Log("Endpoint is : " + m_Endpoint); m_BaseManager = GameObject.Find("BaseManager").GetComponent <BaseManager>(); m_StatusText = GameObject.FindGameObjectWithTag("Status").GetComponent <TMPro.TextMeshProUGUI>(); m_WebcamManager = GameObject.FindGameObjectWithTag("CameraManager").GetComponent <WebcamManager>(); persons = new List <PersonInGroup.Person>(); m_ValidationButton = GameObject.Find("Validate").GetComponent <Button>(); if (m_ValidationButton != null) { m_ValidationButton.onClick.AddListener(() => { StartValidation(); }); } }
private void Viewer_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { ImageViewer mouseViewer = sender as ImageViewer; int index = cameraList[cameraPreviews.IndexOf(mouseViewer)]; if (index != selectedCameraIndex && selectedCameraIndex != -1) { cameraPreviews[cameraList.IndexOf(selectedCameraIndex)].ViewerBorderColor = "Transparent"; cameraPreviews[cameraList.IndexOf(selectedCameraIndex)].ViewerWidth = previewWidth; cameraPreviews[cameraList.IndexOf(selectedCameraIndex)].ViewerHeight = previewHeight; mouseViewer.ViewerBorderColor = "LightGreen"; mouseViewer.ViewerWidth = previewHeight + 16; mouseViewer.ViewerHeight = mouseViewer.ViewerWidth * 3 / 4; selectedCameraIndex = cameraList[cameraPreviews.IndexOf(mouseViewer)]; //mainView[0].TopTitle = WebcamManager.GetCamera(selectedCameraIndex).WebCamName; //mainView[0].SetImageSource(WebcamManager.GetCamera(selectedCameraIndex)); selectedCameraName = WebcamManager.GetCamera(selectedCameraIndex).WebCamName; } }
void Start() { webcam = GameObject.FindObjectOfType <WebcamManager>(); width = webcam.texture.width; height = webcam.texture.height; texture = new Texture2D(width, height); segments = height; colorList = new Color[segments][]; for (int i = 0; i < segments; ++i) { Color[] color = new Color[width * height]; for (int c = 0; c < width * height; ++c) { color[c] = Color.black; } colorList[i] = color; } texture.SetPixels(colorList[0]); texture.Apply(false); Shader.SetGlobalTexture("_TimeTexture", texture); }
//[MethodImpl(MethodImplOptions.Synchronized)] protected override void OnEnabling(EnablingEventArgs e) { if (!e.WasConfiguring) { if (WebcamManager.IsServiceRestartRequired()) { WebcamManager.RestartService(); } //look for the selected camera selectedCameraIndex = LookforSelectedCamera(true); if (selectedCameraIndex != -1 && selectedCameraConnected) { if (!callbacksRegistered) { WebcamManager.RegisterWebcamConnectionEvent(OnCameraConnected); WebcamManager.RegisterWebcamRemovalEvent(OnCameraDisconnected); callbacksRegistered = true; } InitializeSnapshot(selectedCameraIndex); } } }
void InitializeSnapshot(int cameraindex) { Thread thread = new Thread(() => { try { ReleasePreviousBuffers(); if (webcambuffer == null) { webcambuffer = new WebCamBuffer(); } webcambuffer.RegisterForImages(WebcamManager.GetCamera(cameraindex)); } catch (Exception err) { MessageBox.Show(err.ToString()); } }); thread.SetApartmentState(ApartmentState.STA); thread.Start(); }
//[MethodImpl(MethodImplOptions.Synchronized)] protected override void OnDisabled(DisabledEventArgs e) { if (!e.IsConfiguring) { if (faceDetector != null && selectedCameraIndex != -1) { faceDetector.FaceDetected -= WebCamFaceDetected; faceDetector.UnregisterForImages(WebcamManager.GetCamera(selectedCameraIndex)); ReleasePreviousDetectors(); WebcamManager.SetPropertyValueAuto(selectedCameraIndex, WebcamManager.CAMERA_PROPERTY.CAMERA_FOCUS); WebcamManager.SetPropertyValueAuto(selectedCameraIndex, WebcamManager.CAMERA_PROPERTY.CAMERA_ZOOM); WebcamManager.ReleaseInactiveCameras(); if (callbacksRegistered) { WebcamManager.UnregisterWebcamConnectionEvent(OnCameraConnected); WebcamManager.UnregisterWebcamRemovalEvent(OnCameraDisconnected); callbacksRegistered = false; } } } }
public ConnectionManager(MainWindow mainWindow, int broadcastPort, int camPort, int clientPort, string basePath) { this.mainWindow = mainWindow; this.BasePath = basePath; this.BroadcastPort = broadcastPort; webcamManager = new WebcamManager(); clientManager = new ClientManager(); relations = new Dictionary<Client, Webcam>(); webcamListener = new TcpListener(IPAddress.Any, camPort); webcamListener.Start(); ThreadStart wcListener = new ThreadStart(ListenForWebcam); Thread wcThread = new Thread(wcListener); wcThread.Start(); clientListener = new TcpListener(IPAddress.Any, clientPort); clientListener.Start(); ThreadStart clListener = new ThreadStart(ListenForClient); Thread clThread = new Thread(clListener); clThread.Start(); }
private void Button_Clicked(object sender, RoutedEventArgs e) { if (!_selectedState) { SelectedCameraIndex = camera_selector.GetSelectedCameraIndex(); SelectedCameraName = WebcamManager.GetCamera(SelectedCameraIndex).WebCamName; SelectedCameraPath = WebcamManager.GetCamera(SelectedCameraIndex).WebCamPath; if (SelectedCameraIndex > -1 && SelectedCameraIndex < WebcamManager.NumberConnectedCameras()) { camera_roi_selector.SetImageSource(SelectedCameraIndex); } SelectorPanel.Visibility = Visibility.Collapsed; ROIPanel.Visibility = Visibility.Visible; ButtonState.Content = "<< Select another camera"; } else { ROIPanel.Visibility = Visibility.Collapsed; camera_roi_selector.CleanUp(); SelectorPanel.Visibility = Visibility.Visible; ButtonState.Content = "Configure motion detector >>"; } _selectedState = !_selectedState; }
static void Main(string[] args) { ConsoleWriter.WriteColoredText("Webcammer woohoo!!!", ConsoleColor.Black, ConsoleColor.White); foreach (Webcam wc in WebcamManager.Enumerate()) { ConsoleWriter.WriteColoredText(wc.ToString(), ConsoleColor.DarkBlue, ConsoleColor.Yellow); } Webcam cam2 = WebcamManager.Enumerate().First(x => x.ToString().ToUpper().Contains("LIFE")) ?? WebcamManager.Enumerate().First(); ConsoleWriter.WriteColoredText("Using webcam: " + cam2, ConsoleColor.Green, ConsoleColor.DarkYellow); ConsoleWriter.WriteQuestionMessage("Interval in seconds: ", false); if (!Double.TryParse(Console.ReadLine(), out var interval)) { interval = 3; } while (true) { var pic = cam2.TakePicture(); var picCompressed = Bitmapper.CompressImage(pic); SaveImage(picCompressed, ImageFormat.Jpeg, "webcam.jpg"); Wait((int)(interval * 1000)); } }
// Start is called before the first frame update void Start() { m_WebcamManager = GameObject.FindGameObjectWithTag("CameraManager").GetComponent <WebcamManager>(); WebcamManager.RegisterPhoto += PhotoCountUp; m_Count = GetComponent <TMPro.TextMeshProUGUI>(); }
public override void UpdateFrame(object sender, EventArgs e) { WebCam camera = sender as WebCam; SelectedCameraIndex = camera.WebCamID; if (camera.ImageBuffer == null) { return; } if (ImagerWidth != default(double) && ImagerHeight != default(double) && SelectedCameraIndex > -1 && SelectedCameraIndex < WebcamManager.NumberConnectedCameras()) { try { int scaledRoiX = Math.Max(Math.Min(Convert.ToInt32(ImagerWidth * RoiX), Convert.ToInt32(ImagerWidth)), 0); int scaledRoiY = Math.Max(Math.Min(Convert.ToInt32(ImagerHeight * RoiY), Convert.ToInt32(ImagerHeight)), 0); int scaledRoiWidth = Math.Max(Math.Min(Convert.ToInt32(ImagerWidth * RoiWidth), Convert.ToInt32(ImagerWidth)), 0); int scaledRoiHeight = Math.Max(Math.Min(Convert.ToInt32(ImagerWidth * RoiHeight), Convert.ToInt32(ImagerHeight)), 0); if (Detector.DetectFace(camera.ImageBuffer, Convert.ToInt32(ImagerWidth), Convert.ToInt32(ImagerHeight), scaledRoiX, scaledRoiY, scaledRoiWidth, scaledRoiHeight)) { OnFaceDetected(EventArgs.Empty); // trigger event } if (showDebug) { Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Render, (SendOrPostCallback) delegate { populateBitMap(Detector.cvOutImage.Bytes, (int)(ImagerWidth * ImagerHeight * 3)); BitmapSource.Invalidate(); GC.Collect(); //this is due to a bug in InteropBitmap which causes memory leaks for 24 bit bitmaps... MS: FIX IT! }, null); } } catch (Emgu.CV.Util.CvException ex) { System.Windows.Forms.MessageBox.Show(ex.ErrorMessage); } } }