Ejemplo n.º 1
0
        public static void DrawRect(this IplImage ipl, CvRect rect, CvColor color, int thickNess)
        {
            var roi = ipl.ROI;

            ipl.ResetROI();
            ipl.DrawRect(rect.X, rect.Y, rect.X + rect.Width, rect.Y + rect.Height, color, thickNess);
            ipl.SetROI(roi);
        }
Ejemplo n.º 2
0
        public MainWindow()
        {
            InitializeComponent();

            //ViewModel からのスクリプト実行用のdelegate
            DataContextChanged += (o, e) =>
            {
                ViewModel vm = DataContext as ViewModel;
                if (vm != null)
                {
                    vm._ExecuteScript += (sender, arg) =>
                    {
                        Dispatcher.Invoke(new Action(() => { pythonConsole.Pad.Console.RunStatements(arg.cmd); }));
                    };

                    vm._DrawCameraBitmap += (sender, arg) =>
                    {
                        Dispatcher.BeginInvoke(new Action(() =>
                        {
                            IplImage img = vm.VisionControl.GetCameraImage();

                            DrawCameraViewEventArgs a = arg as DrawCameraViewEventArgs;

                            if (a._draw == 1)
                            {
                                CvRect rect = new CvRect(a._x1, a._y1, a._x2, a._y2);
                                img.DrawRect(rect, new CvScalar(255, 0, 0), 2);
                            }
                            else if (a._draw == 2)
                            {
                                int x1 = a._x1 - a._x2 / 2;
                                int x2 = a._x1 + a._x2 / 2;
                                int y1 = a._y1 - a._y2 / 2;
                                int y2 = a._y1 + a._y2 / 2;
                                img.DrawLine(x1, a._y1, x2, a._y1, new CvScalar(255, 0, 0), 2);
                                img.DrawLine(a._x1, y1, a._x1, y2, new CvScalar(255, 0, 0), 2);
                            }

                            if (VM.CenterLine == true)
                            {
                                img.DrawLine(0, 320, 640, 320, new CvScalar(255, 0, 0, 0), 2);
                                img.DrawLine(320, 0, 320, 640, new CvScalar(255, 0, 0, 0), 2);
                            }

                            WriteableBitmapConverter.ToWriteableBitmap(img, _col_wb);

                            cameraImage.Source = _col_wb;

                            img.Dispose();

                            //cameraImage.Source = vm.VisionControl.GetCameraBitmap();
                        }));
                    };
                }
            };

            pythonConsole.Pad.Host.ConsoleCreated += new PythonConsoleControl.ConsoleCreatedEventHandler(Host_ConsoleCreated);
        }
Ejemplo n.º 3
0
        private void CaptureCameraCallback()
        {
            const double ScaleFactor  = 2.5;
            const int    MinNeighbors = 1;
            CvSize       MinSize      = new CvSize(30, 30);

            //mengambil data dari kamera langsung
            CvCapture cap = CvCapture.FromCamera(2);
            //menggunakan cascade classifier
            CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile("haarcascade_eye.xml");

            //deteksi mata
            while (true)
            {
                IplImage          img  = cap.QueryFrame();
                CvSeq <CvAvgComp> eyes = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), ScaleFactor, MinNeighbors, HaarDetectionType.DoCannyPruning, MinSize);

                foreach (CvAvgComp mata in eyes.AsParallel())
                {
                    img.DrawRect(mata.Rect, CvColor.Red);

                    if (mata.Rect.Left > pctCvWindow.Width / 2)
                    {
                        try
                        {
                            IplImage MataImg1 = img.Clone();
                            Cv.SetImageROI(MataImg1, mata.Rect);
                            IplImage MataImg2 = Cv.CreateImage(mata.Rect.Size, MataImg1.Depth, MataImg1.NChannels);
                            Cv.Copy(MataImg1, MataImg2, null);
                            Cv.ResetImageROI(MataImg1);
                            Bitmap MataBitmap = BitmapConverter.ToBitmap(MataImg2);
                            Console.WriteLine("Mata terdeteksi, HIDUPKAN vibrator!!!");
                        }
                        catch { }
                    }
                }
                //keluar (while) , mata tidak terdeteksi.
                Bitmap bm = BitmapConverter.ToBitmap(img);
                bm.SetResolution(pctCvWindow.Width, pctCvWindow.Height);
                pctCvWindow.Image = bm;

                img = null;
                bm  = null;
                Console.WriteLine("Mata TIDAK terdeteksi, MATIKAN vibrator!!!");
            }
        }
