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 (double, string, int) Predict(Mat mat) { if (!_hasTrainedModel) { EnsureTrained(); } var faceEmb = detectionModule.GetFaceEmbedding(mat); if (faceEmb == null) { return(1, "Couldn't extract face embedding", -1); } var prediction = recognitionModule.Predict(faceEmb); return(prediction.Distance, labelMap.ReverseMap[prediction.Label], prediction.Label); }
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}"); } }