Face comparison on card

Face 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 facial 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 FaceEncoder. Then call the FaceTemplate.toBit Method for correctly formatted data.

Important

The BIT must contain the decision threshold associated with the face template. See FaceMatcherThreshold Enumeration for a list of typical values.

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 FaceEncoder. Then call the FaceTemplate.toBdt Method for correctly formatted data.

Example

The example below demonstrates how to obtain the biometric data template (BDT) from a face image.

# initializes a FaceEncoder and warm it up.
face_encoder = FaceEncoder(
    thread_count=4
)
face_encoder.warm_up()

# create the template from the detected face.
face_template = face_encoder.create_template(image, face)

# export the face template object to a Biometric Data Template (BDT) buffer.
bdt = face_template.to_bdt()

# save BDT => send the BDT buffer to the card here.
with open("bdt.bin", "wb") as bdt_file:
    bdt_file.write(bdt)

# export the face template as a BIT for enrolment on a smart card equipped with id3 Match-on-Card technology.
bit = face_template.to_bit(FaceMatcherThreshold.FMR10000, 1)

# dispose all resources
del face_encoder

See also