Fingerprint enrollment questions

General information about Neurotechnology and its software

APIs differences betwn FingerExtractor & FingerFastExtractor

Postby Amitm » Aug 14, 2014 16:58

Hi All:

I have been using Fingerprint Extractor but recently obtained a license for Fast Fingerprint Extractor. I was wondering if there is any API difference between the two components. Also is there any sample code for Fast Fingerprint Extractor..

Thanks,

Amit

Admin: merged to "Fingerprint enrollment questions"
Amitm
 
Posts: 1
Joined: Aug 14, 2014 16:48

Re: APIs differences betwn FingerExtractor & FingerFastExtra

Postby Martynas » Aug 21, 2014 11:14

Amitm wrote:Hi All:

I have been using Fingerprint Extractor but recently obtained a license for Fast Fingerprint Extractor. I was wondering if there is any API difference between the two components. Also is there any sample code for Fast Fingerprint Extractor..

Thanks,

Amit

Hello,

there are no API differences. If you want to use the Fast Finger Extractor license in your application, then you need to obtain "Biometrcis.FingerExtractionFast" component.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Finger Identification takes too much time

Postby limetech » Oct 06, 2014 16:41

Hi everyone.

I am new to this forum.

I am having trouble with Verifinger SDK Finger Identification.

I have purchased the Verifinger Standard SDK and I have successfully enrolled fingerprints from users using the Nitgen Hamster DX II.

I have used the code within the "TutorialsBiometricsCSBiometrics.vs2012.sln" solution, more specifically the "EnrollFingerFromScannerCS.vs2012" project.

My problem is that when I try to use the code of the "IdentifyFingerCS.vs2012" in the same solution, the identification of the user takes too much time (for 50 users, about a minute).

The matching threshold is set to 48 and the matching speed is set to High.

What could be a possible solution to this problem as I have seen that the identification should not last more than some seconds?

Thank you in advance for your kind attention to my post.

Admin: merged to "Fingerprint enrollment questions"
limetech
 
Posts: 1
Joined: Oct 06, 2014 16:30

Re: Finger Identification takes too much time

Postby Martynas » Oct 10, 2014 12:37

limetech wrote:Hi everyone.

I am new to this forum.

I am having trouble with Verifinger SDK Finger Identification.

I have purchased the Verifinger Standard SDK and I have successfully enrolled fingerprints from users using the Nitgen Hamster DX II.

I have used the code within the "TutorialsBiometricsCSBiometrics.vs2012.sln" solution, more specifically the "EnrollFingerFromScannerCS.vs2012" project.

My problem is that when I try to use the code of the "IdentifyFingerCS.vs2012" in the same solution, the identification of the user takes too much time (for 50 users, about a minute).

The matching threshold is set to 48 and the matching speed is set to High.

What could be a possible solution to this problem as I have seen that the identification should not last more than some seconds?

Thank you in advance for your kind attention to my post.

Hello,

answer was sent by email. The issue was related to the fact that the measurement of the identification time was done together with the extraction times. As teh Face Extractor license was used, then the extraction of one face image was done in 1.34 seconds, what leads to situation that 50 images are extracted approximately in one minute.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Minutiae Verifinger 4.2 in Megamatcher 3.1

Postby tekofer » Nov 24, 2014 13:34

as I can get the same minutiae generated in VeriFinger 4.2 but using MegaMatcher 3.1?

Admin: merged to "Fingerprint enrollment questions"
tekofer
 
Posts: 13
Joined: Mar 31, 2014 19:56

Re: Minutiae Verifinger 4.2 in Megamatcher 3.1

Postby Martynas » Nov 24, 2014 13:37

tekofer wrote:as I can get the same minutiae generated in VeriFinger 4.2 but using MegaMatcher 3.1?

Hello,

could you please explain what do you mean?
If you mean if it is possible to use VF4.2 template sin the MM 3.1, then answer is yes, it is possible. You will need to read VF 4.2 template as new NFRecord in MM 3.1 and save it.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Enrolling multiple finger prints on one call

Postby kumaranvram » Nov 26, 2014 10:39

Hi,

I took this code from the sample app that came with the SDK trail.

Code: Select all
//Creating a Subject
private NSubject createSubject(NTemplate template, String id) throws IOException {
        NSubject subject = new NSubject();
        subject.setTemplate(template);
        subject.setId(id);
        return subject;
}

//Enrolling a subject

this.candidateSubject = createSubject(template, id);
NBiometricTask enrollTask = mBiometricClient.createTask(EnumSet.of(NBiometricOperation.ENROLL), this.candidateSubject);
mBiometricClient.performTask(enrollTask, NBiometricOperation.ENROLL, completionHandler);



This helps me enroll a one particular fingerprint to the app. Is there a way I can enroll multiple finger prints with one enroll operation itself, or should I be iterating through multiple finger prints to enroll each one of those one by one?

Thanks for the help!

-Kumaran

Admin: merged to "Fingerprint enrollment questions"
kumaranvram
 
Posts: 7
Joined: Nov 11, 2014 05:39

Re: Enrolling multiple finger prints on one call

Postby Martynas » Nov 27, 2014 11:04

kumaranvram wrote:Hi,

I took this code from the sample app that came with the SDK trail.

Code: Select all
//Creating a Subject
private NSubject createSubject(NTemplate template, String id) throws IOException {
        NSubject subject = new NSubject();
        subject.setTemplate(template);
        subject.setId(id);
        return subject;
}

//Enrolling a subject

this.candidateSubject = createSubject(template, id);
NBiometricTask enrollTask = mBiometricClient.createTask(EnumSet.of(NBiometricOperation.ENROLL), this.candidateSubject);
mBiometricClient.performTask(enrollTask, NBiometricOperation.ENROLL, completionHandler);



This helps me enroll a one particular fingerprint to the app. Is there a way I can enroll multiple finger prints with one enroll operation itself, or should I be iterating through multiple finger prints to enroll each one of those one by one?

Thanks for the help!

-Kumaran

Hi,

do you mean multiple fingerprints of the same person, or you mean enrolling a multiple fingerprints of different persons?
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Enrolling multiple finger prints on one call

Postby kumaranvram » Nov 27, 2014 11:28

Multiple finger prints of multiple people.
kumaranvram
 
Posts: 7
Joined: Nov 11, 2014 05:39

Re: Enrolling multiple finger prints on one call

Postby Martynas » Dec 01, 2014 09:38

kumaranvram wrote:Multiple finger prints of multiple people.

Hello,

you can create several NSubjects (for different persons) and add them to enrollment task. Then execute this task.

Code: Select all
NBiometricTask enrollTask = mBiometricClient.createTask(EnumSet.of(NBiometricOperation.ENROLL), null);
enrollTask.Subjects.Add(nsubject); //repeat this line several times for different NSubject adding;
mBiometricClient.performTask(enrollTask, NBiometricOperation.ENROLL, completionHandler);
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Fingerprint Quality Check