Ejemplo n.º 4
0
        private void CaptureMotion()
        {
            try
            {
                float wFactor = (float)this.Width / (float)CaptureBox.Width;
                float hFactor = (float)this.Height / (float)CaptureBox.Height;

                CvArr     array = null;
                CvCapture cap   = CvCapture.FromCamera(CaptureDevice.Any);

                this.Invoke(new Action(() =>
                {
                    lblLoading.Visible     = false;
                    GBBox.Visible          = true;
                    CamBox.Visible         = true;
                    RadarBox.Visible       = true;
                    lblGhost.Visible       = true;
                    GhostBox.Visible       = true;
                    lblDescription.Visible = true;
                    CaptureBox.Visible     = true;
                }));

                SoundTrack.Play();
                SoundTrack = new SoundPlayer("Alarm.wav");

                Thread.Sleep(3600);

                while (true)
                {
                    IplImage img = cap.QueryFrame();

                    if (img == null)
                    {
                        continue;
                    }

                    //int black = img
                    //if (black < 10)
                    //{
                    //    MessageBox.Show("Please get off cameras' field of view and switch off the lights!", "Ghost Busters Cam");

                    //    continue;
                    //}

                    img.Flip(array, FlipMode.Y);

                    string filepath = "haarcascade_frontalface_alt2.xml";

                    CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile(filepath);
                    CvSeq <CvAvgComp>       faces   = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), 3.0, 1,
                                                                           HaarDetectionType.Zero, new CvSize(70, 70),
                                                                           new CvSize(500, 500));

                    Bitmap Image = BitmapConverter.ToBitmap(img);
                    Image.SetResolution(240, 180);

                    this.Invoke(new Action(() =>
                    {
                        CaptureBox.Image = Image;
                    }));

                    foreach (CvAvgComp face in faces)
                    {
                        IplImage ClonedImage = img.Clone();
                        Cv.SetImageROI(ClonedImage, face.Rect);

                        IplImage ThisFace = Cv.CreateImage(face.Rect.Size, ClonedImage.Depth, ClonedImage.NChannels);
                        Cv.Copy(ClonedImage, ThisFace, null);
                        Cv.ResetImageROI(ClonedImage);

                        Bitmap GhostImage = BitmapConverter.ToBitmap(ThisFace);
                        GhostImage.SetResolution(114, 103);

                        img.DrawRect(face.Rect, CvColor.Red, 3);

                        Bitmap FaceImage = BitmapConverter.ToBitmap(img);
                        FaceImage.SetResolution(240, 180);

                        this.Invoke(new Action(() =>
                        {
                            AlertTimer.Enabled = true;

                            CaptureBox.Image = FaceImage;
                            GhostBox.Image   = GhostImage;
                        }));

                        SoundTrack.Play();

                        Thread.Sleep(2500);

                        this.Invoke(new Action(() =>
                        {
                            AlertTimer.Enabled    = false;
                            lblGhostAlert.Visible = false;
                        }));

                        SoundTrack.Stop();

                        break;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
Ejemplo n.º 5
0
        EyeRects Recognize(PictureBox bb, Panel container)
        {
            const double ScaleFactor  = 2.5;
            const int    MinNeighbors = 1;
            CvSize       MinSize      = new CvSize(30, 30);

            //CvCapture cap = CvCapture.FromCamera(1);
            CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile("haarcascade_eye.xml");
            //IplImage img = cap.QueryFrame();
            IplImage          img  = IplImage.FromBitmap(new Bitmap(bb.Image));
            CvSeq <CvAvgComp> eyes = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), ScaleFactor, MinNeighbors, HaarDetectionType.DoCannyPruning, MinSize);

            img.DrawRect(new CvRect(30, 30, bb.Image.Width - 30, bb.Image.Height - 60), CvColor.Yellow);
            var rcs = new EyeRects();

            foreach (CvAvgComp eye in eyes.AsParallel())
            {
                rcs.AddRect(eye.Rect);
                img.DrawRect(eye.Rect, CvColor.Yellow);

                if (eye.Rect.Left > pn.Width / 2)
                {
                    try
                    {
                        IplImage rightEyeImg1 = img.Clone();
                        Cv.SetImageROI(rightEyeImg1, eye.Rect);
                        IplImage rightEyeImg2 = Cv.CreateImage(eye.Rect.Size, rightEyeImg1.Depth, rightEyeImg1.NChannels);
                        Cv.Copy(rightEyeImg1, rightEyeImg2, null);
                        Cv.ResetImageROI(rightEyeImg1);

                        //Bitmap rightEyeBm = BitmapConverter.ToBitmap(rightEyeImg2);
                        //spMain.Panel2.Image = rightEyeBm;
                    }
                    catch { }
                }
                else
                {
                    try
                    {
                        IplImage leftEyeImg1 = img.Clone();
                        Cv.SetImageROI(leftEyeImg1, eye.Rect);
                        IplImage leftEyeImg2 = Cv.CreateImage(eye.Rect.Size, leftEyeImg1.Depth, leftEyeImg1.NChannels);
                        Cv.Copy(leftEyeImg1, leftEyeImg2, null);
                        Cv.ResetImageROI(leftEyeImg1);

                        //Bitmap leftEyeBm = BitmapConverter.ToBitmap(leftEyeImg2);
                        //pctLeftEye.Image = leftEyeBm;
                    }
                    catch { }
                }
            }
            Bitmap bm = BitmapConverter.ToBitmap(img);

            //bm.SetResolution(1500, 1500);
            //pctCvWindow.Image = bm;
            //PictureBox pb = new PictureBox();
            //pb.Image = bm;
            //pb.Image = bm;
            bb.Image = bm;

            //spMain.Panel2.Controls.Clear();
            if (pn.Controls.Count < 1)
            {
                pn.Controls.Add(bb);
                //bb.Click += bb_Click;
            }
            bb.Dock = DockStyle.Fill;
            //pb.Image = bm;
            img = null;
            bm  = null;
            return(rcs);
        }
