DOT iOS Document library

v7.4.0

Introduction

DOT iOS Document provides components for document capture and related functionalities which are easy to integrate into an iOS application.

Requirements

  • Xcode 14+

  • iOS 11.0+

  • Swift or Objective-C

  • CocoaPods or Swift Package Manager

Distribution

Swift Package Manager

DOT iOS Document is distributed as a binary XCFramework - DotDocument.xcframework with its dependencies stored in our public github repository. It can be easily integrated into Xcode project in: Project → Package Dependencies.

Use https://github.com/innovatrics/dot-ios-sdk-spm.git repository and choose version you want to use. There you can select DotDocument package. All the required dependencies will be downloaded with the selected package.

Cocoapods

DOT iOS Document is distributed as a XCFramework - DotDocument.xcframework using Cocoapods with its dependencies stored in our public github repository. It can be easily integrated into Xcode with custom definition of podspecs. First step is to insert following line of code on top of you Podfile.

Podfile
source 'https://github.com/innovatrics/innovatrics-podspecs'

Then DOT iOS Document dependency must be specified in Podfile. Dependencies of DOT iOS Document will be downloaded alongside it.

Podfile
source 'https://github.com/innovatrics/innovatrics-podspecs'

use_frameworks!

target 'YOUR_TARGET' do

pod 'dot-document'

end

In case of CocoaPods problem with pod install, try to clone the private pod repository manually.

pod repo remove innovatrics
pod repo add innovatrics https://github.com/innovatrics/innovatrics-podspecs

Supported Architectures

DOT iOS Document 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:

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 and DotDocumentLibrary object.

DOT SDK Sample shows how to initialize DOT SDK with DotDocumentLibrary. DotSdk.shared.initialize() method should be called on background thread.

Keep in mind that if you try to use any feature which was not added during initialization DOT SDK will generate fatal error.

Deinitialization

When you have finished using the DOT iOS Document, it is usually a good practice to deinitialize it in order to free the memory. You can deinitialize DOT iOS Document 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 Document components again, you need to call DotSdk.shared.initialize() again.

Logging

DOT iOS Document supports logging using a global Logger class. You can set the log level as follows:

import DotDocument

Logger.logLevel = .debug

Log levels:

  • info

  • debug

  • warning

  • error

  • none

Each log message contains DotDocument tag. Keep in mind that logging should be used just for debugging purposes.

Components

Overview

DOT iOS Document 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 Document 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

DOCUMENT DETECTOR

A component for performing document detection on an image.

IMAGE PARAMETERS ANALYZER

A component for computing image parameters such as sharpness, brightness or hotspots score.

IMAGE PERSPECTIVE WARPER

A component for warping the perspective of an image according to the detected document corners.

DOCUMENT AUTO CAPTURE CONTROLLER

A component for capturing good quality images suitable for optical character recognition.

MACHINE READABLE ZONE READER

A component for reading Machine Readable Zone (MRZ).

List of UI Components

DOCUMENT AUTO CAPTURE

An visual component for capturing good quality images suitable for optical character recognition.

Non-UI Components

Document Detector

The DocumentDetector class provides a document detection functionality.

Create a DocumentDetector:

let documentDetector = DocumentDetector()

To perform detection, call the following method on the background thread:

let result = try? documentDetector.detect(bgraRawImage: bgraRawImage)

Image Parameters Analyzer

The ImageParametersAnalyzer class provides an image parameters analysis functionality.

Create ImageParametersAnalyzer:

let imageParametersAnalyzer = ImageParametersAnalyzer()

To perform analysis, call the following method on the background thread:

let imageParameters = try? imageParametersAnalyzer.analyze(bgraRawImage: bgraRawImage)

Image Perspective Warper

The ImagePerspectiveWarper class provides perspective warping functionality.

Create ImagePerspectiveWarper:

let imagePerspectiveWarper = ImagePerspectiveWarper()

To perform perspective warping, call the following method on the background thread:

let warpedBgraRawImage = try? imagePerspectiveWarper.warp(bgraRawImage: bgraRawImage, corners: corners, targetImageSize: targetImageSize)

Document Auto Capture Controller

The DocumentAutoCaptureController class provides a stateful document auto capture functionality.

Create DocumentAutoCaptureController:

