Example #1
0
        /// <summary>
        /// used to dispose any object created from this class
        /// </summary>
        public void Dispose()
        {
            if (timerInProgress)
            {
                mainTimer.Stop();
            }

            if (mainTimer != null)
            {
                mainTimer.Dispose();
            }

            if (window != null)
            {
                window.Close();
                window.Dispose();
            }

            //if (capture_ != null)
            //    capture_.Dispose();

            if (videoInput != null)
            {
                videoInput.StopDevice(deviceID);
                videoInput.Dispose();
            }
        }
Example #2
0
        /// <summary>
        /// used to dispose any object created from this class
        /// </summary>
        public void Dispose()
        {
            if (workingThread.IsAlive)
            {
                workingThread.Abort();
            }

            if (workingThread != null)
            {
                workingThread = null;
            }

            if (window1 != null)
            {
                window1.Close();
                window1.Dispose();
                window1 = null;
            }

            if (window2 != null)
            {
                window2.Close();
                window2.Dispose();
                window2 = null;
            }
        }
Example #3
0
        /// <summary>
        /// used to dispose any object created from this class
        /// </summary>
        public void Dispose()
        {
            if (timerInProgress)
            {
                mainTimer.Stop();
                fpsTimer.Stop();
            }

            if (mainTimer != null)
            {
                mainTimer.Dispose();
                mainTimer = null;
            }

            if (fpsTimer != null)
            {
                fpsTimer.Dispose();
                fpsTimer = null;
            }

            if (window1 != null)
            {
                window1.Close();
                window1.Dispose();
                window1 = null;
            }

            if (window2 != null)
            {
                window2.Close();
                window2.Dispose();
                window2 = null;
            }

            if (window3 != null)
            {
                window3.Close();
                window3.Dispose();
                window3 = null;
            }

            if (capture != null)
            {
                capture.Dispose();
                capture = null;
            }
        }
Example #4
0
        public IplImage SnakeImage(IplImage src)
        {
            snake = new IplImage(src.Size, BitDepth.U8, 3);
            IplImage calc = new IplImage(src.Size, BitDepth.U8, 1);

            calc = this.Binary(src, 150);
            calc = this.BlurImage(calc);

            int n = 2000;

            CvPoint[] contour = new CvPoint[n];
            CvPoint   center  = new CvPoint(src.Width / 2, src.Height / 2);

            for (int i = 0; i < n; i++)
            {
                contour[i].X = (int)(center.X + (center.X * Math.Cos(2 * Math.PI * i / n)));
                contour[i].Y = (int)(center.Y + (center.Y * Math.Sin(2 * Math.PI * i / n)));
            }

            CvWindow window = null;

            for (int j = 0; j < 100; j++)
            {
                window = new CvWindow("SnakeImage", WindowMode.StretchImage);
                window.Resize(640, 480);

                Cv.SnakeImage(calc, contour, 1f, 1f, 1f, new CvSize(15, 15), new CvTermCriteria(10), true);
                Cv.Copy(src, snake);

                for (int k = 0; k < n - 1; k++)
                {
                    Cv.DrawLine(snake, contour[k], contour[k + 1], CvColor.Red, 2);
                }
                Cv.DrawLine(snake, contour[n - 1], contour[0], CvColor.Red, 2);

                window.Image = snake;
                Application.DoEvents();
            }
            window.Close();
            return(snake);
        }
Example #5
0
        /* 실행 시 관리자 권한 상승을 위한 함수 끝 */

        private void timer1_Tick(object sender, EventArgs e)
        {
            sec--;
            int Delkey = Convert.ToInt32(ownerkey);

            if (Delkey == 1)
            {
                label1.Show();
                EX.Show();
            }
            else
            {
                label1.Hide();
                EX.Hide();
            }

            timer.Text = sec + "초 후 종료됩니다.".ToString();

            if (NetworkInterface.GetIsNetworkAvailable())
            {
                Net = 0;
            }
            else
            {
                Net = 1;
            }
            if (sec == 0)
            {
                try
                {
                    if (Net == 1)
                    {
                        MessageBox.Show("인터넷에 연결되어있지않습니다.");
                        return;
                    }

                    CAP();

                    window.Close();


                    CAPTURE = Path.Combine("C:\\Windows\\캡쳐.zip");
                    ZipFile.CreateFromDirectory("C:\\Windows\\TE_PT", CAPTURE);
                    String WanIP = new WebClient().DownloadString("http://ip.mc-blacklist.kr/");
                    GPS = "http://whatismyipaddress.com/ip/" + WanIP;

                    MailWAR();
                    Del("C:\\Windows\\TE_PT");
                    Directory.Delete("C:\\Windows\\TE_PT");
                    File.Delete(CAPTURE);

                    sec = 1800;
                }
                catch
                {
                    Del("C:\\Windows\\TE_PT");
                    Directory.Delete("C:\\Windows\\TE_PT");
                    File.Delete(CAPTURE);
                    MessageBox.Show("계정등록이 되지 않았습니다.");
                    Exit();
                }

                //Count = 1;
                //CapCount = 1;
                //Application.ExitThread();
                //Process.Start("shutdown.exe", "-s -t 1");
                //Application.Exit();
            }
        }