Ejemplo n.º 6
0
        private void CaptureMotion()
        {
            try
            {
                float wFactor = (float)this.Width / (float)CaptureBox.Width;
                float hFactor = (float)this.Height / (float)CaptureBox.Height;

                CvArr     array = null;
                CvCapture cap   = CvCapture.FromCamera(CaptureDevice.Any);

                this.Invoke(new Action(() =>
                {
                    lblLoading.Visible   = false;
                    radioButton1.Visible = true;
                    radioButton2.Visible = true;
                }));

                while (true)
                {
                    IplImage img = cap.QueryFrame();

                    if (img == null)
                    {
                        continue;
                    }

                    img.Flip(array, FlipMode.Y);

                    if (mode == 1)
                    {
                        string filepath = "haarcascade_frontalface_alt2.xml";

                        CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile(filepath);
                        CvSeq <CvAvgComp>       faces   = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), 3.0, 1,
                                                                               HaarDetectionType.Zero, new CvSize(70, 70),
                                                                               new CvSize(500, 500));

                        foreach (CvAvgComp face in faces)
                        {
                            //IplImage ClonedImage = img.Clone();
                            //Cv.SetImageROI(ClonedImage, face.Rect);
                            //IplImage ThisFace = Cv.CreateImage(face.Rect.Size, ClonedImage.Depth, ClonedImage.NChannels);
                            //Cv.Copy(ClonedImage, ThisFace, null);
                            //Cv.ResetImageROI(ClonedImage);

                            //Bitmap FaceImage = BitmapConverter.ToBitmap(ThisFace);
                            //FaceImage.SetResolution(240, 180);
                            //CaptureBox.Image = FaceImage;

                            img.DrawRect(face.Rect, CvColor.Red, 3);

                            Bitmap FaceImage = BitmapConverter.ToBitmap(img);
                            FaceImage.SetResolution(240, 180);
                            CaptureBox.Image = FaceImage;

                            this.Invoke(new Action(() =>
                            {
                                LifeBox.Left = (int)(face.Rect.Left * wFactor - (float)(LifeBox.Width / 2.0) - (float)(this.Width / 2.0));
                                LifeBox.Top  = (int)(face.Rect.Top * hFactor - (float)(LifeBox.Height / 2.0) - (float)(this.Height / 2.0));

                                if (LifeBox.Left > (this.Width - LifeBox.Width - 12))
                                {
                                    LifeBox.Left = (this.Width - LifeBox.Width - 24);
                                }

                                if (LifeBox.Top > (this.Height - LifeBox.Height - 48))
                                {
                                    LifeBox.Top = (this.Height - LifeBox.Height - 48);
                                }

                                if (LifeBox.Left < 12)
                                {
                                    LifeBox.Left = 12;
                                }

                                if (LifeBox.Top < 12)
                                {
                                    LifeBox.Top = 12;
                                }

                                Thread.Sleep(30);
                            }));

                            break;
                        }
                    }
                    else
                    {
                        int AllBlobs = 0;

                        CvBlobs  blobs     = null;
                        IplImage imgHSVsrc = Cv.CreateImage(Cv.GetSize(img), BitDepth.U8, 3);
                        IplImage imgHSVdst = Cv.CreateImage(Cv.GetSize(img), BitDepth.U8, 1);

                        Cv.CvtColor(img, imgHSVsrc, ColorConversion.BgrToHsv);
                        Cv.InRangeS(imgHSVsrc, new CvScalar(86, 80, 30), new CvScalar(115, 250, 250), imgHSVdst);
                        Cv.ReleaseImage(imgHSVsrc);

                        blobs = new CvBlobs(imgHSVdst);
                        blobs.FilterByArea(7000, 40000);

                        AllBlobs = blobs.Count;

                        foreach (KeyValuePair <int, CvBlob> blob in blobs)
                        {
                            CvBlob  CurrentBlob = blob.Value;
                            CvRect  BlobRect = CurrentBlob.Rect;
                            CvPoint Point1, Point2;

                            Point1.X = BlobRect.X;
                            Point1.Y = BlobRect.Y;
                            Point2.X = BlobRect.X + BlobRect.Width;
                            Point2.Y = BlobRect.Y + BlobRect.Height;

                            img.DrawRect(Point1, Point2, CvColor.LightGreen, 3, LineType.AntiAlias);

                            this.Invoke(new Action(() =>
                            {
                                LifeBox.Left = (int)(BlobRect.Left * wFactor - (float)(LifeBox.Width / 2.0) - (float)(this.Width / 2.0));
                                LifeBox.Top  = (int)(BlobRect.Top * hFactor - (float)(LifeBox.Height / 2.0) - (float)(this.Height / 2.0));

                                if (LifeBox.Left > (this.Width - LifeBox.Width - 12))
                                {
                                    LifeBox.Left = (this.Width - LifeBox.Width - 24);
                                }

                                if (LifeBox.Top > (this.Height - LifeBox.Height - 48))
                                {
                                    LifeBox.Top = (this.Height - LifeBox.Height - 48);
                                }

                                if (LifeBox.Left < 12)
                                {
                                    LifeBox.Left = 12;
                                }

                                if (LifeBox.Top < 12)
                                {
                                    LifeBox.Top = 12;
                                }

                                Thread.Sleep(30);
                            }));

                            break;
                        }

                        Bitmap Item = BitmapConverter.ToBitmap(img);
                        Item.SetResolution(240, 180);
                        CaptureBox.Image = Item;

                        Bitmap HSVItem = BitmapConverter.ToBitmap(imgHSVdst);
                        HSVItem.SetResolution(240, 180);
                        HSVCaptureBox.Image = HSVItem;

                        Cv.ReleaseImage(imgHSVdst);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("ERROR: " + e.Message + "DETAILS: " + e.StackTrace);
            }
        }
