void FrameGrabber(object sender, EventArgs e) { label3.Text = "0"; //label4.Text = ""; NamePersons.Add(""); //O anki camera boyutları currentFrame = grabber.QueryFrame().Resize(320, 240, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //Gri ye çevirme gray = currentFrame.Convert <Gray, Byte>(); //Yüz Tanıma MCvAvgComp[][] facesDetected = gray.DetectHaarCascade( face, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(50, 50)); //Algılanan her öğe için yapılacak işlemler foreach (MCvAvgComp f in facesDetected[0]) { t = t + 1; result = currentFrame.Copy(f.rect).Convert <Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //Tespit edilen yüzün kırmızı kare içerisine alınması currentFrame.Draw(f.rect, new Bgr(Color.Red), 2); if (trainingImages.ToArray().Length != 0) { //Yüz Tanıma için TermCriteria yaratma MCvTermCriteria termCrit = new MCvTermCriteria(ContTrain, 0.001); //Yüz tanıyıcısı FaceRecognizer recognizer = new FaceRecognizer( trainingImages.ToArray(), labels.ToArray(), 3000, ref termCrit); name = recognizer.Recognize(result); //Cercevenin üzerindeki yazı (Kişi Tanıyıcı) currentFrame.Draw(name, ref font, new Point(f.rect.X - 5, f.rect.Y - 5), new Bgr(Color.LightGreen)); } NamePersons[t - 1] = name; NamePersons.Add(""); //Camera da algılanan yüz sayısı label3.Text = facesDetected[0].Length.ToString(); } t = 0; //Tanımlanan kişilerin isimlerinin birleştirilmesi for (int nnn = 0; nnn < facesDetected[0].Length; nnn++) { names = names + NamePersons[nnn] + ", "; } //Tanınan Yüzü gösterme imageBoxFrameGrabber.Image = currentFrame; label4.Text = names; names = ""; //İsim listesini temizleme NamePersons.Clear(); }
private void FrameGrabber(object sender, EventArgs e) { //lấy hình ảnh hiện tại của camera currentFrame = grabber.QueryFrame().Resize(imageBoxFrameGrabber.Width, imageBoxFrameGrabber.Height, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); //chuyển thành Grayscale gray = currentFrame.Convert <Gray, Byte>(); //phát hiện các khuôn mặt trong camera MCvAvgComp[][] facesDetected = gray.DetectHaarCascade( face, 1.2, 10, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); Face detectedFace = null; bool flag = false; //với mỗi khuôn mặt được phát hiện, vẽ khung hình vuông màu đỏ foreach (MCvAvgComp f in facesDetected[0]) { result = currentFrame.Copy(f.rect).Convert <Gray, byte>().Resize(Constants.DETECTED_FRAME_WIDTH, Constants.DETECTED_FRAME_HEIGHT, Emgu.CV.CvEnum.INTER.CV_INTER_CUBIC); // vẽ khung phát hiện khuôn mặt currentFrame.Draw(f.rect, new Bgr(Color.Red), 2); if (trainingImages.ToArray().Length != 0) { //TermCriteria for face recognition with numbers of trained images like maxIteration MCvTermCriteria termCrit = new MCvTermCriteria(1, 0.001); //khởi tạo đối tượng để nhận diện khuôn mặt FaceRecognizer recognizer = new FaceRecognizer( trainingImages.ToArray(), // labels.ToArray(), trainedFaces, 3000, ref termCrit); //nhận diện khuôn mặt Face recognizedFace = recognizer.RecognizeFaces(result); if (recognizedFace != null) { //chỉ hiển this thông tin của khuôn mặt đầu tiên đc nhận diện if (!flag) { detectedFace = recognizedFace; flag = true; } //vẽ tên của khuôn mặt được nhận diện currentFrame.Draw(recognizedFace.Name, ref font, new Point(f.rect.X - 2, f.rect.Y - 2), new Bgr(Color.LightGreen)); } } } // gán lại frame hiện tại cho camera imageBoxFrameGrabber.Image = currentFrame; if (detectedFace != null) { // hiển thị thông tin của khuôn mặt đầu tiên đc nhận diện lName.Text = detectedFace.Name; lPhone.Text = detectedFace.Phone; lEmail.Text = detectedFace.Email; lAge.Text = Utility.GetAge(detectedFace.Dob).ToString(); pbImage.BackgroundImage = detectedFace.Img.ToBitmap(); } }