/// <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 }; }