Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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;
            }
        }
Esempio n. 3
0
 public EditObjectDetectionZoneDialog(ObjectDetectionZone z)
 {
     InitializeComponent();
     m_Zone = z;
     textBoxObjectDetectionZoneName.Text        = m_Zone.Name;
     textBoxObjectDetectionZoneTriggerName.Text = m_Zone.TriggerMessage;
 }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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;
            }
        }
Esempio n. 6
0
        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);
                }
            }
        }
Esempio n. 7
0
 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;
 }
Esempio n. 8
0
        //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();
                }
            }
        }