Exemple #1
0
        public ActionResult UploadFace(int?id)
        {
            ActionResult res = AjaxSubmit(id);

//             string message = System.Web.HttpContext.Current.Request.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath);
//             Response.Write("<script language=VBScript>MsgBox " + message + "</script>");
            if ((Session["ContentStream"] != null) &&
                (Session["ContentStream"].GetType() == typeof(byte[])))
            {
                byte[] arr = (byte[])Session["ContentStream"];
                OpenCvSharp.IplImage[] imgs = null;
                OpenCvSharp.IplImage   img  = support.ByteArrayToIplImage(arr, OpenCvSharp.LoadMode.Unchanged);
                if (img != null)
                {
                    imgs = HaarCascade.GetFaces(img);
                }
                if (imgs != null && imgs.Length > 0)
                {
                    Session["ContentStream"] = support.IplImageToByteArray(imgs[0]);
                    Session["ContentLength"] = imgs[0].ImageSize;
                }
                else
                {
                    Session["ContentLength"] = null;
                    Session["ContentStream"] = null;

                    Response.Write("error");

                    return(null);
                }
                OpenCvSharp.Cv.ReleaseImage(img);
            }
            return(res);
        }
        public void Dispose()
        {
            if (this.ipl != null)
            {
                this.ipl.Dispose();
                this.ipl = null;
            }

            if (this.stream != null)
            {
                this.stream.Dispose();
                this.stream = null;
            }
        }
Exemple #3
0
        /// <summary>
        /// Take a picture and apply Force Field Transform on it.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonPicture_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Multiselect = false;
            DialogResult result = ofd.ShowDialog();

            if (result != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }

            OpenCvSharp.IplImage image = OpenCvSharp.IplImage.FromFile(ofd.FileName);
            tracking.TransformImage(image);
        }
Exemple #4
0
        public static OpenCvSharp.IplImage SubImage(
            this OpenCvSharp.IplImage whole,
            OpenCvSharp.CvRect region)
        {
            whole.SetROI(region);

            OpenCvSharp.IplImage part =
                new OpenCvSharp.IplImage(new OpenCvSharp.CvSize(region.Width, region.Height),
                                         whole.Depth, whole.NChannels);

            whole.Copy(part);

            whole.ResetROI();

            return part;
        }
Exemple #5
0
        public static OpenCvSharp.IplImage SubImage(
            this OpenCvSharp.IplImage whole,
            OpenCvSharp.CvRect region)
        {
            whole.SetROI(region);

            OpenCvSharp.IplImage part =
                new OpenCvSharp.IplImage(new OpenCvSharp.CvSize(region.Width, region.Height),
                                         whole.Depth, whole.NChannels);

            whole.Copy(part);

            whole.ResetROI();

            return part;
        }
        private void CompareFace(
            Damany.Util.DateTimeRange range,
            OpenCvSharp.IplImage targetImage, OpenCvSharp.CvRect rect)
        {
            try
            {
                IsRunning = true;

                targetImage.ROI = rect;
                int count = 0;

                var gray = targetImage.GetSub(rect).CvtToGray();
                var poi  = new PersonOfInterest(targetImage, gray);
                var repo = new PersonOfInterest[] { poi };
                this._comparer.Load(repo.ToList());

                //foreach (var p in portraits)
                //{
                //    if (Exit)
                //    {
                //        break;
                //    }

                //    this.view.CurrentImage = p.GetIpl().ToBitmap();

                //    var colorImg = p.GetIpl();
                //    var imgFromRepository = colorImg.GetSub(p.FaceBounds).CvtToGray();

                //    var result = this._comparer.CompareTo(imgFromRepository);

                //    foreach (var repositoryCompareResult in result)
                //    {
                //        if (repositoryCompareResult.Similarity > Thresholds[ThresholdIndex])
                //        {
                //            count++;
                //            this.view.AddPortrait(p);
                //            this.view.SetStatusText(string.Format("检索到 {0} 个目标", count));
                //        }

                //    }
                //}
            }
            finally
            {
                IsRunning = false;
            }
        }
Exemple #7
0
        public ActionResult UpdateAvatar(int?id)
        {
            ActionResult res = AjaxSubmit(id);

            if ((Session["PersonForReview"] != null) &&
                (Session["ContentStream"] != null) &&
                (Session["PersonForReview"].GetType() == typeof(MembershipPerson)) &&
                (Session["ContentStream"].GetType() == typeof(byte[])))
            {
                OpenCvSharp.IplImage img = support.ByteArrayToIplImage(Session["ContentStream"] as byte[], OpenCvSharp.LoadMode.Unchanged);
                if (img == null)
                {
                    return(res);
                }
                img = ((OpenCvSharp.CPlusPlus.Mat)OpenCvSharp.Cv.EncodeImage(".jpg", img)).ToIplImage();
                byte[] buf = support.IplImageToByteArray(img);
                Session["ContentStream"] = buf;
                Session["ContentLength"] = buf.Length;
                (Session["PersonForReview"] as MembershipPerson).person.Avatar = buf;
            }
            return(res);
        }