Postby Vidya Sagar Reddy » Dec 10, 2014 07:19

Can you please let me know, how to check the Quality of the Fingerprint captured using the TazTag android tablet, using the mega matcher android SDK.

As we are getting the very fe minutia error while creating template for the low quality images.

Admin: merged to "Fingerprint enrollment questions"
Vidya Sagar Reddy
 
Posts: 5
Joined: Dec 10, 2014 06:42

Re: Fingerprint Quality Check

Postby Martynas » Dec 10, 2014 12:29

Vidya Sagar Reddy wrote:Can you please let me know, how to check the Quality of the Fingerprint captured using the TazTag android tablet, using the mega matcher android SDK.

As we are getting the very fe minutia error while creating template for the low quality images.

Hi,

The SDK provides the NFIQ library, which is enabled by the FingerClient license, and which allows to get the finger image quality in NIST values (from 1 to 5). We recommend to use images, which quality is 1 or 2.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Fingerprint Quality Check

Postby Vidya Sagar Reddy » Dec 10, 2014 12:38

We are using the 4.5 SDK, is this NFIQ libary and method to check the quality exists in this version?

We tested using the method getNFIQQuality which is there in NFAttributes class

but it is returning byte, whatever image we pass it is returning the value 255, which method will return the NIST quality values (from 1 to 5)

Can u please suggest us the method which returns the NIST quality value (from 1 to 5) in 4.5 version SDK.
Vidya Sagar Reddy
 
Posts: 5
Joined: Dec 10, 2014 06:42

Re: Fingerprint Quality Check

Postby Martynas » Dec 11, 2014 09:48

Vidya Sagar Reddy wrote:We are using the 4.5 SDK, is this NFIQ libary and method to check the quality exists in this version?

We tested using the method getNFIQQuality which is there in NFAttributes class

but it is returning byte, whatever image we pass it is returning the value 255, which method will return the NIST quality values (from 1 to 5)

Can u please suggest us the method which returns the NIST quality value (from 1 to 5) in 4.5 version SDK.

check the tutorial EvaluateFingerQuality
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Fingerprint Quality Check

Postby arslan1 » Dec 18, 2014 11:39

Can you please let me know, how to check the Quality of the Fingerprint captured using the TazTag android tablet, using the mega matcher android SDK.

As we are getting the very fe minutia error while creating template for the low quality images

_________________
arslan1
arslan1
 
Posts: 2
Joined: Dec 18, 2014 11:37

Re: Fingerprint Quality Check

Postby Martynas » Dec 19, 2014 08:34

arslan1 wrote:Can you please let me know, how to check the Quality of the Fingerprint captured using the TazTag android tablet, using the mega matcher android SDK.

As we are getting the very fe minutia error while creating template for the low quality images

Hi,

check tutorial EvaluateFingerQuality. It shows how to use the fingerprint image to get the quality of it.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Fingerprint enrollment questions

Postby kumaranvram » Dec 30, 2014 11:31

Hi,

I get the following error while my Android app tries to capture the fingerprint:
Code: Select all
12-30 16:54:49.116    6003-6847/com.muzima.biometric E/Core/ErrorSuppressed﹕ Libusb error
    External error: 536870929
            at ftrScanOpenDeviceOnInterface


The Code is:
Code: Select all
        String TAG = "FingerPrintIdentification";
        mBiometricClient = new NBiometricClient();
        NSubject subject = new NSubject();
        NFinger finger = new NFinger();

        mBiometricClient.setUseDeviceManager(true);
        NDeviceManager deviceManager = mBiometricClient.getDeviceManager();
        deviceManager.setDeviceTypes(EnumSet.of(NDeviceType.FINGER_SCANNER));
        mBiometricClient.initialize();

        NDeviceManager.DeviceCollection devices = deviceManager.getDevices();
        if (devices.size() > 0) {
            Log.d(TAG, "Found %d fingerprint scanner\n", devices.size());
        } else {
            Log.d(TAG, "Device unavailable");
            return;
        }


The app does not recognize the device and logs "Device unavailable".

I am sure that the finger print device is working; I tested it with the FingerprintDemoApplication for Mac and it works when connected to my machine. I use a Futronic FS80 fingerprint scanner device.

Any idea how to solve this error?

Thanks,
Kumaran
kumaranvram
 
Posts: 7
Joined: Nov 11, 2014 05:39

Re: Fingerprint enrollment questions

Postby vaidasz » Dec 31, 2014 13:07

kumaranvram wrote:Hi,

I get the following error while my Android app tries to capture the fingerprint:
Code: Select all
12-30 16:54:49.116    6003-6847/com.muzima.biometric E/Core/ErrorSuppressed﹕ Libusb error
    External error: 536870929
            at ftrScanOpenDeviceOnInterface


The Code is:
Code: Select all
        String TAG = "FingerPrintIdentification";
        mBiometricClient = new NBiometricClient();
        NSubject subject = new NSubject();
        NFinger finger = new NFinger();

        mBiometricClient.setUseDeviceManager(true);
        NDeviceManager deviceManager = mBiometricClient.getDeviceManager();
        deviceManager.setDeviceTypes(EnumSet.of(NDeviceType.FINGER_SCANNER));
        mBiometricClient.initialize();

        NDeviceManager.DeviceCollection devices = deviceManager.getDevices();
        if (devices.size() > 0) {
            Log.d(TAG, "Found %d fingerprint scanner\n", devices.size());
        } else {
            Log.d(TAG, "Device unavailable");
            return;
        }


The app does not recognize the device and logs "Device unavailable".

I am sure that the finger print device is working; I tested it with the FingerprintDemoApplication for Mac and it works when connected to my machine. I use a Futronic FS80 fingerprint scanner device.

Any idea how to solve this error?

Thanks,
Kumaran


Hello Kumaran,

Do you get the same issue using (unmodified) VeriFinger sample provided with SDK (comes with multibiometric-sample.apk)?
Send the issue description to support@neurotechnology.com. Also provide the full log that produces the issue. Let us know SDK revision number that you are using (it could be found in a text file of SDK root folder).
Vaidas Z
Neurotechnology
vaidasz
Neurotechnology
 
Posts: 559
Joined: Apr 30, 2010 06:57
Location: Vilnius, Lithuania

Re: Fingerprint enrollment questions

Postby kumaranvram » Jan 02, 2015 10:24

It is working fine on the Sample app that came along with the SDK.
But I am not sure why it is not working on my app.

Product revision number: 123025
kumaranvram
 
Posts: 7
Joined: Nov 11, 2014 05:39

Re: Fingerprint enrollment questions

Postby vaidasz » Jan 02, 2015 15:25

