Ejemplo n.º 1
0
        private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            var videoFrame = eventArgs.Frame.Clone() as Bitmap;


            var Analyzeframe = new Image <Bgr, byte>(videoFrame);

            if (Analyzeframe != null)
            {
                var grayFrame = Analyzeframe.Convert <Gray, byte>();
                var faces     = FaceDetection.DetectMultiScale(grayFrame, 1.3, 5);
                var eyes      = EyeDetection.DetectMultiScale(grayFrame, 1.1, 5);

                if (FaceSquare == true)
                {
                    foreach (var face in faces)
                    {
                        Analyzeframe.Draw(face, new Bgr(Color.Red), 3);
                    }
                }

                if (EyeSquare == true)
                {
                    foreach (var eye in eyes)
                    {
                        Analyzeframe.Draw(eye, new Bgr(Color.Blue), 3);
                    }
                }

                pbWebCam.Image = Analyzeframe.ToBitmap();
            }
        }
Ejemplo n.º 2
0
        private void Camera_ImageGrabbed(object sender, EventArgs e)
        {
            Camera.Retrieve(Frame);
            var ImgFrame = Frame.ToImage <Bgr, byte>();

            if (ImgFrame != null)
            {
                var grayFrame = ImgFrame.Convert <Gray, byte>();
                var faces     = FaceDetection.DetectMultiScale(grayFrame, 1.3, 5);
                var eyes      = EyeDetection.DetectMultiScale(grayFrame, 1.3, 5);

                if (FaceSquare)
                {
                    foreach (var face in faces)
                    {
                        ImgFrame.Draw(face, new Bgr(Color.BurlyWood), 3);
                    }
                }

                if (EyeSquare)
                {
                    foreach (var eye in eyes)
                    {
                        ImgFrame.Draw(eye, new Bgr(Color.Yellow), 3);
                    }
                }

                CameraBox.Image = ImgFrame.ToBitmap();
            }
        }
Ejemplo n.º 3
0
        protected override RequestedAction PostRenderImage(ImageState s)
        {
            if (s.destBitmap == null) return RequestedAction.None;
            string str = null;
            int i = 0;

             if ("true".Equals(s.settings["r.autoeyes"], StringComparison.OrdinalIgnoreCase)) {
                 List<ObjRect> eyes;
                 using (var ed = new EyeDetection()) eyes = ed.DetectFeatures(s.sourceBitmap);

                 List<PointF> points = new List<PointF>();
                 foreach(ObjRect r in eyes) { points.Add(new PointF(r.X,r.Y)); points.Add(new PointF(r.X2,r.Y2));}
                 PointF[] newPoints = c.CurrentImageBuilder.TranslatePoints(points.ToArray(),s.originalSize,new ResizeSettings(s.settings));
                 using (Graphics g = Graphics.FromImage(s.destBitmap)){
                     for(i =0; i < newPoints.Length -1; i+=2){
                         float x1 = newPoints[i].X;
                         float y1 = newPoints[i].Y;
                         float x2 = newPoints[i + 1].X;
                         float y2 = newPoints[i + 1].Y;
                         float t;
                         if (x1 > x2){ t = x2; x2  =x1; x1 = t;}
                         if (y1 > y2){ t = y1; y1 = y2; y2 = t;}

                         g.DrawRectangle(eyes[i /2].Feature == FeatureType.Eye ? Pens.Green : Pens.Gray,new Rectangle((int)x1,(int)y1,(int)(x2-x1),(int)(y2-y1)));
                     }
                 }
             }

            str = s.settings["r.filter"]; //radius
            if (!string.IsNullOrEmpty(str) && int.TryParse(str, NumberStyles.Integer, NumberFormatInfo.InvariantInfo, out i)) {
                using (s.destBitmap) {
                    s.destBitmap = new RedEyeFilter((short)i).Apply(s.destBitmap);
                }
                //Note to future self: sobel/canny/eye kernel convolutions were not helpful; they were dead ends.
             }
            return RequestedAction.None;
        }
Ejemplo n.º 4
0
        protected override RequestedAction Render(ImageState s)
        {
            if (base.Render(s) == RequestedAction.Cancel) return RequestedAction.Cancel;

            bool detecteyes = s.settings.Get<bool>("r.detecteyes", false);
            bool getlayout = s.settings.Get<bool>("r.getlayout", false);
            if (detecteyes || getlayout) {

                var d = new DetectionResponse<ObjRect>();
                try {
                    //Only detect eyes if it was requested.
                    if (detecteyes) using (var ed = new EyeDetection()) { d.features = ed.DetectFeatures(s.sourceBitmap); }
                } catch (TypeInitializationException e) {
                    throw e;
                } catch (Exception e) {
                    d.message = e.Message;
                }
                d.PopulateFrom(s);
                throw d.GetResponseException(s.settings["callback"]);
            }

            if (s.sourceBitmap == null) return RequestedAction.None;

            if (!string.IsNullOrEmpty(s.settings["r.eyes"])) {
                double[] eyes = NameValueCollectionExtensions.GetList<double>(s.settings, "r.eyes", 0);
                // lock source bitmap data
                BitmapData data = s.sourceBitmap.LockBits(
                    new Rectangle(0, 0, s.sourceBitmap.Width, s.sourceBitmap.Height),
                    ImageLockMode.ReadWrite, s.sourceBitmap.PixelFormat);

                try {
                    UnmanagedImage ui = new UnmanagedImage(data);

                    for (var i = 0; i < eyes.Length / 5; i++) {
                        var x = eyes[i * 5];
                        var y = eyes[i * 5 + 1];
                        var w = eyes[i * 5 + 2];
                        var h = eyes[i * 5 + 3];
                        var a = eyes[i * 5 + 4];
                        var cx = x + w / 2;
                        var cy = y + h / 2;
                        var radius = Math.Sqrt(w * w + h * h) / 2;

                        AdaptiveCircleFill.MarkEye(ui, new System.Drawing.Point((int)cx, (int)cy), (int)Math.Ceiling(radius), (float)(a > 6 ? radius / 4 : radius));
                    }

                } finally {
                    // unlock image
                    s.sourceBitmap.UnlockBits(data);
                }
            }
            return RequestedAction.None;
        }