let configuration = try! DocumentAutoCaptureControllerConfiguration(
            validators: validators,
            minValidFramesInRowToStartCandidateSelection: 2
            candidateSelectionDurationMillis: 1000,
            detectionNormalizedRectangle: detectionNormalizedRectangle,
            imageParametersNormalizedRectangle: imageParametersNormalizedRectangle,
            isMrzReadingEnabled: false)
let controller = DocumentAutoCaptureController(configuration: configuration)
DocumentAutoCaptureControllerConfiguration
  • (Required) [-] validators: [DocumentAutoCaptureDetectionValidator] - Array of validators which will be used to validate input image.

  • (Optional) [2] minValidFramesInRowToStartCandidateSelection: Int - Minimum number of valid frames in a row to start candidate selection.

  • (Optional) [1000] candidateSelectionDurationMillis: Int - Duration of candidate selection phase.

  • (Optional) [-] detectionNormalizedRectangle: RectangleDouble - Crop an input image to normalized detection rectangle and use that for document detection.

  • (Optional) [-] imageParametersNormalizedRectangle: RectangleDouble - Crop an input image to normalized image parameters rectangle and use that to analyze image parameters.

  • (Optional) [false] isMrzReadingEnabled: Bool - Use this flag to enable MRZ reading during document auto capture process.

You can use detectionNormalizedRectangle to specify the region in the input image which will be used for document detection. For example, if you want to ignore top 30% and bottom 30% of the input image, you can do it as follows:

let detectionNormalizedRectangle = RectangleDouble(left: 0, top: 0.3, right: 1.0, bottom: 0.7)

If detectionNormalizedRectangle is set to nil(default) the full input image is used for document detection.

You can use imageParametersNormalizedRectangle to specify the region in the input image which will be used to analyze image parameters. For example, if you want to ignore top 35%, left 5%, right 5% and bottom 35% of the input image, you can do it as follows:

let imageParametersNormalizedRectangle = RectangleDouble(left: 0.05, top: 0.35, right: 0.95, bottom: 0.65)

If imageParametersNormalizedRectangle is set to nil(default) the full input image is used to analyze image parameters.

To capture a good quality document image, repeatedly call the process() method using the camera frames:

let processingResult = try documentAutoCaptureController.process(bgraRawImage: bgraRawImage, timestampMillis: timestampMillis)

The controller evaluates the document image requirements for each frame. Once the controller detects enough (minValidFramesInRowToStartCandidateSelection) valid frames in a row, candidate selection is started with duration of candidateSelectionDurationMillis milliseconds. After the candidate selection is finished, the best document image candidate is returned and the document auto capture process is over.

Machine Readable Zone Reader

The MrzReader class provides a Machine Readable Zone (MRZ) reading functionality.

Create MrzReader:

let mrzReader = MrzReader()

To read a MRZ, call the following method on the background thread:

let result = mrzReader.read(bgraRawImage: bgraRawImage, documentDetectorResult: documentDetectorResult)

Or alternatively, if you know the travel document type, call this method to increase the precision of the reading process:

let result = mrzReader.read(bgraRawImage: bgraRawImage, documentDetectorResult: documentDetectorResult, travelDocumentType: travelDocumentType)

The documentDetectorResult argument is a product of either Document Detector component, Document Auto Capture Controller component or Document Auto Capture UI component.

The result of successful MRZ reading contains travel document type and machine readable zone. If MRZ reading was not successful, the result will contain an error and travelDocumentType and/or machineReadableZone may be nil.

UI Components

Camera handling

Camera lifecycle

DOT iOS Document view controller will start the camera in viewWillAppear(:) lifecycle method. DOT iOS Document view controller will stop the camera in viewDidDisappear(:) lifecycle method.

Camera permission

DOT iOS Document 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 controller = DocumentAutoCaptureViewController.create(configuration: .init(), style: .init())
controller.delegate = self
navigationController?.pushViewController(controller, animated: true)

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 Document view controllers ignore safe area layout guide when they layout their subviews. Therefore, for example if you push DOT iOS Document view controller using UINavigationController, you will get incorrect layout. If you want to respect safe area layout guide, you should embed DOT iOS Document view controller in a container view controller and setup the layout constraints accordingly.

Document Auto Capture

The view controller with document placeholder which is used for capturing document images.