Example #6
0
        public IplImage BinarizerMethod_Hist(IplImage src)
        {
            bina = new IplImage(src.Size, BitDepth.U8, 1);
            gray = this.GrayScale(src);

            int area = 200;
            int num  = 0;

            int row   = (src.Width % area == 0) ? (int)(src.Width / area) : (int)(src.Width / area + 1);
            int col   = (src.Height % area == 0) ? (int)(src.Height / area) : (int)(src.Height / area + 1);
            int count = row * col;

            float[]    data      = new float[count];
            IplImage[] piece     = new IplImage[count];
            CvRect[]   piece_roi = new CvRect[count];

            for (int x = 0; x < src.Width; x = x + area)
            {
                for (int y = 0; y < src.Height; y = y + area)
                {
                    CvRect roi = new CvRect
                    {
                        X      = x,
                        Y      = y,
                        Width  = area,
                        Height = area
                    };

                    if (roi.X + roi.Width > src.Width)
                    {
                        roi.Width = area - ((roi.X + roi.Width) - src.Width);
                    }
                    if (roi.Y + roi.Height > src.Height)
                    {
                        roi.Height = area - ((roi.Y + roi.Height) - src.Height);
                    }

                    gray.SetROI(roi);
                    piece[num] = new IplImage(gray.ROI.Size, BitDepth.U8, 1);
                    Cv.Copy(gray, piece[num]);
                    gray.ResetROI();

                    //히스토그램 계산//
                    int[]       size = { area };
                    CvHistogram hist = new CvHistogram(size, HistogramFormat.Array);
                    Cv.CalcHist(piece[num], hist);

                    float minValue, maxValue;
                    hist.GetMinMaxValue(out minValue, out maxValue);

                    int highlevel = 0;
                    for (int i = 0; i < area; i++)
                    {
                        if (maxValue == hist.Bins[i].Val0)
                        {
                            highlevel = i;
                        }
                    }

                    piece_roi[num] = roi;
                    data[num]      = highlevel;
                    num++;
                }
            }

            CvMat kernel = new CvMat(row, col, MatrixType.F32C1, data);

            Cv.Normalize(kernel, kernel, 255, 0, NormType.C);

            for (int r = 0; r < count; r++)
            {
                Cv.Threshold(piece[r], piece[r], kernel[r], 255, ThresholdType.Otsu);

                Cv.SetImageROI(bina, piece_roi[r]);
                Cv.Copy(piece[r], bina);
                bina.ResetROI();
            }

            //37강 - 윈도우 창//
            CvWindow win = new CvWindow("window", WindowMode.StretchImage, src);

            win.Resize(640, 480);
            win.Move(100, 0);
            win.ShowImage(piece[0]);
            win.Close();

            new CvWindow(piece[0]).Move(0, 0);
            new CvWindow(piece[1]).Move(0, 200);
            new CvWindow(piece[2]).Move(0, 400);
            //37강 - 윈도우 창//

            return(bina);
        }
