private AllEnums.Direction isMouseOnObj(System.Windows.Point pPoint, ObjectDetectionZone pRect) { if (pPoint.X >= pRect.X && pPoint.X <= (pRect.X + pRect.Width) && pPoint.Y >= pRect.Y - (BOX_BORDERWIDTH / 2) && pPoint.Y <= pRect.Y + (BOX_BORDERWIDTH / 2)) { return(AllEnums.Direction.NORTH); } else if (pPoint.X >= pRect.X && pPoint.X <= (pRect.X + pRect.Width) && pPoint.Y >= pRect.Y + pRect.Height - (BOX_BORDERWIDTH / 2) && pPoint.Y <= pRect.Y + (BOX_BORDERWIDTH / 2) + pRect.Height) { return(AllEnums.Direction.SOUTH); } else if (pPoint.Y >= pRect.Y && pPoint.Y <= (pRect.Y + pRect.Height) && pPoint.X >= pRect.X - (BOX_BORDERWIDTH / 2) && pPoint.X <= pRect.X + (BOX_BORDERWIDTH / 2)) { return(AllEnums.Direction.WEST); } else if (pPoint.Y >= pRect.Y && pPoint.Y <= (pRect.Y + pRect.Height) && pPoint.X >= pRect.X + pRect.Width - (BOX_BORDERWIDTH / 2) && pPoint.X <= pRect.X + (BOX_BORDERWIDTH / 2) + pRect.Width) { return(AllEnums.Direction.EAST); } return(AllEnums.Direction.NONE); }
public void OnObjectWasTakenTrigger(TrackableObject obj) { ObjectDetectionZone myZone = null; // find the zone that the object was last seen foreach (ObjectDetectionZone zone in ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones) { if (zone.Id == obj.LastSeenZoneId) { // found the zone myZone = zone; } } // check if rec is running if (StateManager.Instance.State == AllEnums.State.RECORD && !m_BlockUntilObjectIsBackAgain) { // create a scene for displaying the picking of the object Scene.Scene autoScene = new Scene.Scene(); Scene.SceneRect rect = ObjectDetectionManager.Instance.createSceneRectForObjectDetectionZone(myZone, true); autoScene.Add(rect); AdaptiveScene adaptiveScene = new AdaptiveScene(autoScene, AdaptivityLevel.AdaptivityLevels.FirstOrDefault()); EditWorkflowManager.Instance.createStep(AllEnums.PBD_Mode.OBJECT_RECOGNIZED, adaptiveScene, "Benutze Objekt-" + obj.Name, obj.Name); m_BlockUntilObjectIsBackAgain = true; } }
public EditObjectDetectionZoneDialog(ObjectDetectionZone z) { InitializeComponent(); m_Zone = z; textBoxObjectDetectionZoneName.Text = m_Zone.Name; textBoxObjectDetectionZoneTriggerName.Text = m_Zone.TriggerMessage; }
private void MenuItem_DeleteSelectedObjectDetectionZone(object sender, RoutedEventArgs e) { var selectedItem = m_ListBoxObjects.SelectedItem; if (selectedItem is ObjectDetectionZone) { ObjectDetectionZone z = (ObjectDetectionZone)selectedItem; ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones.Remove(z); } }
private void buttonObjectScreenShot_Click(object sender, RoutedEventArgs e) { var selectedItem = m_ListBoxObjects.SelectedItem; if (selectedItem is ObjectDetectionZone) { ObjectDetectionZone z = (ObjectDetectionZone)selectedItem; m_SelectedZone = z; m_TakeScreenShotFromZone = true; m_ScreenshotTakenTimestamp = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; SceneManager.Instance.DisableObjectScenes = true; } }
private void MenuItem_EditSelectedBoxObject(object sender, RoutedEventArgs e) { var selectedItem = m_ListBoxObjects.SelectedItem; if (selectedItem is ObjectDetectionZone) { ObjectDetectionZone z = (ObjectDetectionZone)selectedItem; EditObjectDetectionZoneDialog dlg = new EditObjectDetectionZoneDialog(z); dlg.ShowDialog(); // blocking if (dlg.wasOkay()) { ObjectDetectionZone editedZone = dlg.EditedObjectDetectionZone; ObjectDetectionManager.Instance.UpdateCurrentObjectDetectionZone(editedZone); } } }
private void initializeDrag(System.Windows.Point p) { foreach (ObjectDetectionZone o in ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones) { m_DragMode = isMouseOnObj(p, o); if (m_DragMode != AllEnums.Direction.NONE) { m_DraggedObj = o; m_DragEnabled = true; if (m_DragMode == AllEnums.Direction.NORTH || m_DragMode == AllEnums.Direction.SOUTH) { Cursor = Cursors.SizeNS; } else if (m_DragMode == AllEnums.Direction.EAST || m_DragMode == AllEnums.Direction.WEST) { Cursor = Cursors.SizeWE; } return; } } m_DragEnabled = false; }
//Code to be called within a certain part of the main ProccessFrame Method public void Object_ProccessFrame_Draw(bool hasToUpdateUI, Image <Bgra, Byte> pImage) { if (m_TakeScreenShotFromZone) { if (m_SelectedZone != null) { long now = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; if (now - m_ScreenshotTakenTimestamp > 200) // take picture after 200ms - frame should be gone by then { // crop image Rectangle boundingBox = new Rectangle(m_SelectedZone.X, m_SelectedZone.Y, m_SelectedZone.Width, m_SelectedZone.Height); pImage.ROI = boundingBox; ObjectDetectionManager.Instance.SaveAndAddObjectToDatabase(pImage); SceneManager.Instance.DisableObjectScenes = false; m_TakeScreenShotFromZone = false; m_SelectedZone = null; CvInvoke.cvResetImageROI(pImage); } } } // first clear all the feedback from previous frame SceneManager.Instance.TemporaryObjectsTextScene.Clear(); // should we check for objects? if (SettingsManager.Instance.Settings.ObjectsRecognizeObject && ObjectDetectionManager.Instance.CurrentLayout != null && hasToUpdateUI) { // walk over all zones foreach (ObjectDetectionZone zone in ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones) { // crop image Rectangle boundingBox = new Rectangle(zone.X, zone.Y, zone.Width, zone.Height); pImage.ROI = boundingBox; Image <Gray, byte> grayscaleImage = pImage.Copy().Convert <Gray, byte>(); CvInvoke.cvResetImageROI(pImage); // walk over all objects foreach (TrackableObject obj in Database.DatabaseManager.Instance.Objects) { if (ObjectDetectionManager.Instance.RecognizeObject(obj.EmguImage, grayscaleImage)) { // YAY we found an object // trigger stuff WorkflowManager.Instance.OnObjectRecognized(obj); // update last seen timestamp obj.LastSeenTimeStamp = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; obj.LastSeenZoneId = zone.Id; // display visual feedback Scene.SceneText textItem = ObjectDetectionManager.Instance.createSceneTextHeadingObjectDetectionZone(zone, obj.Name); SceneManager.Instance.TemporaryObjectsTextScene.Add(textItem); } } } } CvInvoke.cvResetImageROI(pImage); if (ObjectDetectionManager.Instance.CurrentLayout != null) { if (SettingsManager.Instance.Settings.ObjectsVisualFeedbackDisplay && (ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones.Count != 0)) { //write boxes MCvFont font = new MCvFont(Emgu.CV.CvEnum.FONT.CV_FONT_HERSHEY_SIMPLEX, 0.5, 0.5); foreach (ObjectDetectionZone z in ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones) { // draw ID pImage.Draw(z.Id + "", ref font, new System.Drawing.Point(z.X, z.Y), new Bgra(0, 0, 0, 0)); // draw Frame if (z.wasRecentlyTriggered()) { pImage.Draw(new Rectangle(z.X, z.Y, z.Width, z.Height), new Bgra(0, 255, 255, 0), 0); } else { pImage.Draw(new Rectangle(z.X, z.Y, z.Width, z.Height), new Bgra(255, 255, 255, 0), 0); } } } UtilitiesImage.ToImage(image, pImage); if (SettingsManager.Instance.Settings.ObjectsVisualFeedbackProject) { SceneManager.Instance.TemporaryObjectsScene.Clear(); // add a temporary scene for each box foreach (ObjectDetectionZone z in ObjectDetectionManager.Instance.CurrentLayout.ObjectDetectionZones) { // false = call from the display loop SceneManager.Instance.TemporaryObjectsScene.Add(ObjectDetectionManager.Instance.createSceneBoxForObjectDetectionZone(z, false)); } } else { SceneManager.Instance.TemporaryObjectsScene.Clear(); } } }