On-Card Comparison¶
Fingerprint comparison on smart card, also known as Match-on-Card technology, means that the final stage of biometric verification is carried out on an integrated circuit card (ICC). This technology makes a smart card truly personal by replacing the PIN code needed to give access to the card with biometric recognition.
Note
Contact us for a list of cards compatible with our Match-on-Card technology.
Enrolment data¶
The biometric data to be sent to the card for the purpose of enrolment must be in the form of a Biometric Information Template (BIT), as per ISO/IEC 7816-11. The BIT contains descriptive information about the associated biometric template data.
The template data shall be generated using the FingerExtractor. Then call the FingerTemplate.toBit Method for correctly formatted data.
Important
The BIT must contain the decision threshold associated with the finger template. See Decision thresholds for details.
Verification data¶
The biometric data to be sent to the card for the purpose of verification must be in the form of a Biometric Data Template (BDT) as per ISO/IEC 7816-11. The BDT contains biometric template data encapsulated in a BER-TLV data object ‘7F2E’.
The template data shall be generated using the FingerExtractor. Then call the FingerTemplate.toBdt Method for correctly formatted data.
Decision thresholds¶
The table below defines typical matching decision values for use with id3 minutia extractor:
False Match Rate |
Decision threshold |
---|---|
1.0% |
2045 |
0.1% |
2828 |
0.01% |
3785 |
0.001% |
5011 |
0.0001% |
6569 |
0.00001% |
8534 |
Example¶
The example below demonstrates how to obtain the biometric data from a fingerprint image.
# initialize FingerExtractor for minutiae detection only.
finger_extractor = FingerExtractor(
thread_count=4
)
# load an image from a file.
image = FingerImage.from_file("data/finger1_1.bmp", PixelFormat.GRAYSCALE_8_BITS)
image.set_resolution(500)
image.position = FingerPosition.RIGHT_INDEX
# extract the template from the fingerprint image.
finger_template = finger_extractor.create_template(image)
# export the finger template to a Biometric Information Template (BIT) buffer for enrolment on card.
bit = finger_template.to_bit(MocThreshold.FMR10000, 42, 1)
print("BIT: " + " ".join("{:02x}".format(x) for x in bit))
# export the finger template to a Biometric Data Template (BDT) buffer.
bdt = finger_template.to_bdt()
print("BDT: " + " ".join("{:02x}".format(x) for x in bdt))
# send BDT buffer to card
# ...
# dispose all resources
del finger_extractor
var fingerExtractor = FingerExtractor()
..minutiaDetectorModel = FingerModel.fingerMinutiaDetector3B;
// Load an image from a file.
var image = FingerImage.fromFile("image1.jpg", PixelFormat.grayscale8Bits);
// Extract the template from the fingerprint image.
var fingerTemplate = fingerExtractor.createTemplate(image);
// Export the finger template object to a Biometric Data Template (BDT) buffer.
var bdt = fingerTemplate.toBdt();
// Send BDT buffer to card
// ...
// Dispose all resources
fingerExtractor.dispose();
// Load AI models
FingerLibrary.LoadModel(aiModelsPath, FingerModel.FingerMinutiaDetector3B, ProcessingUnit.Cpu);
// Initialize FingerExtractor
FingerExtractor fingerExtractor = new FingerExtractor()
{
MinutiaDetectorModel = FingerModel.FingerMinutiaDetector3B
};
// Load an image from a file.
FingerImage image = FingerImage.FromFile("image1.jpg", PixelFormat.Grayscale8Bits);
image.SetResolution(500);
// Extract the template from the fingerprint image.
FingerTemplate fingerTemplate = fingerExtractor.CreateTemplate(image);
// Export the finger template object to a Biometric Data Template (BDT) buffer.
byte[] bdt = fingerTemplate.ToBdt();
// Send BDT buffer to card
// ...
// Dispose all resources
fingerExtractor.Dispose();
FingerExtractor fingerExtractor = new FingerExtractor();
fingerExtractor.setMinutiaDetectorModel(FingerModel.FINGER_MINUTIA_DETECTOR_3B);
// Load an image from a file.
FingerImage image = FingerImage.fromFile("image1.jpg", PixelFormat.GRAYSCALE_8_BITS);
// Extract the template from the fingerprint image.
FingerTemplate fingerTemplate = fingerExtractor.createTemplate(image);
// Export the finger template object to a Biometric Data Template (BDT) buffer.
byte[] bdt = fingerTemplate.toBdt();
// Send BDT buffer to card
// ...
// Dispose all resources
fingerExtractor.dispose();
val fingerExtractor = FingerExtractor().apply {
minutiaDetectorModel = FingerModel.FINGER_MINUTIA_DETECTOR_3B
}
// Load an image from a file.
val image = FingerImage.fromFile("image1.jpg", PixelFormat.GRAYSCALE_8_BITS)
// Extract the template from the fingerprint image.
val fingerTemplate = fingerExtractor.createTemplate(image)
// Export the finger template object to a Biometric Data Template (BDT) buffer.
val bdt = fingerTemplate.toBdt()
// Send BDT buffer to card
// ...
// Dispose all resources
fingerExtractor.dispose()
let fingerExtractor = FingerExtractor()
fingerExtractor.minutiaDetectorModel = FingerModel.fingerMinutiaDetector3B
// Load an image from a file.
let image = FingerImage.fromFile("image1.jpg", pixelFormat: PixelFormat.grayscale8Bits)
// Extract the template from the fingerprint image.
let fingerTemplate = fingerExtractor.createTemplate(from: image)
// Export the finger template object to a Biometric Data Template (BDT) buffer.
let bdt = fingerTemplate.toBdt()
// Send BDT buffer to card
// ...
// Dispose all resources
fingerExtractor.dispose()