Example #7
0
        // 타이머 함수
        private void timer1_Tick(object sender, EventArgs e)
        {
            if (info.cnt >= 0) // 2번째부터는 카메라 5초 뒤 실행
            {
                timer1.Interval = 5000;
            }

            CvCapture camera = new CvCapture(0); // 카메라 생성
            CvWindow  win    = new CvWindow();   // 윈도우창 생성

            //CvHaarClassifierCascade face_classifier =
            //    CvHaarClassifierCascade.FromFile("C:\\김유민\\Visual Studio 2017\\haarcascade_frontalface_alt.xml"); // 얼굴 인식 Haar 알고리즘 불러오기

            //CvHaarClassifierCascade eye_classifier =
            //    CvHaarClassifierCascade.FromFile("C:\\김유민\\Visual Studio 2017\\haarcascade_eye.xml"); // 눈 인식 Haar 알고리즘 불러오기

            CvHaarClassifierCascade face_classifier =
                CvHaarClassifierCascade.FromFile("./haarcascade_frontalface_alt.xml"); // 얼굴 인식 Haar 알고리즘 불러오기

            CvHaarClassifierCascade eye_classifier =
                CvHaarClassifierCascade.FromFile("./haarcascade_eye.xml"); // 눈 인식 Haar 알고리즘 불러오기

            CvMemStorage storage_face = new CvMemStorage();                // 얼굴 저장 메모리
            CvMemStorage storage_eye  = new CvMemStorage();                // 눈 저장 메모리

            bool check = true;

            info.time = DateTime.Now;
            TimeSpan timecal = DateTime.Now - info.time;

            while (CvWindow.WaitKey(10) != 27 && check) // <0 : 아무키나 누르면 종료, !=27 esc 누르면 종료
            {
                using (IplImage camera_img = camera.QueryFrame())
                {
                    storage_face.Clear();
                    storage_eye.Clear();

                    Cv.Flip(camera_img, camera_img, FlipMode.Y); // 좌우반전

                    CvSeq <CvAvgComp> faces = Cv.HaarDetectObjects(camera_img, face_classifier, storage_face, 1.5, 1,
                                                                   HaarDetectionType.ScaleImage, new CvSize(0, 0), new CvSize(200, 200)); // 얼굴 인식 동작

                    for (int i = 0; i < faces.Total; i++)
                    {
                        camera_img.Rectangle(faces[i].Value.Rect, CvColor.Red); // 인식 된 얼굴에 빨간 사각형 그리기

                        CvSeq <CvAvgComp> eyes = Cv.HaarDetectObjects(camera_img, eye_classifier, storage_eye, 1.5, 1,
                                                                      HaarDetectionType.ScaleImage, new CvSize(35, 35), new CvSize(50, 50)); // 눈 인식 동작

                        for (int j = 0; j < eyes.Total; j++)                                                                                 // eyes.Total is changing continuously
                        {
                            if (eyes[j].Value.Rect.X > faces[i].Value.Rect.X && eyes[j].Value.Rect.Y > faces[i].Value.Rect.Y &&
                                eyes[j].Value.Rect.X + eyes[j].Value.Rect.Width < faces[i].Value.Rect.X + faces[i].Value.Rect.Width &&
                                eyes[j].Value.Rect.Y + eyes[j].Value.Rect.Height < (faces[i].Value.Rect.Y + faces[i].Value.Rect.Height) - 60)
                            {
                                camera_img.Rectangle(eyes[j].Value.Rect, CvColor.Yellow); // 인식 된 눈에 노란 사각형 그리기
                                //Console.WriteLine("eyes : {0}", eyes[j]);
                                Console.WriteLine("Comparing X, Y with Recognition X, Y");
                                Console.WriteLine(">> eye  X : {0}, eye  Y : {1}", eyes[j].Value.Rect.X, eyes[j].Value.Rect.Y);

                                // 좌표 저장 (왼눈, 오른눈 랜덤으로 됨..)
                                //info.eye_X = eyes[j].Value.Rect.X;
                                //info.eye_Y = eyes[j].Value.Rect.Y;
                                info.eye_X = faces[i].Value.Rect.X;
                                info.eye_Y = faces[i].Value.Rect.Y;
                                Console.WriteLine(">> face X : {0}, face Y : {1}", faces[i].Value.Rect.X, faces[i].Value.Rect.Y);
                                Cv.DrawRect(camera_img, info.area_X, info.area_Y, info.area_X + rect_Width, info.area_Y + rect_Height, CvColor.Green);
                            }
                        }
                    }

                    win.Image = camera_img;

                    // 영상 동작 시간
                    timecal = DateTime.Now - info.time;

                    //if (timecal.Minutes == info.minutes) // info.minutes(설정한 분) 뒤에 check가 false로 변하면서 카메라 자동 꺼짐
                    if (timecal.Seconds == 3)
                    {
                        check = false;
                    }
                }

                timer1.Stop();
            }

            // 눈 범위 설정 -> 벗어나면 label 보이기, 숨기기
            if (info.eye_X < info.area_X - 15 || info.eye_X > info.area_X + 15 || info.eye_Y < info.area_Y - 15 || info.eye_Y > info.area_Y + 15)
            {
                info.wrongCount++;

                if (info.wrongCount == 2)
                {
                    Console.Beep(512, 300);
                    Console.Beep(650, 300);
                    Console.Beep(768, 300);
                    System.Windows.Forms.MessageBox.Show("자세를 바르게 하세요");
                    timer1.Stop();
                    info.wrongCount = 0;
                }
                //else
                //{
                //    timer1.Start();
                //}
            }

            info.cnt++;
            win.Close();
            Cv.ReleaseCapture(camera); // 메모리 해제
            //camera.Dispose(); // 메모리 해제
            Console.WriteLine("메모리 해제");
            Console.WriteLine("저장된 좌표 X : {0}, Y : {1}", info.eye_X, info.eye_Y);
            Console.WriteLine("");

            timer1.Start();

            if (flag == 1)
            {
                timer1.Stop();
            }
        }
