|
Enrollment 28.2.0
|
The library can be used to detect faces from face captures. More...
Topics | |
| Solvers | |
| The Enrollment SDK package includes large binary files called solvers. | |
Classes | |
| class | FaceExtractorConfig |
| It contains extraction configuration. More... | |
| class | FaceTemplate |
| FaceTemplate is Innovatrics proprietary face template. More... | |
| class | ExtractedFace |
| ExtractedFace is ICF Template created by FaceExtractor with Face that was extracted. More... | |
| class | CroppedFace |
| Represents a face cropped from the original face capture. More... | |
| class | Face |
| It holds all functions and data related to Face manipulation. More... | |
| class | Face::Keypoint |
| It holds all attributes related to a facial key point. More... | |
| class | Face::Keypoints |
| It holds all facial keypoints detected on a FaceCapture image. More... | |
| class | FaceAttributes |
| Face attributes Holds the face attributes. More... | |
| class | FaceCaptureDeviceTypeID |
| Capture device type identifier The capture device type identifier shall identify the biometric organization that owns the product that created the BDIR. More... | |
| class | FaceCaptureDeviceVendorID |
| Capture device vendor identifier The capture device vendor identifier shall identify the biometric organization that owns the product that created the BDIR. More... | |
| class | FaceCapture |
| Face capture can contains one or group of people, faces or full body. More... | |
| class | FaceCropConfiguration |
| Face crop configuration. More... | |
| class | FaceDetector |
| FaceDetector implements detection by means of Innovatrics IFace. More... | |
| class | GlobalFaceExecutor |
| Holds instance of FaceExecutor. More... | |
| struct | FailedFaceAttribute |
| It contains attribute data that express which and why attribute fails in reliability check. More... | |
| class | FaceAttributeReliability |
| Interface for checking reliability of attribute. More... | |
| class | ICAOReliability |
| Check if Face will fullfil ICAO requirements. More... | |
| class | TemplateReliability |
| Check if template extraction will be reliable. More... | |
| class | AgeReliability |
| Check if calculation of Age attribute will be reliable. More... | |
| class | GlassStatusReliability |
| Check if calculation of Glass Status attribute will be reliable. More... | |
| class | TintedGlassesReliability |
| Check if calculation of Tinted Glasses attribute will be reliable. More... | |
| class | SegmentationMaskReliability |
| Check if calculation of Segmentation Mask in functions Face::FaceAreaSegment, Face::FaceAreaSegment(RGB), Face::FaceAreaMask will be reliable. More... | |
| class | FaceSizeReliability |
| Check if calculation of Face Size attribute will be reliable. More... | |
| class | MouthOpennessReliability |
| Check if calculation of Mouth Openness attribute will be reliable. More... | |
| class | UniversalPassiveLivenessReliability |
| Check if calculation of Universal passive liveness will be reliable. More... | |
| class | ISOFullFrontalImageValidator |
| Check if usage of Full Frontal Images on travel documents will follow best practices, as described in Section B.3.2 Best practices for use of Full Frontal Images on travel documents [6]. More... | |
| class | OFIQFace |
| It provides quality measures as defined in ISO/IEC 29794-5:2025. More... | |
Typedefs | |
| using | FaceSimilarityScore = unsigned int |
| It is similarity score between face Templates. | |
Enumerations | |
| enum class | FaceCaptureDeviceTechnology : uint8_t { UNKNOWN = 0 , STATIC_PHOTOGRAPH_FROM_UNKNOWN_SOURCE = 1 , STATIC_PHOTOGRAPH_FROM_DIGITAL_CAMERA = 2 , STATIC_PHOTOGRAPH_FROM_SCANNER = 3 , VIDEO_FRAME_FROM_UNKNOWN_SOURCE = 4 , VIDEO_FRAME_FROM_ANALOGUE_CAMERA = 5 , VIDEO_FRAME_FROM_DIGITAL_CAMERA = 6 } |
| It indicates the class of device technology used to acquire the captured biometric sample [6]. More... | |
| enum class | FaceImageType : uint8_t { BASIC = 0 , FULL_FRONTAL = 1 , TOKEN_FRONTAL = 2 , POST_PROCESSED_FRONTAL = 3 } |
| Several face image types are introduced to define categories that satisfy requirements of some applications [6]. More... | |
| enum class | FaceCrop : uint8_t { TOKEN_NOT_FRONTAL = 0 , FULL = 1 , TOKEN = 2 , FULL_NOT_ALIGNED = 3 } |
| Defines different Crop methods. More... | |
Functions | |
| static constexpr int | FaceToIsoCaptureDeviceTechnology (FaceCaptureDeviceTechnology printCaptureDeviceTechnology) |
| Function converts FaceCaptureDeviceTechnology to ISO capture technology. | |
| static constexpr FaceCaptureDeviceTechnology | IsoToFaceCaptureDeviceTechnology (int isoCaptureDeviceTechnology) |
| Function converts ISO capture technology to FaceCaptureDeviceTechnology. | |
| static constexpr int | FaceToIsoImageType (FaceImageType faceImageType) |
| Function converts FaceImageType to ISO face image type as defined in iso_19794-5_2011. | |
| static constexpr FaceImageType | IsoToFaceImageType (int faceImageType) |
| Function converts ISO face image type to FaceImageType. | |
| static constexpr bool | IsFaceCropMethodValid (FaceCrop faceCrop) |
| Function validates the value of FaceCrop enum. | |
The library can be used to detect faces from face captures.
The library can be used to detect faces from face captures. Face capture can contains one or group of people, faces or full body.
SDK can detect faces of various sizes, orientations, facial hair types or ethnicities. Face can be partly occluded by glasses, sunglasses or hat. SDK can operate with many different lighting conditions and image qualities. Face size is defined as a maximum of values of inter eyes centers distance and distance between center of mouth and center point between eyes: face_size = max(distance(left_eye_center, right_eye_center), distance(mouth_center,eyes_center))
Image above shows face size visualizations of various distances of inter eyes centers distances (X=distance(left_eye_center,right_eye_center)) and distances between center of mouth and center point between eyes (Y=distance(mouth_center, eyes_center)). The face size is the maximum of these two distances. It can be seen from images (a), (b) and (c) that the face size (red arrow) defined in this way is invariant to pose of the head (yaw, pitch, roll). The face size can be specified in absolute (pixel distance) or relative value (pixel distance) relative to image size (max(image_height, image_width)) and is important parameter for face detection. SDK can detect faces of various size but there is a lower limit of face size. Upper limit on the face size is not defined. The recommended face size is more than 50 pixels. SDK face processing or recognition functions have the most accurate results when this recommendation is fulfilled. Face area is closely related to the face size. It is an area around a face defined by a bounding rectangle with width = 4 x face_size, height = width / 0.75 (according to ISO/IEC 19794-5 standard, section 9.2). The Point which is the geometric center between eyes is positioned in the face area in position X_Pos, Y_Pos, where Y_Pos = 0.6f x width, and X_Pos relies on the head yaw rotation. The main reason for this is to have the whole head in the face area no matter what the head rotation is.
Image above shows face area visualizations of face areas (green boxes) for face in various positions. The face size is defined by distance shown as the red arrow. There are shown different positions of face area according to the face yaw rotation in (a),(b) and (c). Positions of the eyes centers in the face areas are the same in the Y direction (Y_Pos) but changes in the X direction (X_Pos1, X_Pos2, X_Pos3). Width and Height is the same in all three cases. The face area size relative to image area size can specify sizes of faces that should be detected.
If image above has resolution of 730x470 pixels (image_area_size = 730 x 470 = 343100) and face_size is 70 pixels (face_area_width = 70 x 4 = 280, face_area_height = face_area_width / 0.75 = 373, face_area_size = 104440), then relative image size is relative_image_size = 104440 / 343100 = 0.304 (30.4%). Face area is marked with green box and face size with red arrow. Sometimes, when faces are close to image boundaries, their face areas can get out of the image boundaries. Some application may want to find these faces (and filter them out). Due to this reason each face has attribute related to face area visible in image (FaceRelativeAreaInImage).
In the image above relative values are (a) 0.30, (b) 0.5, (c) 1
SDK can detect faces of various rotations. However various face detection modes imply different ranges of detectable faces
| fast | accurate / balanced / accurate server | |
|---|---|---|
| Roll | <-15, 15 > | <-45, 45> |
| Yaw | <-30, 30 > | <-90, 90> |
| Pitch | <-30, 30 > | <-45, 45> |
Prior to further processing each face in FaceCapture MUST be detected via FaceDetector. SDK provides following detection modes:
Neural network face detector and facial features detector with very high accuracy.
It is slower than balanced mode.
Total size of solvers is 27 MB.
References face-detector-accurate.solver, face-detector-landmarks-mob-0.50.solver, face-detector-eye-validation.solver
Neural network face detector and facial features detector with good accuracy.
It is slower than fast mode.
Total size of solvers is 14 MB.
References face-detector-accurate.solver, face-detector-landmarks-mob-0.25.solver, face-detector-eye-validation.solver
The fastest face detector in combination with the fastest face validators and facial features detectors are used when fast mode is used.
Some faces that are partially occluded faces or faces with sunglasses may be missed. However the speed performance of the face detection is much better as when other modes are used.
Total size of solvers is 559 kB.
References face-detector-fast.solver, face-detector-eye-validation.solver, face-detector-landmarks-fast.solver
Using of different modes can adjust trade-off between speed and accuracy of face detection. Face detection accuracy has two meaning:
The output of example
Once a face is detected, a Face object is provided. It is possible to set various crop methods via Face::Crop() method.
The output of example
It is possible to detect multiple faces (up to 16) in FaceCapture.
The faces are detected with function FaceCapture::DetectWith.
The output of example are detected faces
and unique faces
We provide Internal Innovatrics template for Face. The main goal is to create template for further processing e.g. 1:1 Verification.
We provide verification of face templates. The main goal is to calculate Similarity Score for given probe and gallery templates. The examples uses same image for probe and gallery
It is possible to distinguish face and background once face is detected.
The output of example
The International Civil Aviation Organization (ICAO) defines global requirements for facial images used in machine-readable travel documents (MRTDs) in ICAO Doc 9303. These requirements describe how a compliant face image must be captured and presented: frontal pose, neutral expression, proper illumination, uniform background, correct head size and positioning. Compliant images ensure easy use for ID document personalization and good performance in both human verification and computer automated facial recognition.
These ICAO requirements are technically implemented and formalized in:
ISO/IEC 19794-5 defines four face image types: Basic (record format only), Frontal (with Full Frontal and Token Frontal subtypes), and specifies scene requirements (pose, expression, lighting, background, etc.), photographic requirements (exposure, focus, face position, head size), digital requirements (color profile, resolution, geometry), and format requirements (encoding, compression).
ISO/IEC 29794-5 defines a canonical face image as a face image conformant to an external standard or specification of a reference face image in most civil identity and travel document applications this corresponds to the ISO/IEC 39794-5 portrait specification, which reflects ICAO Doc 9303. [8]
Enrollment provides two implementations for assessing face image quality against ICAO/ISO requirements:
When compliance with the standard or interchange with other systems is required, prefer OFIQ, as it is officially recognized by ISO/IEC 29794-5. The Innovatrics implementation is well-suited when fine-grained control over individual attributes or integration with other SDK features is needed.
The SDK (Innovatrics propietary implementation) is able to check all mandatory requirements and best practice recommendations of the ICAO Document 9303 specification and the ISO/IEC 19794-5 standard for the interoperable full frontal face image type, and of other relevant international standards (e.g. ANSI/INCITS 385-2004).
Once face is detected and Face object is provided, it is possible to get Face attributes.
ISO/IEC 29794-5 recognizes OFIQ (Open Face Image Quality) as the reference implementation for computing face image quality. [8]
OFIQ computes [8] :
The unified quality score predicts the expected recognition performance of a face image under the assumption that it will be compared against a canonical ISO/ICAO-compliant portrait image. When face images are being collected from many biometric capture subjects, the unified quality score and quality components can be aggregated to summarize the effectiveness of the collection (e.g. mean or proportion with low or high value), to reveal site-specific problems or population effects, or as a response variable in A-B tests or trend analysis. [8] Higher scores indicate stronger conformance to ISO/ICAO portrait requirements and higher expected face recognition performance.
The detected face by OFIQFace from example
The Face allows also retrieval of facial keypoints.
We are providing following passive liveness calculations:
The Face::PassiveLivenessMode::FAST operates with higher speed but lower accuracy, whereas the Face::PassiveLivenessMode::ACCURATE is slower but provides increased accuracy, irrespective of the chosen FaceDetector::Config.
Example:
Imagine a dataset of 10,000 bona-fide presentation photos (real faces) and 1,000 attack presentation photos, where measurements were made. Threshold of 89.5, which is at working point of 1% APCER results in 3.7% BPCER. That means there are 10 attack presentation photos marked as bona-fide (false accepts) and 370 bona-fide photos are marked as attacks (false rejects).
| Use case type | Threshold | Performance |
|---|---|---|
| Convenience (minimum rejected attempts) | 80.0 | 2.75% APCER @ 1 % BPCER |
| Balanced (equal error rate) | 83.2 | 1.76% both APCER & BPCER |
| Security (minimum accepted frauds) | 86.2 | 3.62% BPCER @ 1% APCER |
In some cases the meaningfulness of attribute value relies on values of other attributes. We provide following reliability checks
We provide following best practice checks
It is possible to convert Face to ISO image compliant with ISO 19794-5:2011 and back from image to FaceCapture.
| using FaceSimilarityScore = unsigned int |
It is similarity score between face Templates.
Score is 0-100 where 100 represents most similar templates.
When the matching score is higher then certain score threshold then the face images belongs to the same person with high probability. The matching score range is <0, 100>. Its values can be interpreted as follows:
Scores values in range (60, 80) are weighted average of score_L and score_H. This normalization help the users to select the score threshold according their needs. If it is too low e.g. score threshold is 30, then the chance of false accepted non-matching faces is quite high (FAR=10^-3). When it is too high e.g. score threshold is 90, then the chance of false rejected matching faces is quite high (FRR=0.7). For face recognition following recommendations are given:
See Similarity Score.
|
strong |
It indicates the class of device technology used to acquire the captured biometric sample [6].
|
strong |
Defines different Crop methods.
| Enumerator | |
|---|---|
| TOKEN_NOT_FRONTAL | Image cropping method similar to TOKEN but works quite well even on non-frontal images It will produce FaceImageType::BASIC. |
| FULL | Full Frontal Image cropping method defined in ISO/IEC 19794-5 standard. Cropping requirements specified to allow for full capture of face and shoulders. Consistent with most current mug-shot and passport standards. Recommended for use with ePassports, both on the printed passport and stored in the chip. [10] It will produce FaceImageType::FULL_FRONTAL image. |
| TOKEN | Token Frontal Image cropping method defined in ISO/IEC 19794-5 standard. Eye positions in fixed positions on image. The image aspect ratio is fixed. Storage size is reduced. A 90 or 120 pixels from eye to eye Token can be used in the MRTD chip. [10] It will produce FaceImageType::TOKEN_FRONTAL image. |
| FULL_NOT_ALIGNED | Crops bounding box provided by FaceCrop::FULL method as is from original FaceCapture. It will produce FaceImageType::BASIC. It is used to get face from original FaceCapture as is. |
|
strong |
Several face image types are introduced to define categories that satisfy requirements of some applications [6].
| Enumerator | |
|---|---|
| BASIC | This is the fundamental Face Image Type that specifies a record format including header and representation data. All Face Image Types adhere to the properties of this type. No mandatory scene, photographic and digital requirements are specified for this image type. [6] |
| FULL_FRONTAL | A Face Image Type that specifies frontal images with sufficient resolution for human examination as well as reliable computer face recognition. This type of Face Image Type includes the full head with all hair in most cases, as well as neck and shoulders. This image type is suitable for permanent storage of the face information, and it is applicable to portraits for passport, driver license, and "mugshot" images. [6]
|
| TOKEN_FRONTAL | A Face Image Type that specifies frontal images with a specific geometric size and eye positioning based on the width and height of the image. This image type is suitable for minimizing the storage requirements for computer face recognition tasks such as verification while still offering vendor independence and human verification (versus human examination which requires more detail) capabilities. [6]
|
| POST_PROCESSED_FRONTAL | Applying digital post-processing to a captured image can modify this image in a way that it is more suitable for automatic face recognition. The Post-processed Frontal Face Image Type is thought of as the interchange format for these kinds of facial images. [6] |
|
staticconstexpr |
Function converts FaceCaptureDeviceTechnology to ISO capture technology.
| printCaptureDeviceTechnology | FaceCaptureDeviceTechnology |
| EnrollmentInvalidArgumentException | for invalid conversion |
References STATIC_PHOTOGRAPH_FROM_DIGITAL_CAMERA, STATIC_PHOTOGRAPH_FROM_SCANNER, STATIC_PHOTOGRAPH_FROM_UNKNOWN_SOURCE, UNKNOWN, VIDEO_FRAME_FROM_ANALOGUE_CAMERA, VIDEO_FRAME_FROM_DIGITAL_CAMERA, and VIDEO_FRAME_FROM_UNKNOWN_SOURCE.
|
staticconstexpr |
Function converts FaceImageType to ISO face image type as defined in iso_19794-5_2011.
| faceImageType | FaceImageType |
| EnrollmentInvalidArgumentException | for invalid conversion |
References BASIC, FULL_FRONTAL, POST_PROCESSED_FRONTAL, and TOKEN_FRONTAL.
|
staticconstexpr |
Function validates the value of FaceCrop enum.
| faceCrop | face crop method |
References FULL, FULL_NOT_ALIGNED, TOKEN, and TOKEN_NOT_FRONTAL.
Referenced by FaceCropConfiguration::SetCropMethod().
|
staticconstexpr |
Function converts ISO capture technology to FaceCaptureDeviceTechnology.
| isoCaptureDeviceTechnology | iso capture technology |
| EnrollmentInvalidArgumentException | for invalid conversion |
References STATIC_PHOTOGRAPH_FROM_DIGITAL_CAMERA, STATIC_PHOTOGRAPH_FROM_SCANNER, STATIC_PHOTOGRAPH_FROM_UNKNOWN_SOURCE, UNKNOWN, VIDEO_FRAME_FROM_ANALOGUE_CAMERA, VIDEO_FRAME_FROM_DIGITAL_CAMERA, and VIDEO_FRAME_FROM_UNKNOWN_SOURCE.
Referenced by FaceCapture::FromIsoImage().
|
staticconstexpr |
Function converts ISO face image type to FaceImageType.
| faceImageType | iso face image type |
| EnrollmentInvalidArgumentException | for invalid conversion |
References BASIC, FULL_FRONTAL, POST_PROCESSED_FRONTAL, and TOKEN_FRONTAL.