Сравнение живого лица с другими лицами, хранящимися в папке в C# winsform, с помощью emgu и opencv
я реализовал распознавание лиц и распознавание в форме Windows c# с помощью Emgu и OpenCV, он работает нормально, и когда нажимается кнопка сохранения, изображение сохраняется в папке, но когда я закрываю программу и повторно запускаю ее, она больше не распознает лицо, есть ли какой-нибудь способ заставить программу распознать лицо даже после завершения работы программы?
вот мой код:
using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using System.IO; namespace aiden { public partial class face_recognition : Form { MCvFont font = new MCvFont(FONT.CV_FONT_HERSHEY_TRIPLEX, 0.6, 0.6); HaarCascade faceDetected; Image<Bgr, byte> Frame; Capture camera; Image<Gray, byte> result; Image<Gray, byte> trainedFace = null; Image<Gray, byte> grayface = null; List<Image<Gray, byte>> trainingImages = new List<Image<Gray, byte>>(); List<string> labels = new List<string>(); List<string> users = new List<string>(); int count, numLabels, t; string name, names = null; public face_recognition() { InitializeComponent(); //for face detection faceDetected = new HaarCascade("haarcascade_frontalface_default.xml"); try { string labelsinf = File.ReadAllText(Application.StartupPath + "/Faces/Faces.txt"); string[] Labels = labelsinf.Split(','); numLabels = Convert.ToInt16(Labels[0]); count = numLabels; string facesLoad; for (int i = 1; i < numLabels + 1; i++) { facesLoad = "face" + i ; trainingImages.Add(new Image<Gray, byte>( (Application.StartupPath + "/Faces/Faces.txt")); labels.Add(labels[i]); } } catch (Exception ex) { MessageBox.Show("not detected"); } } private void start_Click(object sender, EventArgs e) { camera = new Capture(); camera.QueryFrame(); Application.Idle += new EventHandler(frameProcedure); } private void frameProcedure(object sender, EventArgs e) { users.Add(""); Frame = camera.QueryFrame().Resize(320, 240, INTER.CV_INTER_CUBIC) ; grayface = Frame.Convert<Gray, Byte>(); MCvAvgComp[][] facesDetectedNow=grayface.DetectHaarCascade(faceDetected,1.2,10,HAAR_DETECTION_TYPE.DO_CANNY_PRUNING,new Size(20,20)); foreach(MCvAvgComp f in facesDetectedNow[0]) { result=Frame.Copy(f.rect).Convert<Gray,Byte>().Resize(100,100,INTER.CV_INTER_CUBIC); Frame.Draw(f.rect, new Bgr(Color.Green), 3); if (trainingImages.ToArray().Length != 0) { MCvTermCriteria termCriteria = new MCvTermCriteria(count, 0.001); EigenObjectRecognizer recognizer = new EigenObjectRecognizer(trainingImages.ToArray(), labels.ToArray(),1500,ref termCriteria); name = recognizer.Recognize(result); Frame.Draw(name, ref font, new Point(f.rect.X - 2, f.rect.Y - 2), new Bgr(Color.Red)); } users.Add(""); } cameraBox.Image = Frame; names = ""; users.Clear(); } private void saveButton_Click(object sender, EventArgs e) { count = count + 1; grayface = camera.QueryGrayFrame().Resize(320, 240, INTER.CV_INTER_CUBIC); MCvAvgComp[][] detectedFaces = grayface.DetectHaarCascade(faceDetected, 1.2, 10, HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20)); foreach (MCvAvgComp f in detectedFaces[0]) { trainedFace = Frame.Copy(f.rect).Convert<Gray, byte>(); break; } trainedFace = result.Resize(100, 100, INTER.CV_INTER_CUBIC); trainingImages.Add(trainedFace); labels.Add(textBox1.Text); File.WriteAllText(Application.StartupPath+"/Faces/Faces.txt",trainingImages.ToArray().Length.ToString()+","); for (int i = 1; i < trainingImages.ToArray().Length + 1; i++) { trainingImages.ToArray()[i - 1].Save(Application.StartupPath+"/Faces/face"+i+".bmp"); File.AppendAllText(Application.StartupPath + "/Faces/Faces.txt", labels.ToArray()[i-1] + ","); } MessageBox.Show(textBox1.Text + "added"); }
Я хочу использовать распознавание лиц в своей регистрационной форме для моего исследовательского проекта. любая помощь будет оценена по достоинству.
Спасибо
Что я уже пробовал:
у меня не было никакой идеи о том, как сделать программу, чтобы запомнить использование людей, чтобы я мог использовать ее в качестве опции входа в систему
Richard MacCutchan
Вам нужно предоставить дополнительную информацию. Как это происходит, когда вы повторно запускаете приложение?
aiden12
в основном, когда программа обнаруживает мое лицо, я пишу свое имя в текстовом поле и сохраняю его, когда я выхожу из кадра и возвращаюсь и снова обнаруживаю свое лицо, она показывает имя, которое я ранее ввел, но когда закрываю и повторно запускаю программу, которая, похоже, не работает, она не показывает мне имя, под которым я ввел свое лицо раньше, она не распознает мое лицо, я уже несколько дней ищу решение или даже замену о том, как создать распознаватель лиц, я хочу использовать его в своей форме входа, чтобы пользователь мог получить доступ к какой-то части программа, если программа распознает лицо
Richard MacCutchan
Где вы загружаете сохраненное изображение и как вы сравниваете его с текущим захватом?
aiden12
вот с чем я имею дело, я хочу сравнить изображения, которые я сохранил в папке, с текущим живым изображением, и если они совпадают, я хочу, чтобы он сказал мне имя, под которым я сохранил изображение, я понятия не имею, как сравнить живое изображение с уже сохраненными изображениями
Richard MacCutchan
Извините, я тоже. Но это довольно распространенная проблема в наши дни, поэтому я бы использовал Google, чтобы найти образцы и учебные пособия по этой теме.