//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;
        }
Exemple #2
0
        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;
        }