kumaranvram wrote:It is working fine on the Sample app that came along with the SDK.
But I am not sure why it is not working on my app.

Product revision number: 123025


Hello,

Please send the information I asked in previous post to support@neurotechnology.com.
Vaidas Z
Neurotechnology
vaidasz
Neurotechnology
 
Posts: 559
Joined: Apr 30, 2010 06:57
Location: Vilnius, Lithuania

Re: Fingerprint enrollment questions

Postby kumaranvram » Jan 05, 2015 07:09

Hi,

I will send the information to the specified mail address.

Since morning today, the app is not able to get the license for VeriFinger. I tried with the Sample App that comes along with the SDK as well. It is not able to obtain the license only for VeriFinger. The sample apps like VeriLook and VeriSpeak are able to obtain the license.

Could you please help?

Thanks!
kumaranvram
 
Posts: 7
Joined: Nov 11, 2014 05:39

Re: Fingerprint enrollment questions

Postby Vytautas » Jan 05, 2015 08:46

kumaranvram wrote:Hi,

I will send the information to the specified mail address.

Since morning today, the app is not able to get the license for VeriFinger. I tried with the Sample App that comes along with the SDK as well. It is not able to obtain the license only for VeriFinger. The sample apps like VeriLook and VeriSpeak are able to obtain the license.

Could you please help?

Thanks!


Hello,

concerning license issues, please send email to support@neurotechnology.com and include details like diagnostic report, licenses used, hardware.id, revision number of SDK, trial/non-trial.
Vytautas P
Neurotechnology
Vytautas
Neurotechnology
 
Posts: 25
Joined: Apr 23, 2013 13:04

ENROLL WITH DUPLICATE CHECK

Postby sumit » Jan 06, 2015 09:14

I"m currently using Neurotec_Biometric_5_0_SDK_Trial.
I am trying to enroll finger print with duplicate check using NServer.
I am using java samples provided in SDK.

Enrollment on Nserver is working if ENROLL WITH DUPLICATE CHECK flag is false. But if i try to enroll with ENROLL WITH DUPLICATE CHECK flag true; enrollment is failing with error "Invalid operations".

Complete java stack strace is as follows :

Code: Select all
 java.lang.RuntimeException: One or more errors occurred
   at com.neurotec.lang.NResult.checkAll(NResult.java:323)
   at com.neurotec.lang.NResult.raiseError(NResult.java:333)
   at com.neurotec.lang.NResult.check(NResult.java:234)
   at com.neurotec.biometrics.NBiometricEngine.enroll(NBiometricEngine.java:265)
   at com.neurotec.tutorials.biometrics.EnrollToSQLiteDatabase.main(EnrollToSQLiteDatabase.java:80)
Caused by: com.neurotec.util.concurrent.NAggregateExecutionException: One or more errors occurred
   at com.neurotec.util.concurrent.ConcurrentUtilErrorCreator.create(ConcurrentUtilErrorCreator.java:17)
   at com.neurotec.lang.ChainedErrorCreator.create(ChainedErrorCreator.java:22)
   at com.neurotec.lang.NError.get(NError.java:174)
   at com.neurotec.lang.NError.get(NError.java:191)
   at com.neurotec.lang.NError.getLast(NError.java:205)
   at com.neurotec.lang.NResult.checkUnchecked(NResult.java:245)
   ... 4 more
Caused by: com.neurotec.lang.NIllegalArgumentException: Invalid operations
   at com.neurotec.lang.RuntimeErrorCreator.create(RuntimeErrorCreator.java:22)
   at com.neurotec.lang.ChainedErrorCreator.create(ChainedErrorCreator.java:22)
   at com.neurotec.lang.NError.get(NError.java:174)
   at com.neurotec.lang.NError.get(NError.java:168)
   ... 7 more
 


Please let me know that ENROLL WITH DUPLICATE CHECK option is supported with NServer or not.

Thanks
Sumit

Admin: merged to "Fingerprint enrollment questions"
sumit
 
Posts: 3
Joined: Jan 06, 2015 07:30

Re: ENROLL WITH DUPLICATE CHECK

Postby Martynas » Jan 08, 2015 12:21

sumit wrote:I"m currently using Neurotec_Biometric_5_0_SDK_Trial.
I am trying to enroll finger print with duplicate check using NServer.
I am using java samples provided in SDK.

Enrollment on Nserver is working if ENROLL WITH DUPLICATE CHECK flag is false. But if i try to enroll with ENROLL WITH DUPLICATE CHECK flag true; enrollment is failing with error "Invalid operations".

Complete java stack strace is as follows :

Code: Select all
 java.lang.RuntimeException: One or more errors occurred
   at com.neurotec.lang.NResult.checkAll(NResult.java:323)
   at com.neurotec.lang.NResult.raiseError(NResult.java:333)
   at com.neurotec.lang.NResult.check(NResult.java:234)
   at com.neurotec.biometrics.NBiometricEngine.enroll(NBiometricEngine.java:265)
   at com.neurotec.tutorials.biometrics.EnrollToSQLiteDatabase.main(EnrollToSQLiteDatabase.java:80)
Caused by: com.neurotec.util.concurrent.NAggregateExecutionException: One or more errors occurred
   at com.neurotec.util.concurrent.ConcurrentUtilErrorCreator.create(ConcurrentUtilErrorCreator.java:17)
   at com.neurotec.lang.ChainedErrorCreator.create(ChainedErrorCreator.java:22)
   at com.neurotec.lang.NError.get(NError.java:174)
   at com.neurotec.lang.NError.get(NError.java:191)
   at com.neurotec.lang.NError.getLast(NError.java:205)
   at com.neurotec.lang.NResult.checkUnchecked(NResult.java:245)
   ... 4 more
Caused by: com.neurotec.lang.NIllegalArgumentException: Invalid operations
   at com.neurotec.lang.RuntimeErrorCreator.create(RuntimeErrorCreator.java:22)
   at com.neurotec.lang.ChainedErrorCreator.create(ChainedErrorCreator.java:22)
   at com.neurotec.lang.NError.get(NError.java:174)
   at com.neurotec.lang.NError.get(NError.java:168)
   ... 7 more
 


Please let me know that ENROLL WITH DUPLICATE CHECK option is supported with NServer or not.

Thanks
Sumit

Hello,

NServer/NClusterServer/MegaMatcher Accelerator does not support "Enroll with duplicate check" functionality. You need to make identification first of all and if no matches are found enroll a new record.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: ENROLL WITH DUPLICATE CHECK

Postby sumit » Jan 09, 2015 04:42

Martynas wrote:Hello,

NServer/NClusterServer/MegaMatcher Accelerator does not support "Enroll with duplicate check" functionality. You need to make identification first of all and if no matches are found enroll a new record.

