Exemplo n.º 1
0
        public Match <TTemplate> GetBestMatch(IFaceTemplate <TTemplate> template)
        {
            var matches = from f in _storedFaces.AsParallel()
                          let faceInfo = f.Value
                                         let ageRatio = !EnableAgeFiltering || template.Age == 0 || faceInfo.Age == 0 ? 1 : faceInfo.Age / template.Age
                                                        where !EnableAgeFiltering || (ageRatio > 0.66f && ageRatio < 1.5f)
                                                        where !EnableGenderFiltering || (faceInfo.Gender == template.Gender || faceInfo.Gender == Gender.Unknown)
                                                        let match = faceInfo.GetSimilarity(template)
                                                                    select new Match <TTemplate>(f.Key, match.similarity, match.snapshot, faceInfo);

            return(matches.Max());
        }
Exemplo n.º 2
0
 public void AddOrUpdate(int id, IFaceTemplate <TTemplate> template)
 {
     if (_storedFaces.TryGetValue(id, out var faceInfo))
     {
         faceInfo.AddTemplate(template);
     }
     else
     {
         var newInfo = _baseFaceInfo.NewInstance();
         newInfo.AddTemplate(template);
         if (newInfo.IsValid(template.Template))
         {
             _storedFaces[id] = newInfo;
             UpdateNextId(id);
         }
         else
         {
             throw new ArgumentException($"{nameof(template)} invalid!");
         }
     }
 }