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); }
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()); }
public static void Add(String id, FaceCacheModel model) { map[id] = model; }