示例#1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="GestureDetector"/> class.
        /// </summary>
        /// <param name="bodyIndex">Index of the body.</param>
        /// <param name="kinectSensor">Active sensor to initialize the VisualGestureBuilderFrameSource object with.</param>
        public GestureDetector(int bodyIndex, KinectSensor kinectSensor)
        {
            BodyIndex = bodyIndex;
            if (ReferenceEquals(null, kinectSensor))
            {
                throw new ArgumentNullException("kinectSensor is null");
            }

            // create the vgb source. The associated body tracking ID will be set when a valid body frame arrives from the sensor.
            _vgbFrameSource = new VisualGestureBuilderFrameSource(kinectSensor, 0);

            VgbFrameReader = _vgbFrameSource.OpenReader();
            if (!ReferenceEquals(null, VgbFrameReader))
            {
                VgbFrameReader.IsPaused      = true;
                VgbFrameReader.FrameArrived += VgbFrameReader_FrameArrived;
            }

            //get all discrete and continuous postures
            var discretePostures   = _dataAccessFacade.GetSubModalAccess().GetAll("Discrete Posture");
            var continuousPostures = _dataAccessFacade.GetSubModalAccess().GetAll("Continuous Posture");

            //add all the database filenames of each posture to posturePaths list
            List <string> posturePaths = new List <string>();

            foreach (var discrete in discretePostures)
            {
                if (!ReferenceEquals(null, discrete.File))
                {
                    string internalFilePath = $"{_dataAccessFacade.GetGeneralSettings().GetDataDirectory()}" +
                                              $"modal/Discrete Posture/{discrete.File}";
                    posturePaths.Add(internalFilePath);
                }
            }
            foreach (var continuous in continuousPostures)
            {
                if (!ReferenceEquals(null, continuous.File))
                {
                    string internalFilePath = $"{_dataAccessFacade.GetGeneralSettings().GetDataDirectory()}" +
                                              $"modal/Continuous Posture/{continuous.File}";
                    posturePaths.Add(internalFilePath);
                }
            }

            //add the database files of the postures to the detector
            foreach (var posturePath in posturePaths)
            {
                Console.WriteLine("Loading VGB Database: '{0}'", posturePath);
                using (VisualGestureBuilderDatabase database = new VisualGestureBuilderDatabase(posturePath))
                {
                    _vgbFrameSource.AddGestures(database.AvailableGestures);
                }
            }
        }
示例#2
0
        public EEGReceiver()
        {
            _dataAccessFacade.GetModalAccess().AddIfNotExists("Emotion", "Affects or feels of a person");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Emotion", "LALV", "Low arousal Low Valence", "emotionmodel.svm");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Emotion", "LAHV", "Low arousal High Valence", "emotionmodel.svm");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Emotion", "HALV", "High arousal Low Valence", "emotionmodel.svm");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Emotion", "HAHV", "High arousal High Valence", "emotionmodel.svm");

            _signaList  = new List <double[]>();
            _signalGet  = true;
            _lastSecond = 0;
        }
        public AccurateProxemicLogic()
        {
            _dataAccessFacade.GetModalAccess().AddIfNotExists("AccProxemic", "distance between spinalmids of persons");

            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("AccProxemic", "Intimate", "Close person distance", null); //0
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("AccProxemic", "Personal", "Acquaintance distance", null); //1
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("AccProxemic", "Social", "Stranger distance", null);       //2
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("AccProxemic", "Public", "Public distance", null);         //3

            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("AccProxemic", "Events", "all distances", null);

            _bodies = new List <CustomBody>();
        }
