예제 #1
0
        void CompareFaces(object result)
        {
            var collections = ((ICollection[])result)[0];

            var targetFs = new FaceProcessingWrapper.FaceSpecification();

            _faceComparer.CalcFeature(OpenCvSharp.IplImage.FromBitmap((Bitmap)this.targetPic.Image), targetFs);

            this.RunInUIThread(() =>
            {
                repositoryItemProgressBar1.Maximum = collections.Count;
                this.ClearFaceList();
            });

            int count = 0;

            foreach (Damany.PortraitCapturer.DAL.DTO.Portrait face in collections)
            {
                _cts.Token.ThrowIfCancellationRequested();

                var curPortrait = face;
                var curFaceImg  = curPortrait.ImageCopy;
                var clone       = AForge.Imaging.Image.Clone((Bitmap)curFaceImg);
                this.currentPic.RunInUIThread(() =>
                {
                    this.currentPic.Image = (Image)clone;
                    currentPic.Refresh();
                });

                var curFs  = new FaceProcessingWrapper.FaceSpecification();
                var clone2 = AForge.Imaging.Image.Clone((Bitmap)curFaceImg);
                var suc    = _faceComparer.CalcFeature(OpenCvSharp.IplImage.FromBitmap((Bitmap)clone2), curFs);
                ((IDisposable)clone2).Dispose();
                if (suc)
                {
                    var sim = _faceComparer.CmpFace(targetFs, curFs);
                    if (sim > Interlocked.Read(ref _currentAccuracy))
                    {
                        var clone3 = AForge.Imaging.Image.Clone((Bitmap)curFaceImg);
                        this.galleryControl1.RunInUIThread(() =>
                        {
                            var item = new GalleryItem((Image)clone3,
                                                       curPortrait.CaptureTime.ToShortDateString(),
                                                       curPortrait.CaptureTime.ToShortTimeString());
                            item.Hint = curPortrait.CaptureTime.ToString();
                            this.galleryControl1.Gallery.Groups[0].Items.Add(item);
                        });
                    }
                }

                var c = ++count;
                this.RunInUIThread(() =>
                {
                    progressBar.EditValue = c;
                    var msg         = string.Format("已比对: {0}, 待比对: {1}", c, collections.Count - c);
                    counter.Caption = msg;
                });
            }
        }