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(); }
private void Select_Beginner_Click(object sender, EventArgs e) { //Form1에서 Form2로 값을 전달하기위한 이벤트! info.difficulty = 1; Form2 form2 = new Form2(); // 새 폼 생성 form2.Passvalue = info.difficulty; // form2로 스테이지 보내줘야 함. form2.Owner = this; // 새 폼의 오너를 현재 폼으로 //form2.Show(); -> 이렇게 하면 Form1로 값이 반환 X form2.ShowDialog(); // 새 폼 보여주기 info.minutes = form2.Passvalue; // 전달 받음 if (info.minutes != 0) { M_Box.Show(); this.M_Box.Text = info.minutes + "분"; Confirm.Show(); // 선택화면 - 확인 } else { M_Box.Hide(); Confirm.Hide(); } }
//선택화면에서 뒤로 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(); }
//선택창 확인버튼 누르면 -> 영상인식 넘어가야함 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(); }