You can configure DocumentAutoCaptureViewController using DocumentAutoCaptureConfiguration. You can customize the appearance of DocumentAutoCaptureViewController using DocumentAutoCaptureStyle. You can handle the DocumentAutoCaptureViewController events using its delegate DocumentAutoCaptureViewControllerDelegate.

To create DocumentAutoCaptureViewController:

let viewController = DocumentAutoCaptureViewController.create(configuration: .init(), style: .init())
viewController.delegate = self
present(viewController, animated: true)

In order to start the document auto capture process call the start() method.

In case you want to handle detection data, implement documentAutoCaptureViewController(:processed:) delegate callback. This callback is called with each processed camera frame. There is also documentAutoCaptureViewControllerCandidateSelectionStarted(:) delegate callback, which is called only once during the whole process, when candidate selection is started. When the document auto capture process finishes successfully, the result will be returned via the documentAutoCaptureViewController(:captured:) callback.

In case you want to force the capture event, call the requestCapture() method. The most recent image will be returned via the documentAutoCaptureViewController(:captured:) callback asynchronously.

Call start() method again in case you need to start over the document auto capture process (e.g. you want to capture both sides of the document, one after another). You can also call start() method to stop and start over ongoing process as well.

In case you want to stop the document auto capture process prematurely, call the stopAsync() method. The documentAutoCaptureViewControllerStopped(:) callback indicates that the processing is over.

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 DocumentAutoCaptureConfiguration 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 = DocumentAutoCaptureConfiguration.QualityAttributeThresholdPresets.standard.build()

// Modified thresholds based on the standard preset
let modified = try DocumentAutoCaptureConfiguration.QualityAttributeThresholdPresets.standard
        .minConfidence(minConfidence)
        .minSharpness(nil)
        .build()

// Custom thresholds
let custom = try DocumentAutoCaptureConfiguration.QualityAttributeThresholds.Builder()
        .minConfidence(minConfidence)
        .minSharpness(minSharpness)
        .build()

Available presets (pre-defined builders with thresholds) in QualityAttributeThresholdPresets:

  • standard - The resulting image suitable for evaluation on Digital Identity Service. See the thresholds.

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:

  1. Add your own Localizable.strings file to your project using standard iOS localization mechanism. To change a specific text override corresponding key in this Localizable.strings file.

  2. 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 DotDocument

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 DotDocument

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
Localizable.strings
"dot.document_auto_capture.instruction.brightness_too_high" = "Less light needed";
"dot.document_auto_capture.instruction.brightness_too_low" = "More light needed";
"dot.document_auto_capture.instruction.document_out_of_bounds" = "Center document";
"dot.document_auto_capture.instruction.document_does_not_fit_placeholder" = "Center document";
"dot.document_auto_capture.instruction.document_not_detected" = "Scan document";
"dot.document_auto_capture.instruction.size_too_small" = "Move closer";
"dot.document_auto_capture.instruction.hotspots_score_too_high" = "Avoid reflections";
"dot.document_auto_capture.instruction.mrz_not_present" = "Scan valid machine readable document";
"dot.document_auto_capture.instruction.mrz_not_valid" = "Scan valid machine readable document";
"dot.document_auto_capture.instruction.sharpness_too_low" = "More light needed";
"dot.document_auto_capture.instruction.candidate_selection" = "Hold still...";

Common Classes

ImageSize

Class which represents a size of an image. To create an instance:

let imageSize = ImageSize(width: 100, height: 100)

BgraRawImage

Class which represents an image.

To create an instance from CGImage:

let bgraRawImage = BgraRawImageFactory.create(cgImage: cgImage)

To create an instance from CIImage:

let bgraRawImage = BgraRawImageFactory.create(ciImage: ciImage, ciContext: ciContext)

To create CGImage from BgraRawImage:

let cgImage = CGImageFactory.create(bgraRawImage: bgraRawImage)

To create CIImage from BgraRawImage:

let ciImage = CIImageFactory.create(bgraRawImage: bgraRawImage, ciContext: ciContext)

Corners

Class which represents a document card corners. To create an instance:

let corners = Corners(topLeft: topLeft, topRight: topRight, bottomRight: bottomRight, bottomLeft: bottomLeft)

Appendix

Changelog

7.4.0 - 2024-03-19

