Пример #1
0
        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());
                }
            }
        }