DOT iOS Face library
v8.4.0
Introduction
DOT iOS Face as a part of the DOT iOS libraries family provides components for the digital onboarding process using the latest Innovatrics IFace image processing library. It wraps the core functionality of IFace library to a higher-level module which is easy to integrate into an iOS application.
Requirements
DOT iOS Face has the following requirements:
Xcode 15.1+
iOS 12.0+
Swift or Objective-C
CocoaPods or Swift Package Manager
Distribution
Modularization
DOT iOS Face is divided into core module and optional feature modules. This enables you to reduce the size of the library and include only modules that are actually used in your use case.
DOT iOS Face is divided into following modules:
dot-face-core
(Required) - provides API for all the features and functionalities.dot-face-detection-fast
(Optional) - enables the fast face detection feature.dot-face-detection-balanced
(Optional) - enables the balanced face detection feature.dot-face-verification
(Optional) - enables template extraction and verification feature.dot-face-eye-gaze-liveness
(Optional) - enables the eye gaze liveness feature.dot-face-passive-liveness
(Optional) - enables the passive liveness feature.dot-face-background-uniformity
(Optional) - enables the background uniformity evaluation feature.dot-face-expression-neutral
(Optional) - enables the face expression evaluation feature.
Each feature module can have other modules as their dependency and cannot be used without it, see the table below. Modules dot-face-detection-fast
and dot-face-detection-balanced
belong to one category, therefore only one of them can be activated.
Module | Dependency |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dot-face-detection-* stands for either dot-face-detection-fast or dot-face-detection-balanced . |
For example, if you want to use Eye Gaze Liveness you will have to use these three modules: dot-face-eye-gaze-liveness
, dot-face-detection-*
(required by dot-face-eye-gaze-liveness
) and dot-face-core
(always required).
Swift Package Manager
DOT iOS Face can be easily integrated into Xcode project in: Project → Package Dependencies.
Use https://github.com/innovatrics/dot-ios-sdk-spm.git
repository and choose the version you want to use. There you can select set of DotFace*
packages you want to use. All the required dependencies will be downloaded with the selected package set.
Cocoapods
In order to integrate DOT iOS Face into your project, the first step is to insert the following line of code on top of your Podfile
.
source 'https://github.com/innovatrics/innovatrics-podspecs'
Then, add the module(s) which you want to use to your Podfile
. You also need to add dependencies of the module(s) you want to use.
Following Podfile
shows how to use all modules:
source 'https://github.com/innovatrics/innovatrics-podspecs'
use_frameworks!
target 'YOUR_TARGET' do
pod `dot-face-core`
pod `dot-face-detection-fast`
pod 'dot-face-verification'
pod 'dot-face-eye-gaze-liveness'
pod 'dot-face-passive-liveness'
pod `dot-face-background-uniformity`
pod `dot-face-expression-neutral`
end
Following Podfile
shows how to use only dot-face-detection-fast
module:
source 'https://github.com/innovatrics/innovatrics-podspecs'
use_frameworks!
target 'YOUR_TARGET' do
pod `dot-face-core`
pod 'dot-face-detection-fast'
end
If a CocoaPods problem with
|
Supported Architectures
DOT iOS Face provides all supported architectures in the distributed XCFramework package.
Device binary contains: arm64
.
Simulator binary contains: x86_64
, arm64
.
Licensing
In order to use DotSdk in your iOS application, it must be licensed. The license can be compiled into the application as it is bound to Bundle Identifier specified in the General tab in Xcode.
The Bundle ID can be also retrieved in runtime by calling DotSdk.shared.bundleId
.
In order to obtain the license, please contact your Innovatrics’ representative specifying Bundle ID. After you have obtained your license file, add it to your Xcode project and use it during the DotSdk initialization, as shown below.
Permissions
Set the following permission in Info.plist
:
<key>NSCameraUsageDescription</key>
<string>Your usage description</string>
Basic Setup
Initialization
Before using any of the components, you need to initialize DOT SDK with the license, DotFaceLibrary
object and list of feature modules you want to use. Each module can be accessed by its singleton *Module
class. DOT iOS Face is distributed as a set of XCFramework packages. Each module is distributed as a single XCFramework package, see the table below.
Module | Class | XCFramework |
| DotFaceDetectionFastModule | DotFaceDetectionFast.xcframework |
| DotFaceDetectionBalancedModule | DotFaceDetectionBalanced.xcframework |
| DotFaceVerificationModule | DotFaceVerification.xcframework |
| DotFaceEyeGazeLivenessModule | DotFaceEyeGazeLiveness.xcframework |
| DotFacePassiveLivenessModule | DotFacePassiveLiveness.xcframework |
| DotFaceBackgroundUniformityModule | DotFaceBackgroundUniformity.xcframework |
| DotFaceExpressionNeutralModule | DotFaceExpressionNeutral.xcframework |
DOT SDK Sample shows how to initialize DOT SDK with DotFaceLibrary
and all feature modules. DotSdk.shared.initialize()
method should be called on background thread.
After you have successfully finished initialization, you can use all added features by importing only DotFaceCore
Swift module in your source files. Keep in mind that if you try to use any feature which was not added during initialization DOT SDK will generate fatal error. DOT iOS Face requires small amount of disk space in the Caches directory for the initialization (approximately 10KB), if there is not enough disk space the initialization will fail.
Deinitialization
When you have finished using the DOT iOS Face, it is usually a good practice to deinitialize it in order to free the memory. You can deinitialize DOT iOS Face only after the complete process is finished and not within the life cycle of individual components. This can be performed using the DotSdk.shared.deinitialize()
method. If you want to use the DOT iOS Face components again, you need to call DotSdk.shared.initialize()
again.
Logging
DOT iOS Face supports logging using a global Logger
class. You can set the log level as follows:
import DotFaceCore
Logger.logLevel = .debug
Log levels:
debug
info
warning
error
none
Each log message contains DotFace
tag. Keep in mind that logging should be used just for debugging purposes.
Components
Overview
DOT iOS Face provides both non-UI and UI components. Non-UI components are aimed to be used by developers who want to build their own UI using the DOT iOS Face functionality. UI components are build on top of non-UI components. Components having UI are available as UIViewController
classes and can be embedded into the application’s existing UI or presented using the standard methods.
List of Non-UI Components
- FACE DETECTOR
A component for performing face detection on an image, creating templates and evaluating face attributes.
- TEMPLATE MATCHER
A component for performing template matching.
- FACE MATCHER
A component for performing face matching.
List of UI Components
- FACE AUTO CAPTURE
A visual component for capturing good quality face images and creating templates suitable for matching.
- FACE SIMPLE CAPTURE (Deprecated)
A visual component for capturing face images and creating templates suitable for matching without considering image quality requirements.
- EYE GAZE LIVENESS
A visual component which performs the liveness check based on object tracking. An object is shown on the screen and the user is instructed to follow the movement of this object with her/his eyes.
- SMILE LIVENESS
A visual component which performs the liveness check based on the changes in the face expression.
- MAGNIFEYE LIVENESS
A visual component for capturing images suitable for MagnifEye liveness evaluation.
Non-UI Components
Face Detector
The FaceDetector
class provides the face detection functionality. Face detection stops when maximumFaces
is reached.
This component requires dot-face-detection-*
module.
Create FaceDetector
:
let faceDetector = FaceDetector()
To perform detection, call the following method on the background thread:
let detectedFaces = try faceDetector.detect(faceImage: faceImage, query: .init(), limit: 10)
Template Matcher
In order to match face templates (1:1), use the TemplateMatcher
class. The recommended approach is to create face templates using FaceDetector
or Face Auto Capture component and use only templates for matching.
This component requires dot-face-verification
module.
Create TemplateMatcher
:
let templateMatcher = TemplateMatcher()
To perform matching, call the following method on the background thread:
let result = try? matcher.match(referenceTemplate: referenceTemplate, probeTemplate: probeTemplate)
Face Matcher
In order to match face images (1:1), use the FaceMatcher
class. It is also possible to match a face image against a template, which is a recommended approach if you already have an available reference template.
This component requires dot-face-verification
module.
Create FaceMatcher
:
let faceMatcher = FaceMatcher()
To perform matching, call one of the following methods on the background thread:
let result = try? faceMatcher.match(referenceFaceImage: referenceImage, probeFaceImage: probeImage)
let result = try? faceMatcher.match(referenceTemplate: referenceTemplate, probeFaceImage: probeImage)
UI Components
Camera handling
Camera lifecycle
DOT iOS Face view controller will start the camera in viewWillAppear(:)
lifecycle method.
DOT iOS Face view controller will stop the camera in viewDidDisappear(:)
lifecycle method.
Camera permission
DOT iOS Face view controller will check the camera permission right before the camera is started. If the camera permission is granted the view controller will start the camera. If the camera permission is denied the view controller will call
*ViewControllerNoCameraPermission(:)
callback. Implement this callback in order to navigate the user further in your app workflow. If the camera permission is not determined the view controller will use iOS API -
AVCaptureDevice.requestAccess(for: .video) method to request the camera permission. This method will present the system
dialog to the user of the app. The user of the app can grant or deny the camera permission and then the view controller will proceed the same way as it does during the camera permission check as was explained at the beginning of this
section.
View Controller Configuration
Components containing UI are embedded into the application as view controllers. All view controllers can be embedded into your own view controller or presented directly. Each view controller can be configured using its *Configuration
class and each view controller can have its appearance customized using its *Style
class.
To present view controller:
let viewController = FaceAutoCaptureViewController.create(configuration: .init(), style: .init())
viewController.delegate = self
self.present(viewController, animated: true, completion: nil)
To embed view controller into your view controller:
override func viewDidLoad() {
super.viewDidLoad()
addChild(viewController)
view.addSubview(viewController.view)
viewController.view.translatesAutoresizingMaskIntoConstraints = false
viewController.didMove(toParent: self)
NSLayoutConstraint.activate([
viewController.view.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
viewController.view.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor),
viewController.view.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor),
viewController.view.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor)
])
}
Safe Area
DOT iOS Face view controllers ignore safe area layout guide when they layout their subviews. Therefore, for example if you push DOT iOS Face view controller using UINavigationController
, you will get incorrect layout. If you want to respect safe area layout guide, you should embed DOT iOS Face view controller in a container view controller and setup the layout constraints accordingly.
Face size ratio interval
If a face present in an image has the face size out of the face size ratio interval, it won’t be detected. Please note that a wider interval results in a lower performance (detection FPS).
Face Auto Capture
The view controller with instructions for obtaining quality face images suitable for further processing. This component requires dot-face-detection-*
module. If you want to evaluate background uniformity during the face auto capture process, you will also need dot-face-background-uniformity
module. If you want to evaluate face mask during the face auto capture process, you will need dot-face-detection-balanced
module.
In order to configure the behaviour of FaceAutoCaptureViewController
use FaceAutoCaptureViewController.Configuration
.
For face verification scenarios, a convenient preset configuration simple
is available within FaceAutoCaptureViewController.Configuration.Presets
.
In order to customize the appearance of FaceAutoCaptureViewController
use FaceAutoCaptureViewController.Style
.
You can handle the FaceAutoCaptureViewController
events using its delegate FaceAutoCaptureViewControllerDelegate
.
Start the face auto capture process:
Check whether DOT iOS Face is initialized.
If DOT iOS Face is initialized, you can call the
start()
method immediately. If not, you need to initialize DOT iOS Face and callstart()
in theDotFaceLibraryDelegate.dotFaceLibraryInitializationFinished()
callback.
In case you want to handle detection data, implement faceAutoCaptureViewController(:processed:)
delegate callback. This callback is called with each processed camera frame. When the face auto capture process finishes successfully, the result will be returned via the faceAutoCaptureViewController(:captured:)
callback.
In case you want to force the capture event, call the requestCapture()
method. The most recent image will be returned via the faceAutoCaptureViewController(:captured:)
callback asynchronously.
Call start()
method in order to start over the face auto capture process. You can also call start()
method to stop and start over ongoing process.
In case you want to stop the face auto capture process prematurely, call the stopAsync()
method. The callback in the method argument indicates that the processing is over.
Once the face auto capture process has started, it is not safe to deinitialize the DOT iOS Face until one of these callbacks is called:
faceAutoCaptureViewController(:captured:)
callback argument of
stopAsync()
method
Quality Attributes of the Output Image
You may adjust quality requirements for the output image. To perform this, you can use pre-defined builders - QualityAttributeThresholds.Builder
- from QualityAttributeThresholdPresets
with recommended thresholds and pass it to FaceAutoCaptureViewController.Configuration
by setting the qualityAttributeThresholds
. You can also create your own instance of QualityAttributeThresholds
from scratch or based on pre-defined builders according to your needs.
Possible ways how to create QualityAttributeThresholds
:
// The standard preset
let standard = FaceAutoCaptureViewController.Configuration.QualityAttributeThresholdPresets.standard.build()
// Modified thresholds based on the standard preset
let modified = try FaceAutoCaptureViewController.Configuration.QualityAttributeThresholdPresets.standard
.minConfidence(minConfidence)
.minSharpness(nil)
.build()
// Custom thresholds
let custom = try FaceAutoCaptureViewController.Configuration.QualityAttributeThresholds.Builder()
.minConfidence(minConfidence)
.minSharpness(minSharpness)
.build()
Available presets (pre-defined builders with thresholds) in QualityAttributeThresholdPresets
:
standard
- The resulting image suitable for matching. See the thresholds.passiveLiveness
- The resulting image suitable for evaluation of the passive liveness. See the thresholds.icao
- The resulting image passing ICAO checks. See the thresholds.
Face Simple Capture (Deprecated)
The view controller for obtaining images for matching without considering any image quality requirements. This component requires dot-face-detection-*
module.
In order to configure the behaviour of FaceSimpleCaptureViewController
use FaceSimpleCaptureViewController.Configuration
.
In order to customize the appearance of FaceSimpleCaptureViewController
use FaceSimpleCaptureViewController.Style
.
You can handle the FaceSimpleCaptureViewController
events using its delegate FaceSimpleCaptureViewControllerDelegate
.
Start the face simple capture process:
Check whether DOT iOS Face is initialized.
If DOT iOS Face is initialized, you can call the
start()
method immediately. If not, you need to initialize DOT iOS Face and callstart()
in theDotFaceLibraryDelegate.dotFaceLibraryInitializationFinished()
callback.
You need to call requestCapture()
method in order to request a capture. The component will capture a face as soon as it is detected. The result will be returned via the faceSimpleCaptureViewController(:captured:)
callback.
In case you want to stop the face simple capture process prematurely, call the stopAsync()
method. The callback in the method argument indicates that the processing is over.
Once the face simple capture process has started, it is not safe to deinitialize the DOT iOS Face until one of these callbacks is called:
callback argument of
stopAsync()
method
Eye Gaze Liveness
The view controller with a moving or fading object on the screen. This component requires dot-face-eye-gaze-liveness
module.
In order to configure the behaviour of EyeGazeLivenessViewController
use EyeGazeLivenessConfiguration
.
In order to customize the appearance of EyeGazeLivenessViewController
use EyeGazeLivenessStyle
.
You can handle the EyeGazeLivenessViewController
events using its delegate EyeGazeLivenessViewControllerDelegate
.
You can customize the color of the default objectImage
or you can replace the default objectImage
with custom image.
Start the eye gaze liveness process:
Check whether DOT iOS Face is initialized.
If DOT iOS Face is initialized, you can call the
start()
method immediately. If not, you need to initialize DOT iOS Face and callstart()
in theDotFaceLibraryDelegate.dotFaceLibraryInitializationFinished()
callback.
The liveness check follows corners: [WrappedEyeGazeLivenessCorner]
and renders an object in the specified corners of the screen.
For a better user experience, it is recommended to provide the user more attempts, therefore the size of corners: [WrappedEyeGazeLivenessCorner]
should be greater than four. However, this should be limited, as it is better to terminate the process if the user is failing in many corners. The recommended way to generate corners is to use a RandomEyeGazeLivenessCornersGenerator
.
In case you want to handle detection data, implement eyeGazeLivenessViewController(:processed:)
callback. This callback is called with each processed camera frame. The process is automatically finished as soon as there are four valid images in corner positions. After that, eyeGazeLivenessViewController(:finished:)
callback is called.
If the face can’t be detected anytime during the process or if the eyes can’t be detected in the first corner, the process will be terminated with the eyeGazeLivenessViewControllerCriticalFacePresenceLost()
callback.
The process fails with the eyeGazeLivenessViewControllerAllCornersUsed(:)
callback when all the corners
were displayed but it wasn’t possible to collect four valid images in corner positions.
In case you want to stop the eye gaze liveness process prematurely, call the stopAsync()
method. The callback in the method argument indicates that the processing is over.
Once the eye gaze liveness process has started, it is not safe to deinitialize the DOT iOS Face until one of these callbacks is called:
eyeGazeLivenessViewController(:finished:)
eyeGazeLivenessViewControllerCriticalFacePresenceLost()
eyeGazeLivenessViewControllerAllCornersUsed()
callback argument of
stopAsync()
method
Server-side evaluation
If you want to perform a server side validation of the eye gaze liveness, please follow this recommended approach. The object movement is generated by DIS and then rendered on the device using corners
. When the process is finished successfully, the EyeGazeLivenessResult.content
is transferred to DIS for evaluation.
Smile Liveness
The view controller which performs the liveness check based on the changes in the face expression. This component requires dot-face-expression-neutral
module.
In order to configure the behaviour of SmileLivenessViewController
, use SmileLivenessViewController.Configuration
.
In order to customize the appearance of SmileLivenessViewController
, use SmileLivenessViewController.Style
.
You can handle the SmileLivenessViewController
events using its delegate SmileLivenessViewControllerDelegate
.
Start the smile liveness process:
Check whether DOT iOS Face is initialized.
If DOT iOS Face is initialized, you can call the
start()
method immediately. If not, you need to initialize DOT iOS Face and callstart()
in theDotFaceLibraryDelegate.dotFaceLibraryInitializationFinished()
callback.
In case you want to handle detection data, implement smileLivenessViewController(:processed:)
delegate callback. This callback is called with each processed camera frame. The process is automatically finished when both the neutral and the smile face expression images are captured. After that, smileLivenessViewController(:finished:)
callback is called and the passive liveness and face matching can be evaluated.
If the face presence is lost after the neutral face expression image is captured, smileLivenessViewControllerCriticalFacePresenceLost(:)
callback is called. If the face presence between the neutral and the smile face expression images is required, call start()
method to restart the process. Otherwise the callback can be ignored.
Call start()
method in order to start over the smile liveness process. You can also call start()
method to stop and start over ongoing process.
In case you want to stop the smile liveness process prematurely, call the stopAsync()
method. The callback in the method argument indicates that the processing is over.
Once the smile liveness process has started, it is not safe to deinitialize the DOT iOS Face until one of these callbacks is called:
smileLivenessViewController(:finished:)
callback argument of
stopAsync()
method
MagnifEye Liveness
The view controller with instructions for obtaining face data suitable for MagnifEye liveness evaluation. This component requires dot-face-detection-*
module.
In order to configure the behaviour of MagnifEyeLivenessViewController
, use MagnifEyeLivenessViewController.Configuration
.
In order to customize the appearance of MagnifEyeLivenessViewController
, use MagnifEyeLivenessViewController.Style
.
You can handle the MagnifEyeLivenessViewController
events using its delegate MagnifEyeLivenessViewControllerDelegate
.
Start the MagnifEye liveness process:
Check whether DOT iOS Face is initialized.
If DOT iOS Face is initialized, you can call the
start()
method immediately. If not, you need to initialize DOT iOS Face and callstart()
in theDotFaceLibraryDelegate.dotFaceLibraryInitializationFinished()
callback.
In case you want to handle detection data, implement magnifEyeLivenessViewController(:processed:)
callback. This callback is called with each processed camera frame. When the MagnifEye liveness process finishes successfully, the result will be returned via the magnifEyeLivenessViewController(:finished:)
callback.
Call start()
method in order to start over the MagnifEye liveness process. You can also call start()
method to stop and start over ongoing process.
In case you want to stop the MagnifEye liveness process prematurely, call the stopAsync()
method. The callback in the method argument indicates that the processing is over.
Once the MagnifEye liveness process has started, it is not safe to deinitialize the DOT iOS Face until one of these callbacks is called:
magnifEyeLivenessViewController(:finished:)
callback argument of
stopAsync()
method
Customization of UI Components
Localization
String resources can be overridden in your application and alternative strings for supported languages can be provided following these two steps:
Add your own
Localizable.strings
file to your project using standard iOS localization mechanism. To change a specific text override corresponding key in thisLocalizable.strings
file.Set the localization bundle to the bundle of your application (preferably during the application launch in your
AppDelegate
).
Use this setup if you want to use standard iOS localization mechanism, which means your iOS application uses system defined locale.
import DotFaceCore
Localization.bundle = .main
Custom Localization
You can override standard iOS localization mechanism by providing your own translation dictionary and setting the Localization.useLocalizationDictionary
flag to true
. Use this setup if you do not want to use standard iOS localization mechanism, which means your iOS application ignores system defined locale and uses its own custom locale.
import DotFaceCore
guard let localizableUrl = Bundle.main.url(forResource: "Localizable", withExtension: "strings", subdirectory: nil, localization: "de"),
let dictionary = NSDictionary(contentsOf: localizableUrl) as? [String: String]
else { return }
Localization.useLocalizationDictionary = true
Localization.localizationDictionary = dictionary
"dot_face.face_auto_capture.instruction.face_not_detected" = "Position your face into the circle";
"dot_face.face_auto_capture.instruction.face_out_of_bounds" = "Center your face";
"dot_face.face_auto_capture.instruction.size_too_large" = "Move back";
"dot_face.face_auto_capture.instruction.size_too_small" = "Move closer";
"dot_face.face_auto_capture.instruction.brightness_too_high" = "Turn towards light";
"dot_face.face_auto_capture.instruction.brightness_too_low" = "Turn towards light";
"dot_face.face_auto_capture.instruction.contrast_too_high" = "Turn towards light";
"dot_face.face_auto_capture.instruction.contrast_too_low" = "Turn towards light";
"dot_face.face_auto_capture.instruction.shadow_too_high" = "Turn towards light";
"dot_face.face_auto_capture.instruction.sharpness_too_low" = "Turn towards light";
"dot_face.face_auto_capture.instruction.unique_intensity_levels_too_low" = "Turn towards light";
"dot_face.face_auto_capture.instruction.glasses_present" = "Remove glasses";
"dot_face.face_auto_capture.instruction.background_nonuniform" = "Plain background required";
"dot_face.face_auto_capture.instruction.expression_neutral_too_high" = "Smile :)";
"dot_face.face_auto_capture.instruction.expression_neutral_too_low" = "Keep neutral expression";
"dot_face.face_auto_capture.instruction.pitch_too_high" = "Lower your chin";
"dot_face.face_auto_capture.instruction.pitch_too_low" = "Lift your chin";
"dot_face.face_auto_capture.instruction.yaw_too_right" = "Look left";
"dot_face.face_auto_capture.instruction.yaw_too_left" = "Look right";
"dot_face.face_auto_capture.instruction.eyes_too_closed" = "Open your eyes";
"dot_face.face_auto_capture.instruction.mouth_too_open" = "Close your mouth";
"dot_face.face_auto_capture.instruction.mask_present" = "Remove mask";
"dot_face.face_auto_capture.instruction.candidate_selection" = "Stay still...";
"dot_face.face_auto_capture.instruction.device_pitch_too_high" = "Hold your phone at eye level";
"dot_face.eye_gaze_liveness.instruction.initial_state" = "Watch the object";
"dot_face.eye_gaze_liveness.instruction.device_pitch_too_high" = "Hold your phone at eye level";
"dot_face.eye_gaze_liveness.instruction.shadow_too_high" = "Turn towards light";
"dot_face.eye_gaze_liveness.instruction.face_not_detected" = "Look straight";
"dot_face.eye_gaze_liveness.instruction.size_too_large" = "Move back";
"dot_face.eye_gaze_liveness.instruction.size_too_small" = "Move closer";
"dot_face.magnifeye_liveness.instruction.eye_centering" = "Fit your eye into square";
Common Classes
ImageSize
Class which represents a size of an image. To create an instance:
let imageSize = ImageSize(width: 100, height: 100)
BgrRawImage
Class which represents an image.
To create an instance from CGImage
:
let bgrRawImage = BgrRawImageFactory.create(cgImage: cgImage)
To create CGImage
from BgrRawImage
:
let cgImage = CGImageFactory.create(bgrRawImage: bgrRawImage)
FaceImage
Class which represents a face image and can be used for face detection and matching. To create an instance:
let faceSizeRatioInterval = try IntervalDouble(min: 0.05, max: 0.5)
let faceImage = try FaceImage(bgrRawImage: bgrRawImage, faceSizeRatioInterval: faceSizeRatioInterval)
minFaceSizeRatio
and maxFaceSizeRatio
, or commonly face size ratio, must be equal or greater than minimum valid face size ratio.
Security guidelines
The effectiveness of our video injection prevention feature can be strengthened if the application that implements it includes security recommendations from Apple: App integrity. Which ensure its authenticity that it was downloaded only from the App Store and the transmission of its sensitive data cannot be modified.
OWASP Mobile Application Security
We also strongly recommend following the OWASP Mobile Application Security guidelines. The OWASP Mobile Application Security (MAS) flagship project provides a security standard for mobile apps (OWASP MASVS) and a comprehensive testing guide (OWASP MASTG) that covers the processes, techniques, and tools used during a mobile app security test, as well as an exhaustive set of test cases that enables testers to deliver consistent and complete results.
Appendix
Changelog
8.4.0 - 2024-09-11
Technical release. No changes.
8.3.2 - 2024-08-16
Fixed
Unnecessary deprecated warnings.
8.3.1 - 2024-08-15
Technical release. No changes.
8.3.0 - 2024-08-08
Added
Property
EyeGazeLivenessViewController.Configuration.minValidSamplesCount
.
8.2.1 - 2024-07-31
Fixed
EyeGazeLivenessViewController
could crash when presented multiple times.Default value for argument
isFacePresenceRequired
in methodFaceAutoCaptureViewController.requestCapture()
.
8.2.0 - 2024-07-30
Added
Nested enumerator
Error
to all public components. It groups all possible errors that might be thrown by a component.Enum
CaptureMode
.Property
FaceAutoCaptureViewController.Configuration.captureMode
.Property
FaceAutoCaptureViewController.Configuration.isPlaceholderVisible
.Class
FaceAutoCaptureViewController.Configuration.Presets
.Method argument
isFacePresenceRequired
to methodFaceAutoCaptureViewController.requestCapture()
.
Changed
Face Simple Capture UI component is deprecated.
Renamed
FaceSimpleCaptureViewController.Style.trackingCircleColor
to.detectionLayerColor
.
Fixed
Camera session crashed in some rare cases.
Face evaluation crashed in some cases.
8.1.0 - 2024-07-09
Technical release. No changes.
8.0.0 - 2024-06-27
Added
Property
FaceAutoCaptureViewController.Style.instructionCandidateSelectionTextColor
.Property
FaceAutoCaptureViewController.Style.instructionCandidateSelectionBackgroundColor
.Class
FaceDetector.Face
.Class
FaceDetectionQuery
.Property
FaceAutoCaptureViewController.Configuration.query
.Property
FaceSimpleCaptureViewController.Configuration.query
.Property
MagnifEyeLivenessViewController.Configuration.query
.Property
SmileLivenessViewController.Configuration.query
.
Changed
Minimal required iOS version to iOS 12.0.
Minimal required version of Xcode to Xcode 15.1.
Eye Gaze Liveness UI component reworked (including API change).
Method
.create()
for all UI components to.init()
.Renamed property
FaceAutoCaptureViewController.Style.backgroundOverlayColor
to.placeholderOverlayColor
.Renamed property
FaceAutoCaptureViewController.Style.circleOutlineColorStayStill
to.placeholderCandidateSelectionColor
.Renamed property
FaceAutoCaptureViewController.Style.circleOutlineColor
to.placeholderColor
.Renamed property
FaceAutoCaptureViewController.Style.trackingCircleColor
to.detectionLayerColor
.Renamed property
FaceAutoCaptureViewController.Style.hintFont
to.instructionFont
.Renamed property
FaceAutoCaptureViewController.Style.hintTextColor
to.instructionTextColor
.Renamed property
FaceAutoCaptureViewController.Style.hintBackgroundColor
to.instructionBackgroundColor
.Renamed property
SmileLivenessViewController.Style.overlayColor
to.placeholderOverlayColor
.Renamed property
MagnifEyeLivenessViewController.Style.overlayColor
to.placeholderOverlayColor
.Method signature
FaceDetector.detect()
.Property
FaceAutoCaptureDetection.detectedFace
to.face
.Property
FaceAutoCaptureDetection.position
toFaceAutoCaptureDetection.face.position
.Property
FaceAutoCaptureFrameParameters.detectedFace
to.face
.Property
FaceAutoCaptureFrameParameters.detectionPosition
toFaceAutoCaptureFrameParameters.face.position
.Property
FaceAutoCaptureResult.detectedFace
to.face
.Property
FaceSimpleCaptureResult.detectedFace
to.face
.Property
MagnifEyeLivenessResult.detectedFace
to.face
.Property
SmileLivenessResult.detectedFace
to.face
.Property
FaceImage.image
to.bgrRawImage
.Properties
FaceImage.minFaceSizePixels
and.maxFaceSizePixels
to.faceSizeRatioInterval
.Bool properties of all face quality
Query
classes renamed to.evaluate
.Properties
Expression.eyes
andFaceQuality.imageQuality
,.headPose
,.wearables
,.expression
to non-optional.Renamed property
FaceAspects.eyeDistance
to.eyeDistanceToImageShorterSideRatio
.Moved
EyeGazeLivenessConfiguration
toEyeGazeLivenessViewController.Configuration
,EyeGazeLivenessStyle
toEyeGazeLivenessViewController.Style
.Moved
FaceAutoCaptureConfiguration
toFaceAutoCaptureViewController.Configuration
,FaceAutoCaptureStyle
toFaceAutoCaptureViewController.Style
.Moved
FaceSimpleCaptureConfiguration
toFaceSimpleCaptureViewController.Configuration
,FaceSimpleCaptureStyle
toFaceSimpleCaptureViewController.Style
.Moved
SmileLivenessConfiguration
toSmileLivenessViewController.Configuration
,SmileLivenessStyle
toSmileLivenessViewController.Style
.Moved
MagnifEyeLivenessConfiguration
toMagnifEyeLivenessViewController.Configuration
,MagnifEyeLivenessStyle
toMagnifEyeLivenessViewController.Style
.Updated localization keys.
Removed
Callback
FaceAutoCaptureViewControllerDelegate.faceAutoCaptureViewControllerCandidateSelectionStarted(_:)
.Class
DetectedFace
.Class
FaceImageFactory
, useFaceImage.init()
instead.
7.5.3 - 2024-06-24
Added
Security guidelines section to the integration manual.
7.5.2 - 2024-04-30
Changed
Changed minimal required version of Xcode to Xcode 14.2.0.
7.5.1 - 2024-04-15
Fixed
Added
PrivacyInfo.xcprivacy
and signature toDotProtocolBuffers
dependency.Added
PrivacyInfo.xcprivacy
toiface
dependency.Added
PrivacyInfo.xcprivacy
toinnoonnxruntime
dependency.
7.5.0 - 2024-04-03
Added
Callback
onStopped
as an argument to methodFaceAutoCaptureViewController.stopAsync()
.Callback
onStopped
as an argument to methodFaceSimpleCaptureViewController.stopAsync()
.Callback
onStopped
as an argument to methodSmileLivenessViewController.stopAsync()
.Callback
onStopped
as an argument to methodMagnifEyeLivenessViewController.stopAsync()
.
Removed
Method
FaceAutoCaptureViewControllerDelegate.faceAutoCaptureViewControllerStopped()
. UseFaceAutoCaptureViewController.stopAsync()
method argumentonStopped
instead.Method
FaceSimpleCaptureViewControllerDelegate.faceSimpleCaptureViewControllerStopped()
. UseFaceSimpleCaptureViewController.stopAsync()
method argumentonStopped
instead.Method
SmileLivenessViewControllerDelegate.smileLivenessViewControllerStopped()
. UseSmileLivenessViewController.stopAsync()
method argumentonStopped
instead.Method
MagnifEyeLivenessViewControllerDelegate.magnifEyeLivenessViewControllerStopped()
. UseMagnifEyeLivenessViewController.stopAsync()
method argumentonStopped
instead.
7.4.2 - 2024-03-21
Fixed
Stability issue.
7.4.1 - 2024-03-19
Technical release. No changes.
7.4.0 - 2024-03-19
Fixed
Renamed localization key
dot.face_auto_capture.instruction.eye_status_low
todot.face_auto_capture.instruction.eyes_too_closed
.Renamed localization key
dot.face_auto_capture.instruction.mouth_status_low
todot.face_auto_capture.instruction.mouth_too_open
.Updated localization keys in the integration manual.
7.3.0 - 2024-02-23
Fixed
Fixed licensing issue. Newly generated licenses will only work from this and subsequent releases.
7.2.1 - 2024-01-11
Technical release. No changes.
7.2.0 - 2023-12-28
Changed
Camera preview and image analysis resolution selection strategy in UI components for
CameraPreviewScaleType.fill
.
7.1.1 - 2023-12-21
Fixed
In some cases UI components created invalid
.content
in its result class.
7.1.0 - 2023-12-14
Technical release. No changes.
7.0.2 - 2023-12-04
Fixed
DOT SDK initialization (license parsing).
7.0.1 - 2023-12-01
Fixed
objectImageSize
argument functionality of EyeGazeLivenessConfiguration constructor.segmentCount
argument functionality ofRandomSegmentsGenerator.generate
method.
7.0.0 - 2023-11-02
Added
Class
DotSdk
.Class
DotSdkConfiguration
.Protocol
DotLibrary
.
Changed
Class
DotFaceLibrary
reworked. Initialization API is moved toDotSdk
(see the [migration guide to version 7.0.0](https://developers.innovatrics.com/digital-onboarding/technical/api-reference/)).Class
DotFaceLibraryConfiguration
reworked.
6.5.1 - 2023-10-19
Technical release. No changes.
6.5.0 - 2023-10-04
Technical release. No changes.
6.4.0 - 2023-09-19
Added
Class
TiltAngles
.Property
.maxDevicePitchAngle
toFaceAutoCaptureConfiguration.QualityAttributeThresholds
.Property
.deviceTiltAngles
toFaceAutoCaptureDetection
.Localization key
dot.face_auto_capture.instruction.device_pitch_too_high
.
6.3.0 - 2023-08-18
Changed
New license file format with feature licensing is required. To obtain one, please contact
support@innovatrics.com
.Update
MagnifEyeLivenessResult.content
.
6.2.0 - 2023-07-26
Added
Property
.sessionToken
toFaceSimpleCaptureConfiguration
,FaceAutoCaptureConfiguration
,SmileLivenessConfiguration
,MagnifEyeLivenessConfiguration
.SmileLivenessResult.smileExpressionBgrRawImage
6.1.1 - 2023-07-19
Fixed
Crash when there is not enough disk space during the DotFace initialization.
6.1.0 - 2023-07-07
Added
Property
.isTorchEnabled
toFaceSimpleCaptureConfiguration
,FaceAutoCaptureConfiguration
,SmileLivenessConfiguration
,MagnifEyeLivenessConfiguration
.
Fixed
MagnifEye Liveness UI components after restart.
6.0.0 - 2023-06-14
Added
FaceAutoCaptureResult.content
FaceSimpleCaptureResult.content
MagnifEyeLivenessResult.detectedFace
SmileLivenessResult.bgrRawImage
,.content
Changed
Face Auto Capture UI component reworked (including API change).
Face Simple Capture UI component reworked (including API change).
SmileLivenessResult.neutralExpressionFace
to.detectedFace
.Definition of property
DetectionPosition.sizeToImageShorterSideRatio
now fits [Face Size](https://developers.innovatrics.com/digital-onboarding/docs/glossary/) definition.
Removed
Properties
.minFaceSizeRatio
and.maxFaceSizeRatio
fromFaceSimpleCaptureConfiguration
,FaceAutoCaptureConfiguration
,SmileLivenessConfiguration
,MagnifEyeLivenessConfiguration
, use.faceSizeRatioInterval
instead.Method
SmileLivenessViewController.restart()
, use.start()
instead.SmileLivenessResult.smileExpressionFace
5.5.0 - 2023-04-26
Technical release. No changes.
5.4.0 - 2023-03-24
Added
MagnifEye Liveness UI component (
MagnifEyeLivenessViewController
,MagnifEyeLivenessViewControllerDelegate
,MagnifEyeLivenessConfiguration
,MagnifEyeLivenessStyle
,MagnifEyeLivenessResult
).localization key
dot.face_magnifeye_liveness.instruction.eye_centering
.
5.3.0 - 2023-03-23
Changed
update IFace to 5.1.1.
5.2.0 - 2023-03-06
Technical release. No changes.
5.1.1 - 2023-02-21
Added
support for Swift Package Manager.
5.1.0 - 2023-02-08
Added
shared dependency
DotCore
.shared dependency
DotCamera
.
Changed
update IFace to 5.0.3
types moved to
DotCore
:BgrRawImage
,BgrRawImageFactory
,CGImageFactory
,CIImageFactory
,ImageSize
,RectangleDouble
,WrappedDouble
,PointDouble
,IntervalFloat
,IntervalDouble
.types moved to
DotCamera
:CameraFacing
,CameraPreviewScaleType
.
5.0.0 - 2023-01-27
Changed
New SDK versioning: All libraries (DOT Document, DOT Face, DOT Face Lite and DOT NFC) are released simultaneously with a single version name. Libraries with the same version name work correctly at build time and at run time.
text of localization key
dot.face_auto_capture.instruction.face_not_present
toPosition your face into the circle
Removed
deprecated
DotFace
,DotFaceDelegate
,DotFaceConfiguration
Fixed
@objc prefix pattern to
DOTF*
4.11.1 - 2023-01-18
Changed
all UI components will return images with aspect ratio 4:3
minimal required version to Xcode 14+
Fixed
maximal resolution of images returned from all UI components was too high
4.11.0 - 2022-12-15
Changed
update IFace to 4.21.0 - improved passive liveness algorithm.
all UI components will use 4:3 aspect ratio when front camera is selected, for back camera 16:9 aspect ratio will be used
4.10.1 - 2022-08-17
Fixed
crash when camera device is not available
camera session lifecycle
camera permission issue
4.10.0 - 2022-07-28
Changed
update IFace to 4.18.3 - improved passive liveness algorithm
4.9.0 - 2022-07-11
Added
DotFaceLibrary
to replaceDotFace
DotFaceLibraryConfiguration
to replaceDotFaceConfiguration
DotFaceLibraryDelegate
to replaceDotFaceDelegate
FaceAutoCaptureViewController.restart()
Changed
deprecated
DotFace
, useDotFaceLibrary
insteaddeprecated
DotFaceConfiguration
, useDotFaceLibraryConfiguration
insteaddeprecated
DotFaceDelegate
, useDotFaceLibraryDelegate
instead
4.8.2 - 2022-05-30
Fixed
camera permission issue
4.8.1 - 2022-05-19
Fixed
API visibility issue
4.8.0 - 2022-05-16
Added
Smile Liveness UI component (
SmileLivenessViewController
,SmileLivenessViewControllerDelegate
,SmileLivenessStyle
,SmileLivenessConfiguration
,SmileLivenessResult
)DotFaceExpressionNeutral
module andDotFaceExpressionNeutralModule
class. This module is required if the face expression quality attribute is evaluated and for Smile Liveness component.localization key
dot.face_auto_capture.instruction.face_not_present
localization key
dot.face_auto_capture.instruction.expression_neutral_too_high
localization key
dot.face_auto_capture.instruction.expression_neutral_too_low
FaceAutoCaptureStyle.circleOutlineColorStayStill
Changed
design of Face Auto Capture UI component
desing of Eye Gaze Liveness UI component
Removed
FaceAutoCaptureStyle.progressValidColor
FaceAutoCaptureStyle.progressIntermediateColor
FaceAutoCaptureStyle.progressInvalidColor
FaceAutoCaptureStyle.tickColor
4.7.1 - 2022-04-05
Fixed
instruction text wrapping in UI components
4.7.0 - 2022-03-22
Added
FaceAutoCaptureViewController.start()
FaceAutoCaptureViewController.stopAsync()
FaceAutoCaptureViewControllerDelegate.faceAutoCaptureViewControllerStopped()
FaceSimpleCaptureViewController.start()
FaceSimpleCaptureViewController.stopAsync()
FaceSimpleCaptureViewControllerDelegate.faceSimpleCaptureViewControllerStopped()
EyeGazeLivenessViewController.stopAsync()
EyeGazeLivenessViewControllerDelegate.eyeGazeLivenessViewControllerStopped()
Changed
FaceAutoCaptureViewController
is no longer started implicitly and has to be started explicitly by.start()
FaceSimpleCaptureViewController
is no longer started implicitly and has to be started explicitly by.start()
updated sharpness range in
DefaultQualityAttributeRegistry
4.6.0 - 2022-03-09
Changed
DotFaceConfiguration.faceDetectionConfidenceThreshold
default value to0.06
4.5.0 - 2022-02-17
Changed
mouth status range in
DefaultQualityAttributeRegistry
.
4.4.0 - 2022-02-15
Changed
update IFace to 4.15.0 - minor improvements
4.3.1 - 2022-01-31
Added
CameraPreviewScaleType.fill
to support full screen camera preview
4.3.0 - 2021-12-16
Changed
update IFace to 4.14.0 - minor improvements
4.2.0 - 2021-11-25
Added
DotFaceBackgroundUniformity
module andDotFaceBackgroundUniformityModule
class. This module is required only if the background uniformity quality attribute is evaluated.DotFaceDetectionBalanced
module andDotFaceDetectionBalancedModule
classQualityAttributeId.mask
(requiresDotFaceDetectionBalanced
module)FaceImageFactory
to replaceFaceImage.init()
Changed
renamed module
DotFaceDetection
toDotFaceDetectionFast
removed required quality attributes validation from
FaceAutoCaptureConfiguration
,FaceAutoCaptureConfiguration.init()
no longer throwscreation of
FaceImage
fails ifminFaceSizeRatio
is not valid
Removed
FaceImage.init()
4.1.1 - 2021-10-25
Fixed
eye gaze liveness segment evaluation in incorrect order
4.1.0 - 2021-10-14
Changed
update IFace to 4.13.0 - improved passive liveness algorithm
DotFaceConfiguration.faceDetectionConfidenceThreshold
default value to0.1
update sharpness range in
DefaultQualityAttributeRegistry
,IcaoQualityProvider
,MatchingQualityProvider
andPassiveLivenessQualityProvider
Fixed
incorrect implementation of
DetectedFace.createFullFrontalImage()
4.0.0 - 2021-09-28
Added
DotFaceDetection
module andDotFaceDetectionModule
classDotFaceVerification
module andDotFaceVerificationModule
classDotFacePassiveLiveness
module andDotFacePassiveLivenessModule
classDotFaceEyeGazeLiveness
module andDotFaceEyeGazeLivenessModule
classLogger
class to improve logging mechanismDotFaceDelegate
to handleDotFace
events.DotFaceConfiguration
to wrap all configuration options ofDotFace
into single object.BgrRawImage
to represent image suitable for biometric operationsBgrRawImageConverter
andCGImageConverter
to convert betweenCGImage
andBgrRawImage
protocol
SegmentsGenerator
and classRandomSegmentsGenerator
FaceQuality
andFaceQualityQuery
FaceImageQuality
andFaceImageQualityQuery
HeadPose
andHeadPoseQuery
HeadPoseAttribute
Wearables
andWearablesQuery
Glasses
Expression
andExpressionQuery
EyesExpression
andEyesExpressionQuery
FaceAttribute
FaceAspects
Changed
minimal required iOS version to iOS 11.0
DOT iOS Face is split into multiple iOS libraries, see sections Distribution and Initialization in the integration manual
renamed module name
DOT
toDotFaceCore
renamed
DOTHandler
toDotFace
DotFace
to singletonDotFaceHandler.initialize(with license: License? = nil, faceDetectionConfidenceThreshold: Int = 600)
to.initialize(configuration: DotFaceConfiguration)
localization keys
renamed
DotFaceLocalization
toLocalization
component "Liveness Check" to "Eye Gaze Liveness" and all related API
component "Face Capture" to "Face Auto Capture" and all related API
component "Face Capture Simple" to "Face Simple Capture" and all related API
FaceImageVerifier
toFaceMatcher
TemplateVerifer
toTemplateMatcher
matching scores, face confidence, face attribute scores and attribute quality values are in interval [0.0, 1.0]
FaceImage
now usesBgrRawImage
DetectedFace
now usesBgrRawImage
renamed
QualityAttributeConfiguration
toQualityAttribute
renamed
DOTRange
toValueRange
renamed
QualityAttributeConfigurationProvider
toDefaultQualityAttributeRegistry
renamed
VerificationQualityProvider
toMatchingQualityProvider
renamed
DOTSegment
toSegment
renamed
DotPosition
toCorner
default value of
FaceAutoCaptureConfiguration.isCheckAnimationEnabled
tofalse
Removed
component "Liveness Check 2" and all related API
DOTHandler.authorizeCamera()
use native API insteadDOTHandler.logLevel
useLogger.logLevel
insteadLicense
use nativeData
type to represent license fileDOTCamera
and all related API, camera can be configured using "Configuration" classes of UI componentsFace
all API was moved toDetectedFace
CaptureCandidate
useDetectedFace
insteadFaceAttributeScore
IcaoAttribute
andIcaoRangeStatus
3.8.2 - 2021-07-23
Fixed
fixed issue with active liveness making it more seamless
3.8.1 - 2021-06-24
Added
support for interface orientation
portraitUpsideDown
to all UI components
3.8.0 - 2021-06-17
Changed
updated IFace to 4.10.0 - improved background uniformity algorithm
Removed
FaceAttributeId.yaw
,.roll
,.pitch
use.yawAngle
,.rollAngle
,.pitchAngle
instead
3.7.1 - 2021-05-10
Fixed
updated IFace to 4.9.1 - minor issue
updated glass status range in
QualityAttributeConfigurationRegistry
3.7.0 - 2021-05-03
Changed
updated IFace to 4.9.0 - improved glass status evaluation
3.6.0 - 2021-04-13
Changed
updated IFace to 4.8.0 - improved Passive Liveness algorithm
3.5.1 - 2021-03-19
Added
FaceCaptureStyle.hintTextColor
and.hintBackgroundColor
Changed
renamed style properties to be consistent across all UI components
added 'Color' suffix to name of style properties which represent
UIColor
3.5.0 - 2021-03-17
Added
DotFaceLocalization
class to improve localization mechanismCaptureCandidate.init()
to initialize withDetectedFace
public access to
CaptureCandidate.detectedFace
Changed
updated IFace to 4.4.0
renamed
Attribute
toFaceAttributeId
renamed
Feature
toFaceFeature
range of
eyeStatus
inQualityAttributeConfigurationRegistry
removed
DOTHandler.localizationBundle
useDotFaceLocalization.bundle
insteadliveness localization keys
CaptureState.yawStep
and.pitchStep
to.yawAngleStep
and.pitchAngleStep
QualityAttribute.yaw
and.pitch
to.yawAngle
and.pitchAngle
ICAO attributes now have
yawAngle
,pitchAngle
androllAngle
instead ofyaw
,pitch
androll
3.4.2 - 2020-12-16
Added
support for iOS Simulator arm64 architecture
3.4.1 - 2020-11-25
Fixed
FaceCaptureController
user interface issues
3.4.0 - 2020-09-03
Changed
updated IFace to 3.13.1
CaptureCandidate.glassStatusDependenciesFulfilled
toCaptureCandidate.glassStatusConditionFulfilled
CaptureCandidate.passiveLivenessDependenciesFulfilled
toCaptureCandidate.passiveLivenessConditionFulfilled
removed
Face.attributeIsDependencyFulfilled
, addedFace.evaluateAttributeCondition
3.3.1 - 2020-08-18
Fixed
FaceCaptureController
layout warnings
3.3.0 - 2020-08-14
Fixed
Make sure all background tasks are stopped when
LivenessCheckController.stopLivenessCheck()
is called
3.2.2 - 2020-08-11
Fixed
improved interface of
DOTCamera
3.2.1 - 2020-08-06
Fixed
crash in
DOTImage
ifCGImage
is nil
Changed
init
DOTImage
withCGimage
instead ofUIImage
updated eye status
QualityAttributeConfiguration
ranges
3.2.0 - 2020-07-30
Changed
on screen messages during face capture remain shown longer to minimize instruction flickering
changed ranges of
QualityAttributeConfigurationRegistry
removed detected face indicator after face capture finished
3.1.0 - 2020-07-10
Added
DOTRange
QualityAttribute
QualityAttributeConfiguration
QualityAttributeConfigurationRegistry
QualityAttributePreset
VerificationQualityProvider
ICAOQualityProvider
PassiveLivenessQualityProvider
Changed
removed
useAlternativeInstructions
,requestFullImage
,requestCropImage
,requestTemplate
,lightScoreThreshold
fromFaceCaptureConfiguration
added
qualityAttributeConfigurations: Set<QualityAttributeConfiguration>
toFaceCaptureConfiguration
added
static func validate(configuration: FaceCaptureConfiguration)
toFaceCaptureConfiguration
removed
requestFullImage
,requestCropImage
,requestTemplate
fromFaceCaptureSimpleConfiguration
changed
func faceCapture(_ controller: FaceCaptureController, stateChanged state: FaceCaptureState)
tofunc faceCapture(_ controller: FaceCaptureController, stateChanged state: CaptureState, withImage image: DOTImage?)
inFaceCaptureControllerDelegate
changed
func livenessCheck2(_ controller: LivenessCheck2Controller, captureStateChanged captureState: FaceCaptureState, withImage image: DOTImage?)
tofunc livenessCheck2(_ controller: LivenessCheck2Controller, stateChanged state: CaptureState, withImage image: DOTImage?)
inLivenessCheck2ControllerDelegate
3.0.1 - 2020-07-02
Fixed
draw circle around face during face capture
face capture hint label not updating correctly
3.0.0 - 2020-06-15
Changed
Update IFace to 3.10.0
FaceCaptureControllerDelegate
returnsCaptureCandidate
instead ofFaceCaptureImage
FaceCaptureSimpleControllerDelegate
returnsCaptureCandidate
instead ofFaceCaptureImage