Added
  • Enum PlaceholderType.

  • Property DocumentAutoCaptureConfiguration.placeholderType.

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

Added
  • Property DocumentAutoCaptureDetection.imageParameters.

  • Property DocumentAutoCaptureResult.imageParameters.

7.0.2 - 2023-12-04

Fixed
  • DOT SDK initialization (license parsing).

7.0.1 - 2023-12-01

  • Technical release. No changes.

7.0.0 - 2023-11-02

Added
  • Class DotSdk.

  • Class DotSdkConfiguration.

  • Protocol DotLibrary.

  • License file is required. To obtain one, please contact support@innovatrics.com.

Changed
  • Class DotDocumentLibrary reworked.

  • Machine Readable Zone reading accuracy is improved.

Fixed
  • MRZ parsing issue.

6.5.1 - 2023-10-19

  • Technical release. No changes.

6.5.0 - 2023-10-04

Added
  • Property DocumentAutoCaptureConfiguration.mrzValidation.

  • Enum MrzValidation.

  • Class MrzNotPresentValidator.

  • Class MrzRecognitionResult.

  • Property MrzReader.Result.rawLines.

  • Property DocumentAutoCaptureFrameParameters.mrzRecognitionResult. Moved .machineReadableZone to .mrzRecognitionResult.

  • Localization key dot.document_auto_capture.instruction.mrz_not_present.

Changed
  • Performance of document detection is significantly improved.

  • Accuracy of document detection is improved.

Removed
  • Property DocumentAutoCaptureControllerConfiguration.isMrzReadingEnabled. The property validators is used to determine whether the MRZ should be read.

  • Property DocumentAutoCaptureConfiguration.isMrzReadingEnabled. Use .mrzValidation instead.

6.4.0 - 2023-09-19

Changed
  • Signature of DocumentAutoCaptureController.process() method.

6.3.0 - 2023-08-18

  • Technical release. No changes.

6.2.0 - 2023-07-26

Added
  • Property .sessionToken to DocumentAutoCaptureControllerConfiguration and DocumentAutoCaptureConfiguration.

6.1.1 - 2023-07-19

Fixed
  • Added missing dependency DotProtobuf in CocoaPods and Swift Package Manager.

6.1.0 - 2023-07-07

Added
  • Property DocumentAutoCaptureConfiguration.isTorchEnabled.

6.0.0 - 2023-06-14

Added
  • DocumentAutoCaptureConfiguration.QualityAttributeThresholds.Builder

  • DocumentAutoCaptureConfiguration.QualityAttributeThresholdPresets

  • DocumentAutoCaptureResult.content

Changed
  • create DocumentAutoCaptureConfiguration.QualityAttributeThresholds using .Builder.

5.5.0 - 2023-04-26

  • Technical release. No changes.

5.4.0 - 2023-03-24

  • Technical release. No changes.

5.3.0 - 2023-03-23

Added
  • Enum DocumentAutoCaptureController.Phase.

  • Property DocumentAutoCaptureController.ProcessingResult.phase.

Changed
  • Method DocumentAutoCaptureViewController.start() (re)starts the process any time during the lifecycle of the component.

