Ejemplo n.º 1
0
        public Form1()
        {
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; // 시작위치 중앙

            InitializeComponent();

            /*
             * //아두이노 보드가 연결된 포트의 이름
             * arduSerialPort.PortName = "COM3"; // 포트이름이 바꼈다면 수정 요망~!
             * //아두이노 보드 통신 속도
             * arduSerialPort.BaudRate = 9600;
             * //지정한 포트 열기
             * arduSerialPort.Open();
             */

            /*
             *      arduSerialPort.Write("3"); // 다리 올려준다!
             *      arduSerialPort.Write("0");//발끝 스트레칭!
             *      arduSerialPort.Write("1");//발끝 스트레칭 끝!
             *      arduSerialPort.Write("2");//다리 스트레칭 끝!
             */

            Back.Hide();            // 선택화면 - 뒤로가기 버튼
            Confirm.Hide();         // 선택화면 - 확인
            M_Box.Hide();           // 선택화면 - 분
            Select_Beginner.Hide(); // 선택화면 - 초보자 버튼
            Select_Master.Hide();   // 선택화면 - 숙련자 버튼
            pictureBox2.Hide();     // 선택화면 - 배경
            pictureBox3.Hide();
            pictureBox4.Hide();
        }
Ejemplo n.º 2
0
        private void Main_Start_Click(object sender, EventArgs e)
        {
            Main_Start.Hide();
            Main_Manual.Hide();
            Main_Exit.Hide();
            pictureBox1.Hide();

            pictureBox2.Show();
            Select_Beginner.Show();
            Select_Master.Show();
            Back.Show();
        }
Ejemplo n.º 3
0
        //선택화면에서 뒤로
        private void Back_Click(object sender, EventArgs e)
        {
            M_Box.Hide();
            Confirm.Hide();
            Select_Master.Hide();
            Select_Beginner.Hide();
            Back.Hide();
            pictureBox2.Hide();
            pictureBox3.Hide();
            pictureBox4.Hide();

            pictureBox1.Show();
            Main_Start.Show();
            Main_Manual.Show();
            Main_Exit.Show();
        }
Ejemplo n.º 4
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();
        }