示例#4
0
        /// <summary>
        /// Listener of Kinect gesture frames.
        /// </summary>
        /// <param name="sender">The sender object.</param>
        /// <param name="e">The kinect gesture frame.</param>
        public void Gesture_FrameArrived(object sender, KinectGestureFrameArrivedArgs e)
        {
            CheckPerson.Instance.CheckIfExistsPerson(e.TrackingId);
            if (e.Time.HasValue)
            {
                //process discrete gestures
                if (!ReferenceEquals(null, e?.Frame?.DiscreteGestureResults))
                {
                    foreach (var discreteGesture in e.Frame.DiscreteGestureResults)
                    {
                        if (discreteGesture.Value.Detected)
                        {
                            var tuple = new Tuple <Person, string>(CheckPerson.Instance.PersonsId[e.TrackingId], discreteGesture.Key.Name);
                            if (!_discreteGestures.Exists(d => d.Equals(tuple)))
                            {
                                _discreteGestures.Add(tuple);
                            }
                            //check in the variable if has processed, if not, check in the database and then add it to variable
                            if (!_processedDiscreteGestureNames.Exists(pd => pd.Equals(discreteGesture.Key.Name)))
                            {
                                _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Discrete Posture", discreteGesture.Key.Name, "Autogenerated", null);
                                _processedDiscreteGestureNames.Add(discreteGesture.Key.Name);
                            }
                            if (discreteGesture.Value.Detected)
                            {
                                _dataAccessFacade.GetEventAccess().Add(CheckPerson.Instance.PersonsId[e.TrackingId], "Discrete Posture", discreteGesture.Key.Name, e.Time.Value, discreteGesture.Value.Confidence, 1);
                            }
                            else
                            {
                                _dataAccessFacade.GetEventAccess().Add(CheckPerson.Instance.PersonsId[e.TrackingId], "Discrete Posture", discreteGesture.Key.Name, e.Time.Value, discreteGesture.Value.Confidence, -1);
                            }
                        }
                    }
                }

                //process continuous gestures
                if (!ReferenceEquals(null, e?.Frame?.ContinuousGestureResults))
                {
                    foreach (var continuousGesture in e.Frame.ContinuousGestureResults)
                    {
                        //check in the variable if has processed, if not, check in the database and then add it to variable
                        if (!_processedDiscreteGestureNames.Exists(pd => pd.Equals(continuousGesture.Key.Name)))
                        {
                            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Continuous Posture", continuousGesture.Key.Name, "Autogenerated", null);
                            _processedDiscreteGestureNames.Add(continuousGesture.Key.Name);
                        }
                        _dataAccessFacade.GetEventAccess().Add(CheckPerson.Instance.PersonsId[e.TrackingId], "Continuous Posture", continuousGesture.Key.Name, e.Time.Value, continuousGesture.Value.Progress, -1);
                    }
                }
            }
        }
示例#5
0
        public ShouldersAngleLogic()
        {
            _bodies = new List <CustomBody>();

            _dataAccessFacade.GetModalAccess().AddIfNotExists("Shoulders", "Shoulders data");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Shoulders", "Angle", "angle between the shoulders", null);
        }
        private void RefreshList()
        {
            //get all discrete and continuous postures
            var discretePostures   = _dataAccessFacade.GetSubModalAccess().GetAll("Discrete Posture");
            var continuousPostures = _dataAccessFacade.GetSubModalAccess().GetAll("Continuous Posture");
            var postureList        = new List <Posture>();

            foreach (var discrete in discretePostures)
            {
                postureList.Add(new Posture(discrete.SubModalTypeId, discrete.File, discrete.Description, 0));
            }
            foreach (var continuous in continuousPostures)
            {
                postureList.Add(new Posture(continuous.SubModalTypeId, continuous.File, continuous.Description, 1));
            }

            postureCrudDataGrid.ItemsSource = postureList;
            postureCrudDataGrid.Items.Refresh();
        }
        public TrainerEntryPoint()
        {
            _dataAccessFacade.GetModalAccess().AddIfNotExists("Emotion", "Affects or feels of a person");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Emotion", "LALV", "Low arousal Low Valence", "emotionmodel.svm");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Emotion", "LAHV", "Low arousal High Valence", "emotionmodel.svm");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Emotion", "HALV", "High arousal Low Valence", "emotionmodel.svm");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Emotion", "HAHV", "High arousal High Valence", "emotionmodel.svm");


            Windows = new List <Tuple <string, WindowBuilder> >();
            Name    = Properties.EEGEmotion2Channels.ClassificationModuleName;
            var configWindow = new Tuple <string, WindowBuilder>(Properties.EEGEmotion2Channels.ConfigWindowTitle,
                                                                 new WindowBuilder(new ConfigurationWindow(Properties.EEGEmotion2Channels.ConfigWindowTitle)));
            //var sceneWindow = new Tuple<string, WindowBuilder>(Properties.EEGEmotion2Channels.TrainerSceneSelectorTitle,
            //    new WindowBuilder(new TrainerSceneSelector()));
            var fileWindow = new Tuple <string, WindowBuilder>(Properties.EEGEmotion2Channels.TrainerFileSelectorTitle,
                                                               new WindowBuilder(new TrainerFileSelector()));

            Windows.Add(configWindow);
            //Windows.Add(sceneWindow);
            Windows.Add(fileWindow);
        }
