DOT iOS Face 6.0.0

This guide describes how to migrate DOT iOS Face version 5.x to version 6.0.0. Only the most important changes are highlighted in this guide. For more details, see the iOS sample.

Migration Steps

FaceAutoCaptureViewController component

  • Added FaceAutoCaptureConfiguration.QualityAttributeThresholds class which is using Builder pattern.
  • Replaced IcaoQualityProvider, MatchingQualityProvider and PassiveLivenessQualityProvider provider with FaceAutoCaptureConfiguration.QualityAttributeThresholdPresets.
  • It is possible to create new FaceAutoCaptureConfiguration.QualityAttributeThresholds, use one of the presets from FaceAutoCaptureConfiguration.QualityAttributeThresholdPresets as is, or modify one of the presets from FaceAutoCaptureConfiguration.QualityAttributeThresholdPresets.

Before

// Create new thresholds
let qualityAttributes = Set([try! QualityAttribute(id: .faceConfidence, targetRange: try! .init(min: 0.2, max: 1.0), strictRange: try! .init(min: 0.2, max: 1.0))])
let configuration = FaceAutoCaptureConfiguration(qualityAttributes: qualityAttributes)

// Use presets
let icaoQualityAttributes = IcaoQualityProvider().getQualityAttributes()
let matchingQualityAttributes = MatchingQualityProvider().getQualityAttributes()
let passiveLivenessQualityAttributes = PassiveLivenessQualityProvider().getQualityAttributes()

// Modify presets
var qualityAttributes = PassiveLivenessQualityProvider().getQualityAttributes()
qualityAttributes.insert(try QualityAttribute(id: .faceConfidence, targetRange: try .init(min: 0.3, max: 1.0), strictRange: try .init(min: 0.3, max: 1.0))) // modify confidence validation threshold
qualityAttributes.insert(try QualityAttribute(id: .sharpness, targetRange: try .init(min: 0, max: 1.0), strictRange: try .init(min: 0, max: 1.0))) // remove sharpness validation threshold
qualityAttributes.insert(try QualityAttribute(id: .glassStatus, targetRange: try .init(min: 0, max: 0.5), strictRange: try .init(min: 0, max: 0.5))) // add glasses presence validation threshold
let configuration = FaceAutoCaptureConfiguration(qualityAttributes: qualityAttributes)

After

// Create new thresholds
let qualityAttributeThresholdsBuilder = FaceAutoCaptureConfiguration.QualityAttributeThresholds.Builder()
try qualityAttributeThresholdsBuilder.minConfidence(.init(value: 0.2))
let qualityAttributeThresholds = qualityAttributeThresholdsBuilder.build()
let configuration = FaceAutoCaptureConfiguration(qualityAttributeThresholds: qualityAttributeThresholds)

// Use presets
let icaoQualityAttributeThresholds = FaceAutoCaptureConfiguration.QualityAttributeThresholdPresets.icao.build()
let standardQualityAttributeThresholds = FaceAutoCaptureConfiguration.QualityAttributeThresholdPresets.standard.build()
let passiveLivenessQualityAttributeThresholds = FaceAutoCaptureConfiguration.QualityAttributeThresholdPresets.passiveLiveness.build()
let configuration = FaceAutoCaptureConfiguration(qualityAttributeThresholds: standardQualityAttributeThresholds)

// Modify presets
let qualityAttributeThresholdsBuilder = FaceAutoCaptureConfiguration.QualityAttributeThresholdPresets.passiveLiveness
try qualityAttributeThresholdsBuilder
	.minConfidence(.init(value: 0.3)) // modify confidence validation threshold
	.minSharpness(nil) // remove sharpness validation threshold
	.maxGlassesPresenceScore(.init(value: 0.5)) // add glasses presence validation threshold
let qualityAttributeThresholds = qualityAttributeThresholdsBuilder.build()
let configuration = FaceAutoCaptureConfiguration(qualityAttributeThresholds: qualityAttributeThresholds)
  • Removed check animation at the end of the process, removed FaceAutoCaptureConfiguration.isCheckAnimationEnabled.
  • Replaced delegate method faceAutoCaptureViewController(... stepChanged captureStepId: CaptureStepId, with detectedFace: DetectedFace?) with faceAutoCaptureViewController(... processed detection: FaceAutoCaptureDetection). CaptureStepId is no longer available.
  • Replaced delegate method faceAutoCaptureViewController(... captured detectedFace: DetectedFace) with faceAutoCaptureViewController(... captured result: FaceAutoCaptureResult).
  • Added delegate method faceAutoCaptureViewControllerCandidateSelectionStarted(_ viewController: FaceAutoCaptureViewController).

Before

func faceAutoCaptureViewController(_ viewController: FaceAutoCaptureViewController, stepChanged captureStepId: CaptureStepId, with detectedFace: DetectedFace?) {
	// Handle detection data after internal auto capture change
}

func faceAutoCaptureViewController(_ viewController: FaceAutoCaptureViewController, captured detectedFace: DetectedFace) {
	// Handle result
}

After

func faceAutoCaptureViewController(_ viewController: FaceAutoCaptureViewController, processed detection: FaceAutoCaptureDetection) {
	let detectedFace = detection.detectedFace
	// Handle detection data after internal auto capture change
}

func faceAutoCaptureViewController(_ viewController: FaceAutoCaptureViewController, captured result: FaceAutoCaptureResult) {
	let detectedFace = result.detectedFace
	// Handle result
}

FaceSimpleCaptureViewController component

  • Replaced faceSimpleCaptureViewController(... captured detectedFace: DetectedFace) with faceSimpleCaptureViewController(... captured result: FaceSimpleCaptureResult).

Before

func faceSimpleCaptureViewController(_ viewController: FaceSimpleCaptureViewController, captured detectedFace: DetectedFace) {
	// Handle result
}

After

func faceSimpleCaptureViewController(_ viewController: FaceSimpleCaptureViewController, captured result: FaceSimpleCaptureResult) {
	let detectedFace = result.detectedFace
	// Handle result
}

DetectionPosition.sizeToImageShorterSideRatio value

  • This new value fits the definition of the face size. You get the new value by dividing the old value by 4.