Ejemplo n.º 1
0
        public static Bitmap Process(FaceCacheModel cacheItem)
        {
            MKParams mkParams = new MKParams();

            Bgr from = new Bgr(), to = new Bgr();

            GetColorRange(new FourPoint[] { cacheItem.Model.RightCheek, cacheItem.Model.LeftCheek, cacheItem.Model.ChainArea }, cacheItem.Image, out from, out to);
            Image <Bgr, Double> con = cacheItem.Image.Convert <Bgr, Double>();

            cacheItem.Image.ROI = cacheItem.Model.HeadArea;
            Image <Gray, byte> headColorMask = cacheItem.Image.InRange(from, to);

            cacheItem.Image.ROI = Rectangle.Empty;


            Image <Gray, byte> skinMask = new Image <Gray, byte>(cacheItem.Image.Width, cacheItem.Image.Height, new Gray(0));

            skinMask.ROI = cacheItem.Model.HeadArea;
            headColorMask.CopyTo(skinMask);
            skinMask.ROI = Rectangle.Empty;

            CvInvoke.DrawContours(skinMask, GetVVP(cacheItem.Model.FaceBoundry), -1, new Bgr(Color.White).MCvScalar, -1, LineType.EightConnected);
            CvInvoke.DrawContours(skinMask, GetVVP(cacheItem.Model.LeftEyePoints), -1, new Bgr(Color.Black).MCvScalar, -1, LineType.EightConnected);
            CvInvoke.DrawContours(skinMask, GetVVP(cacheItem.Model.RightEyePoints), -1, new Bgr(Color.Black).MCvScalar, -1, LineType.EightConnected);
            CvInvoke.DrawContours(skinMask, GetVVP(cacheItem.Model.LipBoundry), -1, new Bgr(Color.Black).MCvScalar, -1, LineType.EightConnected);
            CvInvoke.DrawContours(skinMask, GetVVP(cacheItem.Model.NoseBottom), -1, new Bgr(Color.Black).MCvScalar, -1, LineType.EightConnected);
            Image <Bgr, Double> temp = new Image <Bgr, Double>(con.Width, con.Height, new Bgr(mkParams.SkinMaskColor));

            con.AccumulateWeighted(temp, mkParams.FaceAlpha, skinMask);
            con.Draw(cacheItem.Model.HeadArea, new Bgr(Color.Blue), 2);
            con.Draw(cacheItem.Model.RightCheek.GetBoundingBox(), new Bgr(Color.Red), 2);
            con.Draw(cacheItem.Model.LeftCheek.GetBoundingBox(), new Bgr(Color.Red), 2);
            return(con.Bitmap);
        }
Ejemplo n.º 2
0
        public async Task <IHttpActionResult> Upload()
        {
            if (!Request.Content.IsMimeMultipartContent())
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            var provider = new MultipartMemoryStreamProvider();
            await Request.Content.ReadAsMultipartAsync(provider);

            foreach (var file in provider.Contents)
            {
                var filename = file.Headers.ContentDisposition.FileName.Trim('\"');
                var buffer   = await file.ReadAsByteArrayAsync();

                Bitmap inputBitmap;

                using (var ms = new MemoryStream(buffer))
                {
                    inputBitmap = new Bitmap(ms);
                    IEnumerable <string> headerValues = Request.Headers.GetValues("MyCustomID");
                    var            id        = "aa";
                    string         clientIp  = Request.Headers.Referrer.Authority;
                    FaceCacheModel cacheItem = new FaceCacheModel();
                    cacheItem.Image     = new Image <Bgr, byte>(inputBitmap);
                    cacheItem.GrayImage = cacheItem.Image.Convert <Gray, byte>();
                    try
                    {
                        cacheItem.Model = Labrator.GetFaceModel(cacheItem.Image, cacheItem.GrayImage);
                        FaceMap.Add(clientIp, cacheItem);
                        Bitmap result = Labrator.Process(cacheItem);
                        FaceMap.SetResult(clientIp, result);
                    }
                    catch (Exception e)
                    {
                        MessageBox.Show("");
                    }
                }
            }
            return(Ok());
        }
Ejemplo n.º 3
0
 public static void Add(String id, FaceCacheModel model)
 {
     map[id] = model;
 }