示例#8
0
        public HeadAngleLogic()
        {
            _bodies = new List <CustomBody>();
            _dataAccessFacade.GetModalAccess().AddIfNotExists("Neck Orientation", "Angles of neck");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Neck Orientation", "Pitch", "rotation in X axis (nodding)", null);
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Neck Orientation", "Yaw", "rotation in Y axis", null);
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Neck Orientation", "Roll", "rotation in Z axis", null);

            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Neck Orientation", "Watching public", "The angle of the neck is watching to the public", null);//0

            _dataAccessFacade.GetModalAccess().AddIfNotExists("Lean", "Lean of body");
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Lean", "X", "Lean in X axis (right or left)", null);
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Lean", "Y", "Lean in Y axis (back and forward)", null);


            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Lean", "Upside", "Lean in Y axis (back and forward) is to up", null);      //0
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Lean", "Straight", "Lean in Y axis (back and forward) is straight", null); //1
            _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Lean", "Downside", "Lean in Y axis (back and forward) is to down", null);  //2
        }
示例#9
0
 public VoiceLogic()
 {
     _dataAccessFacade.GetModalAccess().AddIfNotExists("Voice", "When a person talks");
     _dataAccessFacade.GetSubModalAccess().AddIfNotExists("Voice", "Talked", "a person talked", null);
 }
        private void SaveButton_Click(object sender, RoutedEventArgs e)
        {
            string error = "";
            string name  = nameTextBox.Text;

            if (String.IsNullOrEmpty(_safeFileName) && ReferenceEquals(null, _posture))
            {
                error += "\n" + Properties.GestureConfiguration.Error_NoFile;
            }
            if (String.IsNullOrEmpty(name))
            {
                error += "\n" + Properties.GestureConfiguration.Error_NoName;
            }
            if (_dataAccessFacade.GetSubModalAccess().Exists(PostureCRUD.PostureTypes[TypeCombobox.SelectedIndex], name) &&
                ReferenceEquals(null, _posture))
            {
                error += $"\n{Properties.GestureConfiguration.Error_ThePosture} {name} {Properties.GestureConfiguration.Error_PostureExists}";
            }
            if (!String.IsNullOrEmpty(error))
            {
                MessageBox.Show($"{Properties.GestureConfiguration.Error_ThereAreErrors}{error}", Properties.GestureConfiguration.Error);
            }
            else if (ReferenceEquals(null, _posture)) //is adding
            {
                string internalFilePath = $"{_dataAccessFacade.GetGeneralSettings().GetDataDirectory()}" +
                                          $"modal/{PostureCRUD.PostureTypes[TypeCombobox.SelectedIndex]}/{_safeFileName}";

                if (!File.Exists(internalFilePath))
                {
                    File.Copy(FileNameTextBox.Text, internalFilePath);
                }

                _dataAccessFacade.GetSubModalAccess().Add(PostureCRUD.PostureTypes[TypeCombobox.SelectedIndex],
                                                          name, DescriptionTextBox.Text, _safeFileName);
                Close();
            }
            else //editing
            {
                var    subModal = _dataAccessFacade.GetSubModalAccess().Get(PostureCRUD.PostureTypes[TypeCombobox.SelectedIndex], name);
                string oldPath  = subModal.File;

                subModal.SubModalTypeId = name;
                subModal.File           = _safeFileName ?? oldPath;
                subModal.Description    = DescriptionTextBox.Text;
                _dataAccessFacade.GetSubModalAccess().Update(subModal);

                if (!String.IsNullOrEmpty(_safeFileName))
                {
                    string internalFilePath = $"{_dataAccessFacade.GetGeneralSettings().GetModalDirectory(PostureCRUD.PostureTypes[TypeCombobox.SelectedIndex])}/{_safeFileName}";
                    if (oldPath.Equals(internalFilePath))
                    {
                        if (File.Exists(oldPath))
                        {
                            File.Delete(oldPath);
                        }
                        if (!File.Exists(internalFilePath))
                        {
                            File.Copy(FileNameTextBox.Text, internalFilePath);
                        }
                    }
                }
                Close();
            }
        }