Ejemplo n.º 7
0
        private void CaptureCameraCallback()
        {
            const double ScaleFactor  = 2.5;
            const int    MinNeighbors = 1;
            CvSize       MinSize      = new CvSize(30, 30);

            CvCapture cap = CvCapture.FromCamera(1);
            CvHaarClassifierCascade cascade = CvHaarClassifierCascade.FromFile("haarcascade_eye.xml");

            while (true)
            {
                IplImage img = cap.QueryFrame();
                //IplImage src = new IplImage(new CvSize(600, 400),BitDepth.U8,1);
                //Cv.Resize(img, src, Interpolation.Linear);
                CvSeq <CvAvgComp> eyes = Cv.HaarDetectObjects(img, cascade, Cv.CreateMemStorage(), ScaleFactor, MinNeighbors, HaarDetectionType.DoCannyPruning, MinSize);

                foreach (CvAvgComp eye in eyes.AsParallel())
                {
                    img.DrawRect(eye.Rect, CvColor.Red);

                    if (eye.Rect.Left > pctCvWindow.Width / 2)
                    {
                        try
                        {
                            IplImage rightEyeImg1 = img.Clone();
                            Cv.SetImageROI(rightEyeImg1, eye.Rect);
                            IplImage rightEyeImg2 = Cv.CreateImage(eye.Rect.Size, rightEyeImg1.Depth, rightEyeImg1.NChannels);
                            Cv.Copy(rightEyeImg1, rightEyeImg2, null);
                            Cv.ResetImageROI(rightEyeImg1);


                            Bitmap rightEyeBm = BitmapConverter.ToBitmap(rightEyeImg2);
                            pctRightEye.Image = rightEyeBm;
                        }
                        catch { }
                    }
                    else
                    {
                        try
                        {
                            IplImage leftEyeImg1 = img.Clone();
                            Cv.SetImageROI(leftEyeImg1, eye.Rect);
                            IplImage leftEyeImg2 = Cv.CreateImage(eye.Rect.Size, leftEyeImg1.Depth, leftEyeImg1.NChannels);
                            Cv.Copy(leftEyeImg1, leftEyeImg2, null);
                            Cv.ResetImageROI(leftEyeImg1);

                            Bitmap leftEyeBm = BitmapConverter.ToBitmap(leftEyeImg2);
                            //pctLeftEye.Image = leftEyeBm;
                            //pctLeftEye.Visible = false;
                        }catch {}
                    }
                }

                Bitmap bm = BitmapConverter.ToBitmap(img);
                bm.SetResolution(pctCvWindow.Width, pctCvWindow.Height);
                pctCvWindow.Image = bm;

                img = null;
                bm  = null;
            }
        }