Hi Martynas,
Thanks for the quick reply.
We will proceed as you suggested; Identification first.

Thanks
Sumit
sumit
 
Posts: 3
Joined: Jan 06, 2015 07:30

Re: Fingerprint enrollment questions

Postby ayushau » Jan 26, 2015 12:14

Hi,

I would like to know how to convert neurotech proprietary fingerprint template (NBuffer) to ISO template that can be used by another vendor.
ayushau
 
Posts: 1
Joined: Jan 26, 2015 12:06

Re: Fingerprint enrollment questions

Postby Martynas » Jan 27, 2015 08:36

ayushau wrote:Hi,

I would like to know how to convert neurotech proprietary fingerprint template (NBuffer) to ISO template that can be used by another vendor.

Hello,

please check tutorial NTemplateToFMRecord included in SDKs "tutorials" folder.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Minutiae Verifinger 4.2 in Megamatcher 3.1

Postby tekofer » Feb 16, 2015 15:08

Hi good morning,

Martynas, from the attached image I generate the minutiae of VF4.2 but using MM3.1?
Or starting a .jpg image I can generate the minutiae of VF4.2 but using MM3.1?

thx
tekofer
 
Posts: 13
Joined: Mar 31, 2014 19:56

Re: Minutiae Verifinger 4.2 in Megamatcher 3.1

Postby Martynas » Feb 17, 2015 08:31

tekofer wrote:Hi good morning,

Martynas, from the attached image I generate the minutiae of VF4.2 but using MM3.1?
Or starting a .jpg image I can generate the minutiae of VF4.2 but using MM3.1?

thx

Hello,

yes, it is possible to generate VF4.2 template by using MM3.1. You need to use NFRecord.SaveV1() if you are using a .Net.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

NFingerView and multiple finger enrollment

Postby efinlaw » Apr 14, 2015 21:35

I am developing a simple authentication system using the Verifinger SDK. Currently, I am using the C# SimpleFingersSample as a reference. More specifically, the EnrollFromScanner code. I am trying to figure out how the finger view functionality works, as well as creating a multiple finger template using the existing code given. Below is the code given to begin the task of capturing one finger with the live view enabled.

Code: Select all
private void ScanButtonClick(object sender, EventArgs e)
      {
         if (_biometricClient.FingerScanner == null)
         {
            MessageBox.Show(@"Please select a scanner from the list.");
         }
         else
         {
            EnableControls(true);
            lblQuality.Text = String.Empty;

            // Create a finger
            _subjectFinger = new NFinger();

            // Set Manual capturing mode if not automatic selected
            if (!chbScanAutomatically.Checked)
            {
               _subjectFinger.CaptureOptions = NBiometricCaptureOptions.Manual;
                   
            }

            // Add finger to the subject and fingerView
            _subject = new NSubject();
            _subject.Fingers.Add(_subjectFinger);
            _subjectFinger.PropertyChanged += OnAttributesPropertyChanged;
            fingerView.Finger = _subjectFinger;
            fingerView.ShownImage = ShownImage.Original;
               

            // Begin capturing
            _biometricClient.FingersReturnProcessedImage = true;
            NBiometricTask task = _biometricClient.CreateTask(NBiometricOperations.Capture | NBiometricOperations.CreateTemplate, _subject);
            _biometricClient.BeginPerformTask(task, OnEnrollCompleted, null);
            }
      }


And here is what I have so far. It captures multiple fingers but I"m confused on how to redraw fingerView after each finger is captured. Also, I"m very unfamiliar with this SDK so bare with me please. I"m pretty sure this isn"t even the correct method to handle this operation, so I guess what my real problem is that I don"t know where the capture task is even happening. Any help is appreciated.
*Note* volleyNumber is an integer that is incremented each time the force capture is called.
Code: Select all
private void ScanButtonClick(object sender, EventArgs e)
        {
            if (_biometricClient.FingerScanner == null)
            {
                MessageBox.Show(@"Scanner not connected");
            }
            else
            {
                EnableControls(true);
                //lblQuality.Text = String.Empty;

                // Create fingers
                LeftThumb = new NFinger();
                RightThumb = new NFinger();
                LeftIndex = new NFinger();
                RightIndex = new NFinger();
                // Set Manual capturing mode
                LeftThumb.CaptureOptions = NBiometricCaptureOptions.Manual;
                RightThumb.CaptureOptions = NBiometricCaptureOptions.Manual;
                LeftIndex.CaptureOptions = NBiometricCaptureOptions.Manual;
                RightIndex.CaptureOptions = NBiometricCaptureOptions.Manual;
               
                // Add fingers to the subject and fingerView
                _subject = new NSubject();
                _subject.Fingers.Add(LeftThumb);
                _subject.Fingers.Add(RightThumb);
                _subject.Fingers.Add(LeftIndex);
                _subject.Fingers.Add(RightIndex);
                //_subjectFinger.PropertyChanged += OnAttributesPropertyChanged;
                if (volleyNumber == 0)
                {
                    fingerView.Finger = LeftThumb;
                    fingerView.ShownImage = ShownImage.Original;
                }
                else if (volleyNumber == 1)
                {
                    fingerView.Refresh();
                    fingerView.Finger = RightThumb;
                    fingerView.ShownImage = ShownImage.Original;
                }
                else if (volleyNumber == 2)
                {
                    fingerView.Refresh();
                    fingerView.Finger = LeftIndex;
                    fingerView.ShownImage = ShownImage.Original;
                }
                else if (volleyNumber == 3)
                {
                    fingerView.Refresh();
                    fingerView.Finger = RightIndex;
                    fingerView.ShownImage = ShownImage.Original;
                }
           
                // Begin capturing
                //_biometricClient.FingersReturnProcessedImage = true;
                NBiometricTask task = _biometricClient.CreateTask(NBiometricOperations.Capture | NBiometricOperations.CreateTemplate, _subject);
                _biometricClient.BeginPerformTask(task, OnEnrollCompleted, null);
            }
        }

Admin: merged to "Fingerprint enrollment questions"
efinlaw
 
Posts: 2
Joined: Apr 14, 2015 21:01

Re: NFingerView and multiple finger enrollment

Postby Martynas » Apr 15, 2015 11:48

efinlaw wrote:I am developing a simple authentication system using the Verifinger SDK. Currently, I am using the C# SimpleFingersSample as a reference. More specifically, the EnrollFromScanner code. I am trying to figure out how the finger view functionality works, as well as creating a multiple finger template using the existing code given. Below is the code given to begin the task of capturing one finger with the live view enabled.

