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; }); } }