Example #8
0
        //선택창 확인버튼 누르면 -> 영상인식 넘어가야함
        private void Confirm_Click(object sender, EventArgs e)
        {
            pictureBox1.Hide();
            pictureBox2.Hide();
            pictureBox4.Hide();
            M_Box.Hide();
            Confirm.Hide();
            Select_Beginner.Hide();
            Select_Master.Hide();
            pictureBox3.Show();
            MessageBox.Show("눈이 제대로 인식되었다면 ESC버튼을 눌러주세요");

            CvCapture camera = new CvCapture(0); // 카메라 생성
            CvWindow  win    = new CvWindow();   // 윈도우창 생성

            CvHaarClassifierCascade face_classifier =
                CvHaarClassifierCascade.FromFile("./haarcascade_frontalface_alt.xml"); // 얼굴 인식 Haar 알고리즘 불러오기

            CvHaarClassifierCascade eye_classifier =
                CvHaarClassifierCascade.FromFile("./haarcascade_eye.xml"); // 눈 인식 Haar 알고리즘 불러오기

            CvMemStorage storage_face = new CvMemStorage();                // 얼굴 저장 메모리
            CvMemStorage storage_eye  = new CvMemStorage();                // 눈 저장 메모리

            while (CvWindow.WaitKey(10) != 27)                             // <0 : 아무키나 누르면 종료, !=27 esc 누르면 종료
            {
                using (IplImage camera_img = camera.QueryFrame())
                {
                    storage_face.Clear();
                    storage_eye.Clear();

                    Cv.Flip(camera_img, camera_img, FlipMode.Y); // 좌우반전

                    CvSeq <CvAvgComp> faces = Cv.HaarDetectObjects(camera_img, face_classifier, storage_face, 1.5, 1,
                                                                   HaarDetectionType.ScaleImage, new CvSize(0, 0), new CvSize(200, 200)); // 얼굴 인식 동작

                    for (int i = 0; i < faces.Total; i++)
                    {
                        camera_img.Rectangle(faces[i].Value.Rect, CvColor.Red); // 인식 된 얼굴에 빨간 사각형 그리기

                        CvSeq <CvAvgComp> eyes = Cv.HaarDetectObjects(camera_img, eye_classifier, storage_eye, 1.5, 1,
                                                                      HaarDetectionType.ScaleImage, new CvSize(35, 35), new CvSize(50, 50)); // 눈 인식 동작

                        for (int j = 0; j < eyes.Total; j++)                                                                                 // eyes.Total is changing continuously
                        {
                            if (eyes[j].Value.Rect.X > faces[i].Value.Rect.X && eyes[j].Value.Rect.Y > faces[i].Value.Rect.Y &&
                                eyes[j].Value.Rect.X + eyes[j].Value.Rect.Width < faces[i].Value.Rect.X + faces[i].Value.Rect.Width &&
                                eyes[j].Value.Rect.Y + eyes[j].Value.Rect.Height < (faces[i].Value.Rect.Y + faces[i].Value.Rect.Height) - 60)
                            {
                                camera_img.Rectangle(eyes[j].Value.Rect, CvColor.Yellow); // 인식 된 눈에 노란 사각형 그리기
                                Console.WriteLine("Recognition X, Y");
                                Console.WriteLine(">> eye X : {0}, eye Y : {1}", eyes[j].Value.Rect.X, eyes[j].Value.Rect.Y);

                                // 좌표 저장 (왼눈, 오른눈 랜덤으로 됨..) -> recognition 버튼에서 처음에 눈 좌표 저장, 이를 토대로 범위 벗어났는지 아닌지 판별
                                //info.area_X = eyes[j].Value.Rect.X;
                                //info.area_Y = eyes[j].Value.Rect.Y;
                                info.area_X = faces[i].Value.Rect.X;
                                info.area_Y = faces[i].Value.Rect.Y;
                                rect_Width  = faces[i].Value.Rect.Width;
                                rect_Height = faces[i].Value.Rect.Height;
                                Console.WriteLine(">> face X : {0}, face Y : {1}", faces[i].Value.Rect.X, faces[i].Value.Rect.Y);
                            }
                        }
                    }

                    win.Image = camera_img;
                }
            }

            win.Close();
            Cv.ReleaseCapture(camera);
            Console.WriteLine("메모리 해제");

            info.total_time = DateTime.Now; // 스타트 누를 때부터 초세기 (전체시간)

            timer1.Enabled = true;          // 타이머 동작

            timer2.Enabled = true;
            timer2.Tick   += new EventHandler(timer2_Tick);
            timer2.Start();

            if (info.cnt == 0) // 처음 start 버튼 누를 때 0.5초 뒤 바로 카메라 동작
            {
                timer1.Interval = 500;
            }

            timer1.Tick += new EventHandler(timer1_Tick);
            timer1.Start();
        }