Code: Select all
private void ScanButtonClick(object sender, EventArgs e)
      {
         if (_biometricClient.FingerScanner == null)
         {
            MessageBox.Show(@"Please select a scanner from the list.");
         }
         else
         {
            EnableControls(true);
            lblQuality.Text = String.Empty;

            // Create a finger
            _subjectFinger = new NFinger();

            // Set Manual capturing mode if not automatic selected
            if (!chbScanAutomatically.Checked)
            {
               _subjectFinger.CaptureOptions = NBiometricCaptureOptions.Manual;
                   
            }

            // Add finger to the subject and fingerView
            _subject = new NSubject();
            _subject.Fingers.Add(_subjectFinger);
            _subjectFinger.PropertyChanged += OnAttributesPropertyChanged;
            fingerView.Finger = _subjectFinger;
            fingerView.ShownImage = ShownImage.Original;
               

            // Begin capturing
            _biometricClient.FingersReturnProcessedImage = true;
            NBiometricTask task = _biometricClient.CreateTask(NBiometricOperations.Capture | NBiometricOperations.CreateTemplate, _subject);
            _biometricClient.BeginPerformTask(task, OnEnrollCompleted, null);
            }
      }


And here is what I have so far. It captures multiple fingers but I"m confused on how to redraw fingerView after each finger is captured. Also, I"m very unfamiliar with this SDK so bare with me please. I"m pretty sure this isn"t even the correct method to handle this operation, so I guess what my real problem is that I don"t know where the capture task is even happening. Any help is appreciated.
*Note* volleyNumber is an integer that is incremented each time the force capture is called.
Code: Select all
private void ScanButtonClick(object sender, EventArgs e)
        {
            if (_biometricClient.FingerScanner == null)
            {
                MessageBox.Show(@"Scanner not connected");
            }
            else
            {
                EnableControls(true);
                //lblQuality.Text = String.Empty;

                // Create fingers
                LeftThumb = new NFinger();
                RightThumb = new NFinger();
                LeftIndex = new NFinger();
                RightIndex = new NFinger();
                // Set Manual capturing mode
                LeftThumb.CaptureOptions = NBiometricCaptureOptions.Manual;
                RightThumb.CaptureOptions = NBiometricCaptureOptions.Manual;
                LeftIndex.CaptureOptions = NBiometricCaptureOptions.Manual;
                RightIndex.CaptureOptions = NBiometricCaptureOptions.Manual;
               
                // Add fingers to the subject and fingerView
                _subject = new NSubject();
                _subject.Fingers.Add(LeftThumb);
                _subject.Fingers.Add(RightThumb);
                _subject.Fingers.Add(LeftIndex);
                _subject.Fingers.Add(RightIndex);
                //_subjectFinger.PropertyChanged += OnAttributesPropertyChanged;
                if (volleyNumber == 0)
                {
                    fingerView.Finger = LeftThumb;
                    fingerView.ShownImage = ShownImage.Original;
                }
                else if (volleyNumber == 1)
                {
                    fingerView.Refresh();
                    fingerView.Finger = RightThumb;
                    fingerView.ShownImage = ShownImage.Original;
                }
                else if (volleyNumber == 2)
                {
                    fingerView.Refresh();
                    fingerView.Finger = LeftIndex;
                    fingerView.ShownImage = ShownImage.Original;
                }
                else if (volleyNumber == 3)
                {
                    fingerView.Refresh();
                    fingerView.Finger = RightIndex;
                    fingerView.ShownImage = ShownImage.Original;
                }
           
                // Begin capturing
                //_biometricClient.FingersReturnProcessedImage = true;
                NBiometricTask task = _biometricClient.CreateTask(NBiometricOperations.Capture | NBiometricOperations.CreateTemplate, _subject);
                _biometricClient.BeginPerformTask(task, OnEnrollCompleted, null);
            }
        }

Hello,

the basic idea is to change the NFinger in NFingerView after some finger is shown. It can be achieved by using the CurrentBiometricCompleted event. it is fired when NFinger scanning is finished. Below you will find the edited EnrollFromScanner code of the SimpleFingerSample, which shows how to achieve this.

Code: Select all
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using Neurotec.Biometrics;
using Neurotec.Biometrics.Client;
using Neurotec.Biometrics.Gui;
using Neurotec.Devices;
using Neurotec.Images;

namespace Neurotec.Samples
{
   public partial class EnrollFromScanner : UserControl
   {
      #region Public constructor

      public EnrollFromScanner()
      {
         InitializeComponent();
      }

      #endregion

      #region Private fields

      private NDeviceManager _deviceManager;
      private NBiometricClient _biometricClient;
      private NSubject _subject;
      private NFinger[] _subjectFinger;
      //private NFinger _subjectFinger2;
      //private NFinger _subjectFinger3;
      //private NFinger _subjectFinger4;
      private int _fingerInUse = 0;

      #endregion

      #region Public properties

      public NBiometricClient BiometricClient
      {
         get { return _biometricClient; }
         set { _biometricClient = value; }
      }

      #endregion

      #region Private methods

      private void EnableControls(bool capturing)
      {
         scannersListBox.Enabled = !capturing;
         cancelScanningButton.Enabled = capturing;
         scanButton.Enabled = !capturing;
         refreshListButton.Enabled = !capturing;
         var fingerStatus = !capturing && _subjectFinger != null && _subjectFinger[_fingerInUse].Status == NBiometricStatus.Ok;
         saveImageButton.Enabled = fingerStatus;
         chbShowProcessedImage.Enabled = fingerStatus;
         saveTemplateButton.Enabled = !capturing && _subject != null && _subject.Status == NBiometricStatus.Ok;
         chbScanAutomatically.Enabled = !capturing;
         forceCaptureButton.Enabled = capturing && !chbScanAutomatically.Checked;
      }