Removed
  • Property DocumentAutoCaptureController.ProcessingResult.events. Use property DocumentAutoCaptureController.ProcessingResult.phase instead.

  • Enum DocumentAutoCaptureController.Event.

  • Method DocumentAutoCaptureController.restart(). Create new instance of DocumentAutoCaptureController instead.

  • Method DocumentAutoCaptureViewController.restart(). Use DocumentAutoCaptureViewController.start() instead.

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
  • types moved to DotCore: BgraRawImage, BgraRawImageFactory, CGImageFactory, CIImageFactory, ImageSize, RectangleDouble, WrappedDouble, PointDouble, IntervalFloat, IntervalDouble, Corners.

  • types moved to DotCamera: CameraFacing, CameraPreset, 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.

  • DocumentAutoCaptureViewControllerDelegate.documentAutoCaptureViewController(:detected:) to .documentAutoCaptureViewController(:processed:)

  • removed delegate pattern from DocumentAutoCaptureController

  • DocumentAutoCaptureController.process(bgraRawImage: BgraRawImage) to .process(bgraRawImage: BgraRawImage, timestampMillis: Int) throws → ProcessingResult

  • DocumentAutoCaptureResult.bgraRawImage now contains full camera image, instead of cropped image

  • renamed BrightnessHighValidator to BrightnessTooHighValidator

  • renamed BrightnessLowValidator to BrightnessTooLowValidator

  • renamed DocumentDoesNotFitPlaceholderValidator.defaultPenaltyThreshold to .defaultMaxPenaltyThreshold

  • renamed DocumentDoesNotFitPlaceholderValidator.penaltyThreshold to .maxPenaltyThreshold

  • renamed DocumentNotDetectedValidator.defaultConfidenceThreshold to .defaultMinConfidenceThreshold

  • renamed DocumentNotDetectedValidator.confidenceThreshold to .minConfidenceThreshold

  • renamed DocumentOutOfBoundsValidator.defaultMarginToImageSideRatioThreshold to .defaultMinCornerDistanceToImageShorterSideRatioThreshold

  • renamed DocumentOutOfBoundsValidator.marginToImageSideRatioThreshold to .minCornerDistanceToImageShorterSideRatioThreshold

  • renamed HotspotsScoreHighValidator to HotspotsScoreTooHighValidator

  • renamed SharpnessLowValidator to SharpnessTooLowValidator

  • renamed SizeSmallValidator to SizeTooSmallValidator

  • renamed SizeTooSmallValidator.defaultShortestEdgeToImageSideRatioThreshold to .defaultMinEdgeLengthToImageShorterSideRatioThreshold

  • renamed SizeTooSmallValidator.shortestEdgeToImageSideRatioThreshold to .minEdgeLengthToImageShorterSideRatioThreshold

  • localization key dot.document_auto_capture.instruction.document_not_present to dot.document_auto_capture.instruction.document_not_detected

  • localization key dot.document_auto_capture.instruction.document_centering to dot.document_auto_capture.instruction.document_out_of_bounds

  • localization key dot.document_auto_capture.instruction.document_too_far to dot.document_auto_capture.instruction.size_too_small

  • localization key dot.document_auto_capture.instruction.hotspots_present to dot.document_auto_capture.instruction.hotspots_score_too_high

Added
  • DocumentAutoCaptureViewController.stopAsync()

  • DocumentAutoCaptureViewControllerDelegate.documentAutoCaptureViewControllerStopped(:)

  • DocumentAutoCaptureController.ProcessingResult

  • DocumentAutoCaptureController.Event

  • DocumentAutoCaptureDetection.bgraRawImage, .travelDocumentType, .machineReadableZone

  • localization key dot.document_auto_capture.instruction.document_does_not_fit_placeholder

Removed
  • DocumentAutoCaptureControllerDelegate

  • DocumentAutoCaptureController.delegate

  • DocumentAutoCaptureController.requestCapture()

  • deprecated DocumentAutoCaptureConfiguration.init()

  • deprecated DocumentAutoCaptureConfiguration.cameraPreset, .confidenceThreshold, .confidenceLowThreshold, .sizeSmallThreshold, sharpnessLowThreshold, .brightnessLowThreshold, .brightnessHighThreshold, .hotspotsScoreHighThreshold

Fixed
  • @objc prefix pattern to DOTD*

3.7.1 - 2022-12-02

Changed
  • objc class name renamed from DOTCorners to DOTDCorners

  • objc class name renamed from DOTFLIntervalDouble to DOTDIntervalDouble

  • objc class name renamed from DOTFLQualityAttributeThresholds to DOTDQualityAttributeThresholds

3.7.0 - 2022-10-28

Fixed
  • wrong parsing of date in MRZ

  • verification of validator dependencies

Added
  • DocumentAutoCaptureDetectionValidator.dependencyIdentifiers

Changed
  • minimal required version to Xcode 14+

  • DocumentAutoCaptureControllerConfiguration.init() throws

  • deprecated DocumentAutoCaptureConfiguration.init

  • deprecated DocumentAutoCaptureConfiguration.confidenceLowThreshold, .sizeSmallThreshold, sharpnessLowThreshold, .brightnessLowThreshold, .brightnessHighThreshold, .hotspotsScoreHighThreshold

Added
  • DocumentAutoCaptureConfiguration.qualityAttributeThresholds

  • DocumentAutoCaptureConfiguration.init with .qualityAttributeThresholds parameter

