Exemple #1
0
        /// <summary>
        /// Overrride Equals
        /// </summary>
        public override bool Equals(object obj)
        {
            if (obj.GetType() != typeof(FaceFeatureTracker))
            {
                return(false);
            }

            FaceFeatureTracker castedObj = (FaceFeatureTracker)obj;

            if (castedObj.FaceProperty != _faceProperty || castedObj.BodyId != _bodyId)
            {
                return(false);
            }

            return(true);
        }
        /// <summary>
        /// Analyse the feature tracker
        /// </summary>
        /// <param name="tracker">Tracker for the feature</param>
        /// <param name="bodyId">Id of tracked body</param>
        public static FaceFeatureAnalytics Analyse(FaceFeatureTracker tracker, ulong bodyId)
        {
            if (tracker == null) throw new ArgumentException("Invalid feature tracker", "tracker");
            if (bodyId == 0) throw new ArgumentException("Invalid body Id", "bodyId");

            // Get most frequent result
            DetectionResult frequentResult = DetectionResult.Unknown;

            // Create details list
            List<FaceFeatureDetailsAnalytics> featureDetails = new List<FaceFeatureDetailsAnalytics>();

            int totalOccurences = 0;
            int detectionOcc = -1;

            foreach (KeyValuePair<DetectionResult, int> pair in tracker.Results)
            {
                // Determin if this occured more
                if (pair.Value > detectionOcc)
                {
                    frequentResult = pair.Key;
                    detectionOcc = pair.Value;
                }

                // Add to details list
                featureDetails.Add(new FaceFeatureDetailsAnalytics(pair.Key, pair.Value));

                // Increment total
                totalOccurences += pair.Value;
            }

            double perc = 0;

            featureDetails.ForEach(ffda => ffda.CalculatePercentage(totalOccurences));

            // Calculate percentage
            if (tracker.Results.ContainsKey(frequentResult))
                perc = Math.Round((((double)tracker.Results[frequentResult] / (double)totalOccurences) * 100), 2);

            return new FaceFeatureAnalytics(bodyId, tracker.FaceProperty, frequentResult, perc) { FaceFeatureDetails = featureDetails };
        }