      private void OnEnrollCompleted(IAsyncResult r)
      {
         if (InvokeRequired)
         {
            BeginInvoke(new AsyncCallback(OnEnrollCompleted), r);
         }
         else
         {
            NBiometricTask task = _biometricClient.EndPerformTask(r);
            EnableControls(false);
            NBiometricStatus status = task.Status;

            // Check if extraction was canceled
            if (status == NBiometricStatus.Canceled) return;

            if (status == NBiometricStatus.Ok)
            {
               lblQuality.Text = String.Format("Quality: {0}", _subjectFinger[_fingerInUse].Objects[0].Quality);
            }
            else
            {
               MessageBox.Show(string.Format("The template was not extracted: {0}.", status), Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
               _subject = null;
               _subjectFinger = null;
               EnableControls(false);
            }
         }
      }

      private void UpdateScannerList()
      {
         scannersListBox.BeginUpdate();
         try
         {
            scannersListBox.Items.Clear();
            if (_deviceManager != null)
            {
               foreach (NDevice item in _deviceManager.Devices)
               {
                  scannersListBox.Items.Add(item);
               }
            }
         }
         finally
         {
            scannersListBox.EndUpdate();
         }
      }

      #endregion

      #region Private form events

      private void ScanButtonClick(object sender, EventArgs e)
      {
         if (_biometricClient.FingerScanner == null)
         {
            MessageBox.Show(@"Please select a scanner from the list.");
         }
         else
         {
            EnableControls(true);
            lblQuality.Text = String.Empty;

            // Create a finger
            _subjectFinger = new NFinger[4];
            for(int i = 0; i < 4; i++)
            {
               _subjectFinger[i] = new NFinger();
               _subjectFinger[i].PropertyChanged += OnAttributesPropertyChanged;
            }

            // Add finger to the subject and fingerView
            _subject = new NSubject();
            foreach (var f in _subjectFinger)
            {
               _subject.Fingers.Add(f);
            }

            fingerView.Finger = _subjectFinger[0];
            fingerView.ShownImage = ShownImage.Original;

            if (_fingerInUse == 0)
            {
               _biometricClient.CurrentBiometricCompleted += _biometricClient_CurrentBiometricCompleted;
            }
            else
            {
               _fingerInUse = 0;
            }
            // Begin capturing
            _biometricClient.FingersReturnProcessedImage = true;
            NBiometricTask task = _biometricClient.CreateTask(NBiometricOperations.Capture | NBiometricOperations.CreateTemplate, _subject);
            _biometricClient.BeginPerformTask(task, OnEnrollCompleted, null);
            
         }
      }

      private void _biometricClient_CurrentBiometricCompleted(object sender, EventArgs e)
      {
         BeginInvoke(new Action(() =>
         {
            if (_fingerInUse < _subjectFinger.Length - 1)
            {
               _fingerInUse++;
            }
            fingerView.Finger = _subjectFinger[_fingerInUse];
         }));
      }

      private void OnAttributesPropertyChanged(object sender, PropertyChangedEventArgs e)
      {
         if (e.PropertyName == "Status")
         {
            BeginInvoke(new Action<NBiometricStatus>(status => lblQuality.Text = status.ToString()), _subjectFinger[_fingerInUse].Status);
         }
      }

      private void CancelScanningButtonClick(object sender, EventArgs e)
      {
         _biometricClient.Cancel();
      }

      private void RefreshListButtonClick(object sender, EventArgs e)
      {
         UpdateScannerList();
      }

      private void SaveImageButtonClick(object sender, EventArgs e)
      {
         if (_subjectFinger[_fingerInUse].Status == NBiometricStatus.Ok)
         {
            saveFileDialog.FileName = string.Empty;
            saveFileDialog.Title = @"Save Image File";
            saveFileDialog.Filter = NImages.GetSaveFileFilterString();
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
               try
               {
                  if (chbShowProcessedImage.Checked)
                  {
                     _subjectFinger[_fingerInUse].ProcessedImage.Save(saveFileDialog.FileName);
                  }
                  else
                  {
                     _subjectFinger[_fingerInUse].Image.Save(saveFileDialog.FileName);
                  }
               }
               catch (Exception ex)
               {
                  Utils.ShowException(ex);
               }
            }
         }
      }

      private void SaveTemplateButtonClick(object sender, EventArgs e)
      {
         if (_subject.Status == NBiometricStatus.Ok)
         {
            saveFileDialog.FileName = string.Empty;
            saveFileDialog.Filter = string.Empty;
            saveFileDialog.Title = @"Save Template File";
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
               try
               {
                  // Save template to file
                  File.WriteAllBytes(saveFileDialog.FileName, _subject.GetTemplateBuffer().ToArray());
               }
               catch (Exception ex)
               {
                  Utils.ShowException(ex);
               }
            }
         }
      }

      private void EnrollFromScannerLoad(object sender, EventArgs e)
      {
         _deviceManager = _biometricClient.DeviceManager;
         UpdateScannerList();
         saveFileDialog.Filter = NImages.GetSaveFileFilterString();
      }

      private void ScannersListBoxSelectedIndexChanged(object sender, EventArgs e)
      {
         _biometricClient.FingerScanner = scannersListBox.SelectedItem as NFScanner;
      }

      private void ChbShowProcessedImageCheckedChanged(object sender, EventArgs e)
      {
         fingerView.ShownImage = chbShowProcessedImage.Checked ? ShownImage.Result : ShownImage.Original;
      }

      private void FingerViewMouseClick(object sender, MouseEventArgs e)
      {
         if (e.Button == MouseButtons.Right && chbShowProcessedImage.Enabled)
         {
            chbShowProcessedImage.Checked = !chbShowProcessedImage.Checked;
         }
      }

      private void ForceCaptureButtonClick(object sender, EventArgs e)
      {
         _biometricClient.Force();
      }

      #endregion

   }
}


Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: NFingerView and multiple finger enrollment

Postby efinlaw » Apr 16, 2015 15:12

Martynas wrote:Hello,

the basic idea is to change the NFinger in NFingerView after some finger is shown. It can be achieved by using the CurrentBiometricCompleted event. it is fired when NFinger scanning is finished. Below you will find the edited EnrollFromScanner code of the SimpleFingerSample, which shows how to achieve this.

Code: Select all
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
using Neurotec.Biometrics;
using Neurotec.Biometrics.Client;
using Neurotec.Biometrics.Gui;
using Neurotec.Devices;
using Neurotec.Images;

namespace Neurotec.Samples
{
   public partial class EnrollFromScanner : UserControl
   {
      #region Public constructor

      public EnrollFromScanner()
      {
         InitializeComponent();
      }

      #endregion

      #region Private fields

      private NDeviceManager _deviceManager;
      private NBiometricClient _biometricClient;
      private NSubject _subject;
      private NFinger[] _subjectFinger;
      //private NFinger _subjectFinger2;
      //private NFinger _subjectFinger3;
      //private NFinger _subjectFinger4;
      private int _fingerInUse = 0;

      #endregion

      #region Public properties

      public NBiometricClient BiometricClient
      {
         get { return _biometricClient; }
         set { _biometricClient = value; }
      }

      #endregion

      #region Private methods

      private void EnableControls(bool capturing)
      {
         scannersListBox.Enabled = !capturing;
         cancelScanningButton.Enabled = capturing;
         scanButton.Enabled = !capturing;
         refreshListButton.Enabled = !capturing;
         var fingerStatus = !capturing && _subjectFinger != null && _subjectFinger[_fingerInUse].Status == NBiometricStatus.Ok;
         saveImageButton.Enabled = fingerStatus;
         chbShowProcessedImage.Enabled = fingerStatus;
         saveTemplateButton.Enabled = !capturing && _subject != null && _subject.Status == NBiometricStatus.Ok;
         chbScanAutomatically.Enabled = !capturing;
         forceCaptureButton.Enabled = capturing && !chbScanAutomatically.Checked;
      }