3.6.0 - 2022-08-19

Added
  • MachineReadableZone.lines

3.5.1 - 2022-08-16

Fixed
  • crash when camera device is not available

  • camera session lifecycle

  • camera permission issue

3.5.0 - 2022-07-11

Added
  • DotDocumentLibrary.versionName

Fixed
  • TD1, TD2: Parsing long document number and optional data together.

3.4.1 - 2022-06-01

Fixed
  • camera permission issue

Changed
  • deprecated DocumentAutoCaptureConfiguration.cameraPreset

  • default DocumentAutoCaptureConfiguration.cameraPreset to .high

3.4.0 - 2022-05-20

Added
  • DocumentAutoCaptureStyle.backgroundColor

Changed
  • design of Document Auto Capture UI component

3.3.4 - 2022-01-31

Added
  • CameraPreviewScaleType.fill to support full screen camera preview

3.3.2 - 2022-01-13

Fixed
  • DocumentAutoCaptureViewController internal state handling

3.3.1 - 2022-01-12

Fixed
  • detection layer visibility

3.3.0 - 2022-01-11

Added
  • BgraRawImageFactory.create(ciImage: CIImage, ciContext: CIContext)

  • CIImageFactory.create(bgraRawImage: BgraRawImage, ciContext: CIContext)

  • DocumentAutoCaptureConfiguration.sizeSmallThreshold, .isDetectionLayerVisible and .validationMode

  • DocumentAutoCaptureStyle.detectionLayerColor and .overlayColor

  • DocumentOutOfBoundsValidator

  • ValidationMode

Changed
  • document detection accuracy improved

  • DocumentNotDetectedValidator.defaultConfidenceThreshold to 0.9

  • SharpnessLowValidator.defaultThreshold to 0.65

  • DocumentDoesNotFitPlaceholderValidator.defaultPenaltyThreshold to 0.035

  • renamed DocumentSmallValidator to SizeSmallValidator

  • renamed DocumentAutoCaptureConfiguration.confidenceThreshold to .confidenceLowThreshold

  • renamed DocumentAutoCaptureStyle.instructionCapturingTextColor to .instructionCandidateSelectionTextColor

  • renamed DocumentAutoCaptureStyle.instructionCapturingBackgroundColor to .instructionCandidateSelectionBackgroundColor

  • renamed DocumentAutoCaptureStyle.placeholderCapturingColor to .placeholderCandidateSelectionColor

  • updated design of Document Auto Capture UI component

Removed
  • DocumentLargeValidator

  • localization key dot.document_auto_capture.instruction.document_too_close

3.2.0 - 2021-11-29

Changed
  • improved DocumentDoesNotFitPlaceholderValidator

  • DocumentDoesNotFitPlaceholderValidator.detectedToPlaceholderCornersDistanceThreshold to .penaltyThreshold

3.1.0 - 2021-11-04

Added
  • DocumentAutoCaptureViewControllerDelegate.documentAutoCaptureViewController(_:detected:)

  • DocumentAutoCaptureViewControllerDelegate.documentAutoCaptureViewControllerCandidateSelectionStarted(_:)

Changed
  • DocumentNotDetectedValidator.defaultConfidenceThreshold to 0.6

Fixed
  • hidden instructions after calling DocumentAutoCaptureViewController.restart()

3.0.1 - 2021-09-30

Added
  • DocumentAutoCaptureControllerConfiguration.minValidFramesInRowToStartCandidateSelection

3.0.0 - 2021-09-27

Added
  • Machine Readable Zone Reader component

  • MrzNotValidValidator

  • DocumentAutoCaptureFrameParameters.travelDocumentType and .machineReadableZone

  • DocumentAutoCaptureConfiguration.isMrzReadingEnabled, .cameraFacing, .cameraPreviewScaleType, .cameraPreset

  • BgraRawImage, BgraRawImageFactory, CGImageFactory

  • ImageSize

  • CameraPreset, CameraFacing, CameraPreviewScaleType

  • Corners

  • DocumentAutoCaptureControllerConfiguration

  • DocumentAutoCaptureDetection

  • DocumentAutoCaptureResult

  • ImagePerspectiveWarper

  • PointDouble, RectangleDouble, WrappedDouble

