private void DetectSuspecious(Target[] targets) { foreach (var t in targets) { for (int i = 0; i < t.Faces.Length; ++i) { IplImage normalized = Program.faceSearch.NormalizeImage(t.BaseFrame.image, t.FacesRectsForCompare[i]); float[] imgData = NativeIconExtractor.ResizeIplTo(normalized, 100, 100, BitDepth.U8, 1); if (IsGoodGuy(imgData)) { return; } FaceRecognition.RecognizeResult[] results = new FaceRecognition.RecognizeResult[Program.ImageSampleCount]; FaceRecognition.FaceRecognizer.Recognize( imgData, Program.ImageSampleCount, results, Program.ImageLen, Program.EigenNum); FaceRecognition.RecognizeResult[] filtered = Array.FindAll(results, r => r.similarity > 0.85); if (filtered.Length == 0) { return; } int j = 0; IList <ImportantPersonDetail> details = new List <ImportantPersonDetail>(); foreach (PersonInfo p in SuspectsRepositoryManager.Instance.Peoples) { foreach (FaceRecognition.RecognizeResult result in filtered) { string fileName = System.IO.Path.GetFileName(result.fileName); int idx = fileName.IndexOf('_'); fileName = fileName.Remove(idx, 5); if (string.Compare(fileName, p.FileName, true) == 0) { details.Add(new ImportantPersonDetail(p, result)); } } } ImportantPersonDetail[] distinct = details.Distinct(new ImportantPersonComparer()).ToArray(); if (distinct.Length == 0) { return; } screen.ShowSuspects(distinct, t.Faces[i].ToBitmap()); } } }