//public bool match(byte[] galleryTemplate) public bool match(ArrayList fingerList, byte[][] galleryTemplate) { //bool retcode = false; bool matched = true; bool matchMethod1 = false; if (matchMethod1) { _biometricClient.MatchingWithDetails = true; _biometricClient.FingersMatchingSpeed = NMatchingSpeed.High; _biometricClient.FingersQualityThreshold = 48; int threshold = 48; var template = new NFTemplate(); foreach (string finger in fingerList) { FingerListEnum f = (FingerListEnum)Enum.Parse(typeof(FingerListEnum), finger); if (galleryTemplate[(int)f] != null && (galleryTemplate[(int)f]).Length != 0) { var record = new NFRecord(galleryTemplate[(int)f]); if (record.Position == NFPosition.Unknown) record.Position = getFingerPositionByTag(f.ToString()); template.Records.Add((NFRecord)record.Clone()); } } if (template == null) throw new Exception("Gallery template is null"); using (var gallerySubject = NSubject.FromMemory(template.Save().ToArray())) { if (gallerySubject == null) throw new Exception("Gallery template is null"); var status = _biometricClient.Verify(_probeSubject, gallerySubject); if (status == NBiometricStatus.Ok) { foreach (var matchingResult in _probeSubject.MatchingResults) { //int fsc = matchingResult.MatchingDetails.FingersScore; foreach (var finger in matchingResult.MatchingDetails.Fingers) { if (threshold > finger.Score) { matched = false; break; } } if (!matched) break; } } else matched = false; } } else { var template = new NFTemplate(); foreach (string finger in fingerList) { FingerListEnum f = (FingerListEnum)Enum.Parse(typeof(FingerListEnum), finger); if (galleryTemplate[(int)f] != null && (galleryTemplate[(int)f]).Length != 0) { var record = new NFRecord(galleryTemplate[(int)f]); if (record.Position == NFPosition.Unknown) record.Position = getFingerPositionByTag(f.ToString()); template.Records.Add((NFRecord)record.Clone()); using (var subject = NSubject.FromMemory(template.Save().ToArray())) { var status = _biometricClient.Verify(_probeSubject, subject); if (status != NBiometricStatus.Ok) { matched = false; break; } } } else { matched = false; break; } } } //var template = new NFTemplate(); //foreach (string finger in _fingerList) //{ // FingerListEnum f = (FingerListEnum)Enum.Parse(typeof(FingerListEnum), finger); // if (galleryTemplate[(int)f] != null && (galleryTemplate[(int)f]).Length != 0) // { // var record = new NFRecord(galleryTemplate[(int)f]); // if (record.Position == NFPosition.Unknown) // record.Position = getFingerPositionByTag(f.ToString()); // template.Records.Add((NFRecord)record.Clone()); // //matched = matcher.match(buffer[(int)f]); // //if (matched) // //{ // // numOfMatches++; // //} // } //} //if (template == null) // throw new Exception("Gallery template is null"); //NSubject gallerySubject = NSubject.FromMemory(template.Save().ToArray()); //if (gallerySubject == null) // throw new Exception("Gallery template is null"); //var status = _biometricClient.Verify(_probeSubject, gallerySubject); //if (status == NBiometricStatus.Ok) // retcode = true; return matched; }
internal bool SaveBiometricsRecords(BiometricsRecord BiometricsRecord, string DestFileDir) { NFTemplate _NFTemplate = new NFTemplate(); //Create Folder for the User String userDir = DestFileDir + "\\" + BiometricsRecord.EnrollmentId + "\\"; if (!Directory.Exists(userDir)) { DirectoryInfo dir = Directory.CreateDirectory(userDir); } //Save User Signature if (BiometricsRecord.Signature != null) { BiometricsRecord.Signature.Save(userDir + "sign_image.jpg"); } //Save User Photo if (BiometricsRecord.Photograph != null) { BiometricsRecord.Photograph.Save(userDir + "photo_image.jpg"); File.WriteAllBytes(userDir + "photo_template.tem", BiometricsRecord.PhotographTemplate.ToArray()); } if (BiometricsRecord.FingerprintRecords.Count > 0) { //save Fingerprint foreach (var userFingerprint in BiometricsRecord.FingerprintRecords) { userFingerprint.FingerImage.Save(userDir + userFingerprint.FingerDescription + ".jpg"); File.WriteAllBytes(userDir + userFingerprint.FingerDescription + ".tem", userFingerprint.FingerTemplate.ToArray()); //Add FingerTemplate to NFTemplate if (userFingerprint.FingerRecord != null) { _NFTemplate.Records.Add(userFingerprint.FingerRecord); } else { var wsq = new NBuffer(userFingerprint.FingerWsq); //var image = NImage.FromMemory(wsq, NImageFormat.Wsq).ToBitmap(); //NFinger finger, NBuffer fingerTemplate using (var biometricClient = new NBiometricClient()) using (var subject = new NSubject()) using (var finger = new NFinger()) { //Read finger image from enrollment and add it to NFinger object finger.Image = NImage.FromMemory(wsq, NImageFormat.Wsq); //add NFinger object to NSubject subject.Fingers.Add(finger); ////Set finger template size (recommended, for enroll to database, is large) (optional) //biometricClient.FingersTemplateSize = NTemplateSize.Large; //Create template from added finger image var status = biometricClient.CreateTemplate(subject); if (status == NBiometricStatus.Ok) { userFingerprint.FingerRecord = finger.Objects[0].Template; _NFTemplate.Records.Add(finger.Objects[0].Template); } } //NLicense.ReleaseComponents("Biometrics.FingerExtraction"); } } //Save Grouped FingerTemplates var ms = new NMemoryStream(); _NFTemplate.Save(ms); BiometricsRecord.FingerTemplates = ms.ToArray(); File.WriteAllBytes(userDir + "fingers_template.tem", BiometricsRecord.FingerTemplates); } //Save User Record as Serilalised Binary Data BinarySerialization.WriteToBinaryFile(userDir + "UserRecord.crims", BiometricsRecord); //If the code runs to this point without Failure, We are good return true; }