public double PredictPersonConfidenceFirst(Mat mat, int personId) { if (!_hasTrainedModel) { EnsureTrained(); } var faceEmb = detectionModule.GetFaceEmbedding(mat); if (faceEmb == null) { return(0); } var recognitionPersonModule = new FaceRecognitionModule(); var personalModelFileFilePath = String.Format("PersonalModels//First//{0}.trained", personId); if (File.Exists(personalModelFileFilePath)) { Console.WriteLine("[INFO] Second Model exists, loading"); recognitionPersonModule.Load(personalModelFileFilePath); } else { Console.WriteLine("[INFO] Model doesn't exist, started training"); Train(); } var prediction = recognitionPersonModule.Predict(faceEmb); return(prediction.Distance); }
public void EnsureTrained() { if (File.Exists(trainedModel)) { Console.WriteLine("[INFO] Model exists, loading"); recognitionModule = new FaceRecognitionModule(); // prevent crashes during repeatable load recognitionModule.Load(trainedModel); } else { Console.WriteLine("[INFO] Model doesn't exist, started training"); Train(); } if (File.Exists(trainedSecondModel)) { Console.WriteLine("[INFO] Second Model exists, loading"); recognitionModuleSecond.Load(trainedSecondModel); } else { Console.WriteLine("[INFO] Model doesn't exist, started training"); Train(); } _hasTrainedModel = true; }
public Surveillance(IVideoGrab videoGrab, ITrainDataDAL trainDataDAL, double confidence = 0.5) { this.videoGrab = videoGrab; this.trainDataDAL = trainDataDAL; this.confidence = confidence; faceEyeDetector = new FaceEyeDetector("Models\\haarcascade_frontalface_default.xml", "Models\\haarcascade_eye.xml"); recognitionModule = new FaceRecognitionModule(); recognitionModuleSecond = new FaceRecognitionModule(); detectionModule = new DetectionModule(faceEmbeddingsModel, faceEmbeddingsSecondModel, confidence); door = new DoorManager(); labelMap = new LabelMap(trainDataDAL.GetLabelMap()); videoGrab.ImageGrabbed += OnImageGrabbed; PersonDetected += OnPersonDetected; }
private static void RunOptions(FaceRecognitionParams facePars) { var images = GetImages(facePars.DataSet).ToList(); var detectionModule = new DetectionModule(facePars); var faces = detectionModule .GetFaces(images) .Select(f => (GetPersonName(f.Item1), f.Item2)) .ToList(); var labelMap = new LabelMap(faces.Select(f => f.Item1).Distinct()); var labeledFaces = faces.Select(f => (labelMap.Map[f.Item1], f.Item2)); var testImages = GetImages(facePars.TestSet).ToList(); var recognitionModule = new FaceRecognitionModule(); recognitionModule.Train(labeledFaces.ToList(), facePars.Embeddings); foreach (var(name, bytes) in testImages) { var testImg = detectionModule.ProcessImage(bytes); var prediction = recognitionModule.Predict(testImg); Console.WriteLine($"Img name : {name} Prediction: {labelMap.ReverseMap[prediction.Label]}, Dist : {prediction.Distance}"); } }