Changed
  • minimal required iOS version to iOS 11.0

  • improved performance of document detection algorithm

  • DocumentAutoCaptureFrameParametersValidator to DocumentAutocaptureDetectionValidator

  • DocumentAutocaptureDetectionValidator.validate()

  • DocumentAutoCaptureController.detect() to .process(bgraRawImage: BgraRawImage)

  • DetectionResult to DocumentDetector.Result

  • renamed DocumentCapturePlaceholderViewController to DocumentAutoCaptureViewController and all related API

  • renamed DotDocumentLocalization to Localization

  • changed localization keys

Removed
  • DocumentCaptureFreeViewController

  • DocumentAutoCaptureConfiguration.documentSource

  • CameraDocumentSource, ImageDocumentSource, VideoDocumentSource

  • Image, ImageBatch

  • DocumentAutoCaptureHint

  • DocumentAutoCaptureFrameParametersEvaluator

2.3.0 - 2021-05-14

Added
  • DocumentAutoCaptureViewControllerConfiguration to enable additional configuration of UI components

  • DocumentAutoCaptureViewControllerConfiguration property documentSource

  • DocumentAutoCaptureViewControllerConfiguration property confidenceThreshold

  • DocumentAutoCaptureViewControllerConfiguration property sharpnessLowThreshold

  • DocumentAutoCaptureViewControllerConfiguration property brightnessLowThreshold

  • DocumentAutoCaptureViewControllerConfiguration property brightnessHighThreshold

  • DocumentAutoCaptureViewControllerConfiguration property hotspotsScoreHighThreshold

  • DocumentDoesNotFitPlaceholderValidator

Changed
  • DocumentCapturePlaceholderViewController.create()

  • DocumentCaptureFreeViewController.create()

  • removed BorderMarginValidator

  • removed DocumentCenteredValidator

  • removed DocumentRotationValidator

  • removed SharpnessHighValidator

  • removed DocumentAutoCaptureHint.sharpnessHigh, .widthToHeightLow, .widthToHeightHigh, .documentNotCentered

  • BrightnessHighValidator.maxBrightness to .threshold

  • BrightnessLowValidator.minBrightness to .threshold

  • DocumentLargeValidator.maxSize to .documentWidthToImageWidthRatioThreshold

  • DocumentSmallValidator.minSize to .documentWidthToImageWidthRatioThreshold

  • DocumentNotDetectedValidator.minConfidence to .confidenceThreshold

  • SharpnessLowValidator.minSharpness to .threshold

  • localization keys

2.2.2 - 2021-05-03

Fixed
  • allow multiline hint label

2.2.1 - 2021-03-31

Fixed
  • performance issue in document autocapture process

Changed
  • renamed SingleImageBatch to SimpleImageBatch

  • PlaceholderImageBatch.init to init(image: Image, detectionFrame: CGRect, imageParametersFrame: CGRect)

2.2.0 - 2021-03-17

Added
  • DotDocumentLocalization.localizationDictionary and .useLocalizationDictionary to enable overriding of standard iOS localization mechanism

Changed
  • renamed Localization class to DotDocumentLocalization

2.1.0 - 2021-01-27

Changed
  • add DocumentCaptureViewController.start() to start capture process explicitly

  • capture process of DocumentCaptureViewController will no longer start implicitly

2.0.0 - 2021-01-13

Added
  • Localization class, to support localization in more complex projects

  • HotspotsScoreHighValidator

  • ImageParametersAnalyzer

  • ImageParameters

  • protocol ImageBatch

  • SingleImageBatch

  • PlaceholderImageBatch

  • DocumentAutoCaptureFrameParameters

  • DocumentAutoCaptureFrameParametersEvaluator

  • DocumentAutoCaptureType.simple and DocumentAutoCaptureType.secondaryImageParameters

  • DocumentSourceDelegate.sourceNotAuthorized() to allow handling of camera permission

  • DocumentCaptureViewControllerDelegate.documentSourceNotAuthorized() to allow handling of camera permission

