NeuroDactyl
How to start with the SDK

1. Configuration

After you have installed the SDK successfully with valid software license, you need to set up configuration file. See Configuration.

To create general SDK objects (like NeuroDactyl::Detector, NeuroDactyl::Extractor, NeuroDactyl::Matcher, etc.) you need to have NeuroDactyl::Config object.
You can create it by:

auto cfg = NeuroDactyl::makeConfig(configFileName);

configFileName is the path to your configuration file.

You can find default config example in the SDK package - config_default.cfg

2. Images and decoding

The SDK supports WSQ and most common image formats (jpg, bmp, png). Also you can load decoded 8bit images manually. See other image Requirements
All images in the SDK are represented with object NeuroDactyl::Image.
For decoding images you should create NeuroDactyl::Decoder object first:

auto decoder = NeuroDactyl::createDecoder(cfg);

where cfg is NeuroDactyl::Config.
After it you can decode an image from hard drive:

auto image = decoder->read(imageFileName);

or from memory:

auto image = decoder->decode(size, data);

If you have decoded 8raw bit image (ISO/IEC 19794-4:2005, §6.2) construct NeuroDactyl::Image from it by:

auto image = NeuroDactyl::constructImage(width, height, data);

3. Fingerprint detection

First step of fingerprint recognition is fingerprint detection — localization of a fingerprint or fingerprints on an image.
Firstly, you need to create NeuroDactyl::Detector object:

auto detector = NeuroDactyl::createDetector(cfg);

To run detection on an image:

std::vector<NeuroDactyl::Detection*> detections;
detector->detect(image, 500, 0.333, detections);

where:
500 is dpi
0.333 is detector's confidence

NeuroDactyl::Detector returns NeuroDactyl::Detection objects. You can use images with several fingerprints on it, in this case NeuroDactyl::Detector returns several detections. All detections are returned with detection location (NeuroDactyl::Detection::bbox()) and it's confidence, based on it you can choose a needed one or ones.

If you are processing images with only one fingerprint in the same position (for example, in the center) and you are absolutely sure about it, you can indicate fingerprint position manually, without running Detection algorithm.

To create NeuroDactyl::Detection object, when a fingerprint is in the center:

NeuroDactyl::Point fingerprintCenter;
fingerprintCenter.x = image->width() / 2;
fingerprintCenter.y = image->height() / 2;
auto detection = NeuroDactyl::constructDetection(image, 500, fingerprintCenter, 0);

where:
500 is dpi
0 is angle of rotation from vertical axis

Detection confidence

Confidence is a value between 0,0001 and 0,9999 indicating level of certainty for the detection, where 0,0001 - most probably a false detection and 0,9999 - most probably a fingerprint.
Recommended value is between 0.33 and 0.5, but may depend on your use case. We recommend to test on your DB before choosing the threshold.

4. Biometric template extraction

NeuroDactyl::Detection object is used for further biometric template extraction. Biometric template is a proprietary compact descriptor used for further matching and recognition.
Size of biometric template: 512 bytes. Size of the templates is standard for any image.

First, create NeuroDactyl::Extractor object:

auto extractor = NeuroDactyl::createExtractor(cfg);

To create NeuroDactyl::Template object from detection

auto template0 = extractor->extract(detection);

You can serialize fingerprint template in memory by:

char * buff = new char[template0->serializedSize()];
template0->serialize(buff);

and load serialized template by:

auto template1 = NeuroDactyl::deserializeTemplate(template0->serializedSize(), buff);

5. Matching

6. Person

Matching score

The matching score is a native value for measuring the similarity between templates.
Score is directly linked with FAR and its values are equal -logFAR, which means:

  • Score 4 - 1/10,000 chance it's different fingerprints
  • Score 5 - 1/100,000 chance it's different fingerprints
  • Score 6 - 1/1,000,000 chance it's different fingerprints, etc.

By setting up a threshold you indicate a score, above which you want to see matching results. For example, threshold 6 means that the SDK returns matching results with scores from 6 and higher. Choosing a suitable threshold depends on your use case and affordable level of FAR.