      private void OnEnrollCompleted(IAsyncResult r)
      {
         if (InvokeRequired)
         {
            BeginInvoke(new AsyncCallback(OnEnrollCompleted), r);
         }
         else
         {
            NBiometricTask task = _biometricClient.EndPerformTask(r);
            EnableControls(false);
            NBiometricStatus status = task.Status;

            // Check if extraction was canceled
            if (status == NBiometricStatus.Canceled) return;

            if (status == NBiometricStatus.Ok)
            {
               lblQuality.Text = String.Format("Quality: {0}", _subjectFinger[_fingerInUse].Objects[0].Quality);
            }
            else
            {
               MessageBox.Show(string.Format("The template was not extracted: {0}.", status), Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
               _subject = null;
               _subjectFinger = null;
               EnableControls(false);
            }
         }
      }

      private void UpdateScannerList()
      {
         scannersListBox.BeginUpdate();
         try
         {
            scannersListBox.Items.Clear();
            if (_deviceManager != null)
            {
               foreach (NDevice item in _deviceManager.Devices)
               {
                  scannersListBox.Items.Add(item);
               }
            }
         }
         finally
         {
            scannersListBox.EndUpdate();
         }
      }

      #endregion

      #region Private form events

      private void ScanButtonClick(object sender, EventArgs e)
      {
         if (_biometricClient.FingerScanner == null)
         {
            MessageBox.Show(@"Please select a scanner from the list.");
         }
         else
         {
            EnableControls(true);
            lblQuality.Text = String.Empty;

            // Create a finger
            _subjectFinger = new NFinger[4];
            for(int i = 0; i < 4; i++)
            {
               _subjectFinger[i] = new NFinger();
               _subjectFinger[i].PropertyChanged += OnAttributesPropertyChanged;
            }

            // Add finger to the subject and fingerView
            _subject = new NSubject();
            foreach (var f in _subjectFinger)
            {
               _subject.Fingers.Add(f);
            }

            fingerView.Finger = _subjectFinger[0];
            fingerView.ShownImage = ShownImage.Original;

            if (_fingerInUse == 0)
            {
               _biometricClient.CurrentBiometricCompleted += _biometricClient_CurrentBiometricCompleted;
            }
            else
            {
               _fingerInUse = 0;
            }
            // Begin capturing
            _biometricClient.FingersReturnProcessedImage = true;
            NBiometricTask task = _biometricClient.CreateTask(NBiometricOperations.Capture | NBiometricOperations.CreateTemplate, _subject);
            _biometricClient.BeginPerformTask(task, OnEnrollCompleted, null);
            
         }
      }

      private void _biometricClient_CurrentBiometricCompleted(object sender, EventArgs e)
      {
         BeginInvoke(new Action(() =>
         {
            if (_fingerInUse < _subjectFinger.Length - 1)
            {
               _fingerInUse++;
            }
            fingerView.Finger = _subjectFinger[_fingerInUse];
         }));
      }

      private void OnAttributesPropertyChanged(object sender, PropertyChangedEventArgs e)
      {
         if (e.PropertyName == "Status")
         {
            BeginInvoke(new Action<NBiometricStatus>(status => lblQuality.Text = status.ToString()), _subjectFinger[_fingerInUse].Status);
         }
      }

      private void CancelScanningButtonClick(object sender, EventArgs e)
      {
         _biometricClient.Cancel();
      }

      private void RefreshListButtonClick(object sender, EventArgs e)
      {
         UpdateScannerList();
      }

      private void SaveImageButtonClick(object sender, EventArgs e)
      {
         if (_subjectFinger[_fingerInUse].Status == NBiometricStatus.Ok)
         {
            saveFileDialog.FileName = string.Empty;
            saveFileDialog.Title = @"Save Image File";
            saveFileDialog.Filter = NImages.GetSaveFileFilterString();
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
               try
               {
                  if (chbShowProcessedImage.Checked)
                  {
                     _subjectFinger[_fingerInUse].ProcessedImage.Save(saveFileDialog.FileName);
                  }
                  else
                  {
                     _subjectFinger[_fingerInUse].Image.Save(saveFileDialog.FileName);
                  }
               }
               catch (Exception ex)
               {
                  Utils.ShowException(ex);
               }
            }
         }
      }

      private void SaveTemplateButtonClick(object sender, EventArgs e)
      {
         if (_subject.Status == NBiometricStatus.Ok)
         {
            saveFileDialog.FileName = string.Empty;
            saveFileDialog.Filter = string.Empty;
            saveFileDialog.Title = @"Save Template File";
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
               try
               {
                  // Save template to file
                  File.WriteAllBytes(saveFileDialog.FileName, _subject.GetTemplateBuffer().ToArray());
               }
               catch (Exception ex)
               {
                  Utils.ShowException(ex);
               }
            }
         }
      }

      private void EnrollFromScannerLoad(object sender, EventArgs e)
      {
         _deviceManager = _biometricClient.DeviceManager;
         UpdateScannerList();
         saveFileDialog.Filter = NImages.GetSaveFileFilterString();
      }

      private void ScannersListBoxSelectedIndexChanged(object sender, EventArgs e)
      {
         _biometricClient.FingerScanner = scannersListBox.SelectedItem as NFScanner;
      }

      private void ChbShowProcessedImageCheckedChanged(object sender, EventArgs e)
      {
         fingerView.ShownImage = chbShowProcessedImage.Checked ? ShownImage.Result : ShownImage.Original;
      }

      private void FingerViewMouseClick(object sender, MouseEventArgs e)
      {
         if (e.Button == MouseButtons.Right && chbShowProcessedImage.Enabled)
         {
            chbShowProcessedImage.Checked = !chbShowProcessedImage.Checked;
         }
      }

      private void ForceCaptureButtonClick(object sender, EventArgs e)
      {
         _biometricClient.Force();
      }

      #endregion

   }
}



Ok thank you very helpful. I have one more question. Say I wanted to recapture one or more of the fingers at the end of the capture task if the quality was not good enough. Is there any way to go back in the task after it has ended?
efinlaw
 
Posts: 2
Joined: Apr 14, 2015 21:01

Re: NFingerView and multiple finger enrollment

Postby Martynas » Apr 22, 2015 07:59

efinlaw wrote:Ok thank you very helpful. I have one more question. Say I wanted to recapture one or more of the fingers at the end of the capture task if the quality was not good enough. Is there any way to go back in the task after it has ended?

Hello,

it is not possible to get back in the task as it is ended, but you can remove the NFinger with bad quality from NSubject, then add a newly created one and Capture and Create Template again.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Generic Component

Postby Yashir_Bajwa » Apr 26, 2015 07:06

hi everyone....