Exemple #8
0
        public static bool FaceRecognizeAndSaveResults(OpenCvSharp.IplImage input, string saveDir, string filePahtPrefix)
        {
            input.SaveImage(System.IO.Path.GetFullPath("../python/input.png"));

            List <Tuple <string, RectangleF> > facesInfo = new List <Tuple <string, RectangleF> >();

            if (false == FaceRecognizeAndSaveResultsCommon(saveDir, filePahtPrefix, facesInfo))
            {
                return(false);
            }

            foreach (var info in facesInfo)
            {
                string     savePath = info.Item1;
                RectangleF face     = info.Item2;
                using (var faceImage = input.Clone(new OpenCvSharp.CvRect((int)face.X, (int)face.Y, (int)face.Width, (int)face.Height)))
                {
                    faceImage.SaveImage(savePath);
                }
            }

            return(true);
        }
        private void choosePic_Click(object sender, EventArgs e)
        {
            if (this.openFileDialog1.ShowDialog(this) == DialogResult.Cancel)
            {
                return;
            }

            var img = Damany.Util.Extensions.MiscHelper.FromFileBuffered(this.openFileDialog1.FileName);
            this.ipl = OpenCvSharp.IplImage.FromBitmap((Bitmap)img);

            var fs = new FaceProcessingWrapper.FaceSpecification();
            var suc = _faceComparer.CalcFeature(this.ipl, fs);

            if (!suc)
            {
                MessageBox.Show("人像不满足比对要求,请重新选择人像。",
                    this.Text,
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            this.targetPic.Image = img;

            this.targetPic.Invalidate();
            this.compareButton.Enabled = true;
        }
Exemple #10
0
        // Watershedアルゴリズムによる画像の領域分割
        // パラメータ: 分割数(横), 分割数(縦), マーカサイズ
        private OpenCvSharp.CPlusPlus.Mat procWatershed(OpenCvSharp.CPlusPlus.Mat matSrc, int wdiv, int hdiv, int msize)
        {
            // Matの準備
            OpenCvSharp.CPlusPlus.Mat matDst = matSrc.Clone();

            // IplImageの準備(C API用)
            OpenCvSharp.IplImage iplSrc = matSrc.ToIplImage();
            OpenCvSharp.IplImage iplDst = iplSrc.Clone();

            // マーカ画像の準備
            OpenCvSharp.IplImage iplMarker = new OpenCvSharp.IplImage(iplSrc.Size, OpenCvSharp.BitDepth.S32, 1);
            iplMarker.Zero();

            // マーカ設置(等分割)
            OpenCvSharp.CvPoint[,] mpt = new OpenCvSharp.CvPoint[wdiv, hdiv];
            for (int i = 0; i < wdiv; i++)
            {
                for (int j = 0; j < hdiv; j++)
                {
                    mpt[i, j] = new OpenCvSharp.CvPoint((int)(iplSrc.Width / wdiv * (i + 0.5)), (int)(iplSrc.Height / hdiv * (j + 0.5)));
                    iplMarker.Circle(mpt[i, j], msize, OpenCvSharp.CvScalar.ScalarAll(i * wdiv + j), OpenCvSharp.Cv.FILLED, OpenCvSharp.LineType.Link8, 0);
                }
            }

            // 分割実行
            OpenCvSharp.Cv.Watershed(iplSrc, iplMarker);

            // マーカの描画
            for (int i = 0; i < wdiv; i++)
            {
                for (int j = 0; j < hdiv; j++)
                {
                    iplDst.Circle(mpt[i, j], msize, OpenCvSharp.CvColor.White, 3, OpenCvSharp.LineType.Link8, 0);
                }
            }

            // 領域境界の描画
            for (int i = 0; i < iplMarker.Height; i++)
            {
                for (int j = 0; j < iplMarker.Width; j++)
                {
                    int idx = (int)(iplMarker.Get2D(i, j).Val0);
                    if (idx == -1)
                    {
                        iplDst.Set2D(i, j, OpenCvSharp.CvColor.Red);
                    }
                }
            }

            // IplImage -> Matに戻す
            matDst = new OpenCvSharp.CPlusPlus.Mat(iplDst);

            return matDst;
        }