Changed
  • renamed framework and module to DotDocument

  • changed localization keys

  • protocol DetectionValidatorProtocol renamed to DocumentAutoCaptureFrameParametersValidator

  • DocumentCaptureController renamed to DocumentAutoCaptureController

  • DocumentCaptureControllerDelegate renamed to DocumentAutoCaptureControllerDelegate

  • removed DocumentAutoCaptureController.detectionValidator added .evaluator of type DocumentAutoCaptureFrameParametersEvaluator instead

  • DocumentAutoCaptureController now detects from ImageBatch instead of Image, to allow more complex auto capture workflows

  • removed DocumentCaptureViewController.requestHighResolutionImage(), added .highResolutionCapture instead

  • removed DocumentCaptureViewController.startDocumentCapture(), .stopDocumentCapture(), added .restart() instead

  • removed DocumentCaptureController.startDetection(), .stopDetection() added DocumentAutoCaptureController.restart() instead

  • DocumentAutoCaptureFrameParametersValidator now requires DocumentAutoCaptureFrameParameters instead of DetectionResult

  • DocumentAutoCaptureControllerDelegate and DocumentCaptureViewControllerDelegate now provides DocumentAutoCaptureFrameParameters instead of DetectionResult

  • ImageParameters.brightness, .sharpness, .hotspotsScore and DetectionResult.confidence is now normalized to [0, 1.0]

  • confidence, brightness, sharpness, hotspotsScore validators take normalized input values

  • removed SequenceValidator use DocumentAutoCaptureFrameParametersEvaluator instead

  • removed SteadyValidator, hold still phase is always present in auto capture process and is handled by DocumentAutoCaptureController

1.2.2 - 2020-12-17

Added
  • support for iOS Simulator arm64 architecture

1.2.1 - 2020-11-04

Fixed
  • for CameraDocumentSource override NSObject.init() with convenience CameraDocumentSource.init() and with CameraDocumentSourcePreset.fullHD as default parameter.

1.2.0 - 2020-11-04

Added
  • CameraDocumentSourcePreset enum

Changed
  • CameraDocumentSource.init() has CameraDocumentSourcePreset parameter.

1.1.5 - 2020-10-23

Fixed
  • crop high resolution image from DocumentCapturePlaceholderViewController

  • clear preview layer when CameraDocumentSource.stopSession() is called

Changed
  • CameraDocumentSource.orientation type to AVCaptureVideoOrientation

Added
  • documentCaptureDidLayoutSubviews to DocumentCaptureViewControllerDelegate

1.1.4 - 2020-10-02

Fixed
  • orientation of high resolution image returned from DocumentCaptureViewController

1.1.3 - 2020-09-17

Changed
  • updated SAM to 2.0.0

1.1.2 - 2020-09-16

Fixed
  • SAM architecture selection when building for release

1.1.1 - 2020-08-28

Fixed
  • camera orientation wrong initial value when presenting DocumentCaptureViewController

1.1.0 - 2020-08-25

Changed
  • detect document from cropped image

  • DocumentCaptureController has startDetection(), stopDetection()

  • DocumentSourceProtocol has startSession(), stopSession()

  • DocumentCaptureViewController has startDocumentCapture(), stopDocumentCapture()

1.0.2 - 2020-08-04

Changed
  • use Operations in DocumentCaptureController

1.0.1 - 2020-08-04

Changed
  • removed type constraint from AnnotationLayerProtocol

1.0.0 - 2020-08-03

Fixed
  • fixed memory access issue when converting images to Image

Changed
  • CameraDocumentSource learned orientation support

  • rename DocumentCaptureSimpleViewController to DocumentCapturePlaceholderViewController

  • reworked validation process in DocumentCapturePlaceholderViewController

  • DocumentCaptureViewControllerDelegate is now shared between view controllers

  • removed DocumentDoesNotFitPlaceholderValidator

  • DocumentSmallValidator and DocumentLargeValidator now calculate using area instead of width

  • DocumentCaptureController.detectionWidth is now public

  • Image conversion to and from vImage_Buffer is now public

  • added Image transformation support

  • added transformation support to Camera and Video document source

Added
  • Added DocumentCaptureViewControllerStyle

  • Added DocumentCaptureFreeViewController

  • Landscape support in UI components

  • DocumentRotationValidator

  • DocumentCenterValidator

  • Logging support

0.2.0 - 2020-07-17

Changed
  • minimal supported iOS version to 10.0

0.1.1 - 2020-07-16

Changed
  • renamed module to DOTDocument

0.1.0 - 2020-07-13

  • First release