I want to get Minutiae points from an image of fingerprints.. I convert image into grayscale and then find its edges through cany edge detector but now i don"t know how to find minutiae points from edges.... kindly help me through c# code or tell me any liberary class or some kind of api"s which i can use for this purpose....
Yashir_Bajwa
 
Posts: 2
Joined: Apr 26, 2015 06:35

Minutiae points

Postby Yashir_Bajwa » Apr 27, 2015 05:44

Hi... Kindly tell me any liberary class or api which i can use to find minutiae points in c#.. or help me through c# sample code to find minutiae points... I already found edges of an image of fingerprints but i don"t know how to get minutiae points...??

Admin: merged to "Fingerprint enrollment questions"
Yashir_Bajwa
 
Posts: 2
Joined: Apr 26, 2015 06:35

Re: Fingerprint enrollment questions

Postby Martynas » Apr 27, 2015 07:20

Yashir_Bajwa wrote:hi everyone....

I want to get Minutiae points from an image of fingerprints.. I convert image into grayscale and then find its edges through cany edge detector but now i don"t know how to find minutiae points from edges.... kindly help me through c# code or tell me any liberary class or some kind of api"s which i can use for this purpose....

Hello,

minutiae could be extracted by using the VeriFinger or MegaMatcher SDKs. Both SDKs include tutorials and samples showing how to do that.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Minutiae points

Postby Martynas » Apr 30, 2015 12:53

Yashir_Bajwa wrote:Hi... Kindly tell me any liberary class or api which i can use to find minutiae points in c#.. or help me through c# sample code to find minutiae points... I already found edges of an image of fingerprints but i don"t know how to get minutiae points...??

Hello,

the tutorial EnrollFingerFromImage shows how to extract the template from fingerprint image. The tutorial ShowTemplateContent show to get the list of minutiae from the template.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Extraction of minutiae that is compatible with MegaMatcher 3

Postby tekofer » May 22, 2015 23:00

As is generated from C # MegaMatcher 3 template VFinger equal to 4.2?

Admin: merged to "Fingerprint enrollment questions"
tekofer
 
Posts: 13
Joined: Mar 31, 2014 19:56

Re: Extraction of minutiae that is compatible with MegaMatch

Postby Martynas » May 25, 2015 07:39

tekofer wrote:As is generated from C # MegaMatcher 3 template VFinger equal to 4.2?

Hello,

please clarify you issue/request.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Extraction of minutiae that is compatible with MegaMatch

Postby tekofer » Jun 04, 2015 17:32

Martynas wrote:Hello,

please clarify you issue/request.

I can generate from MegaMatcher 3.2 or 3 employs Vfinger4.2
tekofer
 
Posts: 13
Joined: Mar 31, 2014 19:56

Re: Extraction of minutiae that is compatible with MegaMatch

Postby Martynas » Jun 05, 2015 07:16

tekofer wrote:I can generate from MegaMatcher 3.2 or 3 employs Vfinger4.2

Hi,

yes, it is possible to generate VF4.2 template by using MM3.1. You need to use NFRecord.SaveV1() if you are using a .Net.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Extraction of minutiae that is compatible with MegaMatch

Postby tekofer » Jun 16, 2015 15:06

Martynas wrote:Hi,

yes, it is possible to generate VF4.2 template by using MM3.1. You need to use NFRecord.SaveV1() if you are using a .Net.

thanks
tekofer
 
Posts: 13
Joined: Mar 31, 2014 19:56

Verifinger minutia extraction

Postby gg924 » Jun 25, 2015 14:37

Hello all,

Currently I am doing bit extraction from fingerprint minutiae. I wish using veriFinger 6.1 SDK trial verison to extract the minutiae in x, y and theta format. Anyone can provide sample code in C# for extracting the minutia and export into text file? thanks in advance!

best regards

Admin: merged to "Fingerprint enrollment questions"
gg924
 
Posts: 8
Joined: Jun 25, 2015 04:29

Re: Verifinger minutia extraction

Postby Martynas » Jun 26, 2015 10:02

gg924 wrote:Hello all,

Currently I am doing bit extraction from fingerprint minutiae. I wish using veriFinger 6.1 SDK trial verison to extract the minutiae in x, y and theta format. Anyone can provide sample code in C# for extracting the minutia and export into text file? thanks in advance!

best regards

Hello,

please take a look at tutorials "EnrollFingerFromImage" or "EnrollFingerFromScanner" to find how the template is extracted from fingerprint image. Then use the tutorial "TemplateInfo", to see how to get the information about extracted minutiaes.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Fingers classifier file is missing

Postby neal » Jul 06, 2015 13:18

Hi I use c# with the sdk,
And When I run the code to extract the template I get a status error "Fingers classifier file is missing".
Is it a librarie that is missing?

Admin: merged to "Fingerprint enrollment questions"
neal
 
Posts: 2
Joined: Jul 06, 2015 13:15

Error on extracting template from Fingerprint

Postby neal » Jul 06, 2015 14:09

Hi When I try to extract the template I get the following error from c#.

"Fingers classifier file is missing"
neal
 
Posts: 2
Joined: Jul 06, 2015 13:15

Re: Error on extracting template from Fingerprint

Postby Martynas » Jul 09, 2015 06:55

neal wrote:Hi I use c# with the sdk,
And When I run the code to extract the template I get a status error "Fingers classifier file is missing".
Is it a librarie that is missing?

neal wrote:Hi When I try to extract the template I get the following error from c#.

"Fingers classifier file is missing"

Hello,

please copy Finger.ndf file from the SDK "Bin\Data" folder to your application output folder.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

Re: Fingerprint enrollment questions

Postby Jiward » Jul 16, 2015 16:21

Hi dear Martynas,
how to EnrollWithDuplicateCheck multiple fingerprints of the same person
Thanks
Jiward
 
Posts: 10
Joined: May 20, 2015 20:08

Re: Fingerprint enrollment questions

Postby Martynas » Jul 17, 2015 07:10

Jiward wrote:Hi dear Martynas,
how to EnrollWithDuplicateCheck multiple fingerprints of the same person
Thanks

Hi,

create a multifinger template and use it from enrollment with duplicate check.
Best regards,

Martynas
Software Consultant
Neurotechnology
Martynas
Neurotechnology
 
Posts: 2195
Joined: Sep 19, 2008 10:02
Location: Vilnius, Lithuania

extract minutiae features

Postby nora » Aug 08, 2015 14:48

hello,
I tried the tutorial "Show TemplateContentCS" to extract the information about minutiae ( x, y and theta format) but i couldn"t.
Any idea about how to get the minutiae information from finger template? (I am using SDK 5-1 trial version.)

Best regards,

Admin: merged to "Fingerprint enrollment questions"
nora
 
Posts: 1
Joined: Jul 11, 2015 13:39

PreviousNext

Return to Public

Who is online

Users browsing this forum: No registered users and 2 guests