Ejemplo n.º 1
0
        /// <summary>
        /// 返回所有相似度 0.5 以上的人脸,并按相似度倒排序
        /// </summary>
        /// <param name="feature"></param>
        /// <returns></returns>
        public List <FindPersonFaceResult> FindPersonFaceByFeature(Feature feature)
        {
            var _cache = _personFaceRepository.GetAllPersonFaces();

            if (_cache.Count == 0)
            {
                return(null);
            }
            List <FindPersonFaceResult> resultList = new List <FindPersonFaceResult>();

            foreach (var single in _cache)
            {
                var sim = _processor.Match(feature.FeatureData, single.FaceFeature);
                if (sim > 0.5)
                {
                    FindPersonFaceResult result = new FindPersonFaceResult();
                    result.PersonFace = single;
                    result.Similar    = sim;
                    resultList.Add(result);
                }
            }

            return(resultList
                   .OrderByDescending(r => r.Similar)
                   .ToList());
        }
Ejemplo n.º 2
0
        private static void TestMatching()
        {
            using (var proccesor = new FaceProcessor("appId",
                                                     "ftKey", "frKey", true))
            {
                var image1 = Image.FromFile("test2.jpg");
                var image2 = Image.FromFile("test.jpg");

                var result1 = proccesor.LocateExtract(new Bitmap(image1));
                var result2 = proccesor.LocateExtract(new Bitmap(image2));

                if ((result1 != null) & (result2 != null))
                {
                    Console.WriteLine(proccesor.Match(result1[0].FeatureData, result2[0].FeatureData, true));
                }
            }
        }
Ejemplo n.º 3
0
        private string[] MatchAll(Feature[] features)
        {
            var result = Enumerable.Repeat("陌生人", features.Length).ToArray();

            if (_cache.Count == 0)
            {
                return(result);
            }

            //依次处理找到的人脸
            var max = new float[features.Length];

            try
            {
                _cacheLock.EnterReadLock();

                foreach (var single in _cache)
                {
                    for (var i = 0; i < features.Length; i++)
                    {
                        var sim = _processor.Match(features[i].FeatureData,
                                                   single.Value); //此方法默认保留采集到的特征(非托管内存),并自动释放被比较(特征库)的特征数据,所以无需担心内存泄露
                        if (sim > 0.5)
                        {
                            if (sim > max[i])
                            {
                                max[i]    = sim;
                                result[i] = single.Key;
                            }
                        }
                    }
                }
            }
            finally
            {
                _cacheLock.ExitReadLock();
            }


            return(result);
        }