DOT iOS Document library
v6.5.1
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.
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.
source 'https://github.com/innovatrics/innovatrics-podspecs'
use_frameworks!
target 'YOUR_TARGET' do
pod 'dot-document'
endIn case of CocoaPods problem with |
Supported Architectures
DOT iOS Document provides all supported architectures in the distributed XCFramework package.
Device binary contains: arm64.
Simulator binary contains: x86_64, arm64.
Permissions
Set the following permission in Info.plist:
<key>NSCameraUsageDescription</key>
<string>Your usage description</string>Basic Setup
Logging
DOT iOS Document supports logging using a global Logger class. You can set the log level as follows:
import DotDocument
Logger.logLevel = .debugLog 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.
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.stringsfile to your project using standard iOS localization mechanism. To change a specific text override corresponding key in thisLocalizable.stringsfile.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 = .mainCustom 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"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
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.machineReadableZoneto.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 propertyvalidatorsis used to determine whether the MRZ should be read.Property
DocumentAutoCaptureConfiguration.isMrzReadingEnabled. Use.mrzValidationinstead.
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
.sessionTokentoDocumentAutoCaptureControllerConfigurationandDocumentAutoCaptureConfiguration.
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.BuilderDocumentAutoCaptureConfiguration.QualityAttributeThresholdPresetsDocumentAutoCaptureResult.content
Changed
create
DocumentAutoCaptureConfiguration.QualityAttributeThresholdsusing.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 propertyDocumentAutoCaptureController.ProcessingResult.phaseinstead.Enum
DocumentAutoCaptureController.Event.Method
DocumentAutoCaptureController.restart(). Create new instance ofDocumentAutoCaptureControllerinstead.Method
DocumentAutoCaptureViewController.restart(). UseDocumentAutoCaptureViewController.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
DocumentAutoCaptureControllerDocumentAutoCaptureController.process(bgraRawImage: BgraRawImage)to.process(bgraRawImage: BgraRawImage, timestampMillis: Int) throws → ProcessingResultDocumentAutoCaptureResult.bgraRawImagenow contains full camera image, instead of cropped imagerenamed
BrightnessHighValidatortoBrightnessTooHighValidatorrenamed
BrightnessLowValidatortoBrightnessTooLowValidatorrenamed
DocumentDoesNotFitPlaceholderValidator.defaultPenaltyThresholdto.defaultMaxPenaltyThresholdrenamed
DocumentDoesNotFitPlaceholderValidator.penaltyThresholdto.maxPenaltyThresholdrenamed
DocumentNotDetectedValidator.defaultConfidenceThresholdto.defaultMinConfidenceThresholdrenamed
DocumentNotDetectedValidator.confidenceThresholdto.minConfidenceThresholdrenamed
DocumentOutOfBoundsValidator.defaultMarginToImageSideRatioThresholdto.defaultMinCornerDistanceToImageShorterSideRatioThresholdrenamed
DocumentOutOfBoundsValidator.marginToImageSideRatioThresholdto.minCornerDistanceToImageShorterSideRatioThresholdrenamed
HotspotsScoreHighValidatortoHotspotsScoreTooHighValidatorrenamed
SharpnessLowValidatortoSharpnessTooLowValidatorrenamed
SizeSmallValidatortoSizeTooSmallValidatorrenamed
SizeTooSmallValidator.defaultShortestEdgeToImageSideRatioThresholdto.defaultMinEdgeLengthToImageShorterSideRatioThresholdrenamed
SizeTooSmallValidator.shortestEdgeToImageSideRatioThresholdto.minEdgeLengthToImageShorterSideRatioThresholdlocalization key
dot.document_auto_capture.instruction.document_not_presenttodot.document_auto_capture.instruction.document_not_detectedlocalization key
dot.document_auto_capture.instruction.document_centeringtodot.document_auto_capture.instruction.document_out_of_boundslocalization key
dot.document_auto_capture.instruction.document_too_fartodot.document_auto_capture.instruction.size_too_smalllocalization key
dot.document_auto_capture.instruction.hotspots_presenttodot.document_auto_capture.instruction.hotspots_score_too_high
Added
DocumentAutoCaptureViewController.stopAsync()DocumentAutoCaptureViewControllerDelegate.documentAutoCaptureViewControllerStopped(:)DocumentAutoCaptureController.ProcessingResultDocumentAutoCaptureController.EventDocumentAutoCaptureDetection.bgraRawImage,.travelDocumentType,.machineReadableZonelocalization key
dot.document_auto_capture.instruction.document_does_not_fit_placeholder
Removed
DocumentAutoCaptureControllerDelegateDocumentAutoCaptureController.delegateDocumentAutoCaptureController.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
DOTCornerstoDOTDCornersobjc class name renamed from
DOTFLIntervalDoubletoDOTDIntervalDoubleobjc class name renamed from
DOTFLQualityAttributeThresholdstoDOTDQualityAttributeThresholds
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()throwsdeprecated
DocumentAutoCaptureConfiguration.initdeprecated
DocumentAutoCaptureConfiguration.confidenceLowThreshold,.sizeSmallThreshold,sharpnessLowThreshold,.brightnessLowThreshold,.brightnessHighThreshold,.hotspotsScoreHighThreshold
Added
DocumentAutoCaptureConfiguration.qualityAttributeThresholdsDocumentAutoCaptureConfiguration.initwith.qualityAttributeThresholdsparameter
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.cameraPresetdefault
DocumentAutoCaptureConfiguration.cameraPresetto.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.fillto support full screen camera preview
3.3.3 - 2022-01-24
Fixed
MRZ parsing
3.3.2 - 2022-01-13
Fixed
DocumentAutoCaptureViewControllerinternal 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,.isDetectionLayerVisibleand.validationModeDocumentAutoCaptureStyle.detectionLayerColorand.overlayColorDocumentOutOfBoundsValidatorValidationMode
Changed
document detection accuracy improved
DocumentNotDetectedValidator.defaultConfidenceThresholdto 0.9SharpnessLowValidator.defaultThresholdto 0.65DocumentDoesNotFitPlaceholderValidator.defaultPenaltyThresholdto 0.035renamed
DocumentSmallValidatortoSizeSmallValidatorrenamed
DocumentAutoCaptureConfiguration.confidenceThresholdto.confidenceLowThresholdrenamed
DocumentAutoCaptureStyle.instructionCapturingTextColorto.instructionCandidateSelectionTextColorrenamed
DocumentAutoCaptureStyle.instructionCapturingBackgroundColorto.instructionCandidateSelectionBackgroundColorrenamed
DocumentAutoCaptureStyle.placeholderCapturingColorto.placeholderCandidateSelectionColorupdated design of Document Auto Capture UI component
Removed
DocumentLargeValidatorlocalization key
dot.document_auto_capture.instruction.document_too_close
3.2.0 - 2021-11-29
Changed
improved
DocumentDoesNotFitPlaceholderValidatorDocumentDoesNotFitPlaceholderValidator.detectedToPlaceholderCornersDistanceThresholdto.penaltyThreshold
3.1.0 - 2021-11-04
Added
DocumentAutoCaptureViewControllerDelegate.documentAutoCaptureViewController(_:detected:)DocumentAutoCaptureViewControllerDelegate.documentAutoCaptureViewControllerCandidateSelectionStarted(_:)
Changed
DocumentNotDetectedValidator.defaultConfidenceThresholdto 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
MrzNotValidValidatorDocumentAutoCaptureFrameParameters.travelDocumentTypeand.machineReadableZoneDocumentAutoCaptureConfiguration.isMrzReadingEnabled,.cameraFacing,.cameraPreviewScaleType,.cameraPresetBgraRawImage,BgraRawImageFactory,CGImageFactoryImageSizeCameraPreset,CameraFacing,CameraPreviewScaleTypeCornersDocumentAutoCaptureControllerConfigurationDocumentAutoCaptureDetectionDocumentAutoCaptureResultImagePerspectiveWarperPointDouble,RectangleDouble,WrappedDouble
Changed
minimal required iOS version to iOS 11.0
improved performance of document detection algorithm
DocumentAutoCaptureFrameParametersValidatortoDocumentAutocaptureDetectionValidatorDocumentAutocaptureDetectionValidator.validate()DocumentAutoCaptureController.detect()to.process(bgraRawImage: BgraRawImage)DetectionResulttoDocumentDetector.Resultrenamed
DocumentCapturePlaceholderViewControllertoDocumentAutoCaptureViewControllerand all related APIrenamed
DotDocumentLocalizationtoLocalizationchanged localization keys
Removed
DocumentCaptureFreeViewControllerDocumentAutoCaptureConfiguration.documentSourceCameraDocumentSource,ImageDocumentSource,VideoDocumentSourceImage,ImageBatchDocumentAutoCaptureHintDocumentAutoCaptureFrameParametersEvaluator
2.3.0 - 2021-05-14
Added
DocumentAutoCaptureViewControllerConfigurationto enable additional configuration of UI componentsDocumentAutoCaptureViewControllerConfigurationpropertydocumentSourceDocumentAutoCaptureViewControllerConfigurationpropertyconfidenceThresholdDocumentAutoCaptureViewControllerConfigurationpropertysharpnessLowThresholdDocumentAutoCaptureViewControllerConfigurationpropertybrightnessLowThresholdDocumentAutoCaptureViewControllerConfigurationpropertybrightnessHighThresholdDocumentAutoCaptureViewControllerConfigurationpropertyhotspotsScoreHighThresholdDocumentDoesNotFitPlaceholderValidator
Changed
DocumentCapturePlaceholderViewController.create()DocumentCaptureFreeViewController.create()removed
BorderMarginValidatorremoved
DocumentCenteredValidatorremoved
DocumentRotationValidatorremoved
SharpnessHighValidatorremoved
DocumentAutoCaptureHint.sharpnessHigh,.widthToHeightLow,.widthToHeightHigh,.documentNotCenteredBrightnessHighValidator.maxBrightnessto.thresholdBrightnessLowValidator.minBrightnessto.thresholdDocumentLargeValidator.maxSizeto.documentWidthToImageWidthRatioThresholdDocumentSmallValidator.minSizeto.documentWidthToImageWidthRatioThresholdDocumentNotDetectedValidator.minConfidenceto.confidenceThresholdSharpnessLowValidator.minSharpnessto.thresholdlocalization 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
SingleImageBatchtoSimpleImageBatchPlaceholderImageBatch.inittoinit(image: Image, detectionFrame: CGRect, imageParametersFrame: CGRect)
2.2.0 - 2021-03-17
Added
DotDocumentLocalization.localizationDictionaryand.useLocalizationDictionaryto enable overriding of standard iOS localization mechanism
Changed
renamed
Localizationclass toDotDocumentLocalization
2.1.0 - 2021-01-27
Changed
add
DocumentCaptureViewController.start()to start capture process explicitlycapture process of
DocumentCaptureViewControllerwill no longer start implicitly
2.0.0 - 2021-01-13
Added
Localizationclass, to support localization in more complex projectsHotspotsScoreHighValidatorImageParametersAnalyzerImageParametersprotocol
ImageBatchSingleImageBatchPlaceholderImageBatchDocumentAutoCaptureFrameParametersDocumentAutoCaptureFrameParametersEvaluatorDocumentAutoCaptureType.simpleandDocumentAutoCaptureType.secondaryImageParametersDocumentSourceDelegate.sourceNotAuthorized()to allow handling of camera permissionDocumentCaptureViewControllerDelegate.documentSourceNotAuthorized()to allow handling of camera permission
Changed
renamed framework and module to
DotDocumentchanged localization keys
protocol
DetectionValidatorProtocolrenamed toDocumentAutoCaptureFrameParametersValidatorDocumentCaptureControllerrenamed toDocumentAutoCaptureControllerDocumentCaptureControllerDelegaterenamed toDocumentAutoCaptureControllerDelegateremoved
DocumentAutoCaptureController.detectionValidatoradded.evaluatorof typeDocumentAutoCaptureFrameParametersEvaluatorinsteadDocumentAutoCaptureControllernow detects fromImageBatchinstead ofImage, to allow more complex auto capture workflowsremoved
DocumentCaptureViewController.requestHighResolutionImage(), added.highResolutionCaptureinsteadremoved
DocumentCaptureViewController.startDocumentCapture(),.stopDocumentCapture(), added.restart()insteadremoved
DocumentCaptureController.startDetection(),.stopDetection()addedDocumentAutoCaptureController.restart()insteadDocumentAutoCaptureFrameParametersValidatornow requiresDocumentAutoCaptureFrameParametersinstead ofDetectionResultDocumentAutoCaptureControllerDelegateandDocumentCaptureViewControllerDelegatenow providesDocumentAutoCaptureFrameParametersinstead ofDetectionResultImageParameters.brightness,.sharpness,.hotspotsScoreandDetectionResult.confidenceis now normalized to [0, 1.0]confidence, brightness, sharpness, hotspotsScore validators take normalized input values
removed
SequenceValidatoruseDocumentAutoCaptureFrameParametersEvaluatorinsteadremoved
SteadyValidator, hold still phase is always present in auto capture process and is handled byDocumentAutoCaptureController
1.2.2 - 2020-12-17
Added
support for iOS Simulator arm64 architecture
1.2.1 - 2020-11-04
Fixed
for
CameraDocumentSourceoverrideNSObject.init()withconvenience CameraDocumentSource.init()and withCameraDocumentSourcePreset.fullHDas default parameter.
1.2.0 - 2020-11-04
Added
CameraDocumentSourcePresetenum
Changed
CameraDocumentSource.init()hasCameraDocumentSourcePresetparameter.
1.1.5 - 2020-10-23
Fixed
crop high resolution image from
DocumentCapturePlaceholderViewControllerclear preview layer when
CameraDocumentSource.stopSession()is called
Changed
CameraDocumentSource.orientationtype toAVCaptureVideoOrientation
Added
documentCaptureDidLayoutSubviewstoDocumentCaptureViewControllerDelegate
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
DocumentCaptureControllerhasstartDetection(),stopDetection()DocumentSourceProtocolhasstartSession(),stopSession()DocumentCaptureViewControllerhasstartDocumentCapture(),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
CameraDocumentSourcelearned orientation supportrename
DocumentCaptureSimpleViewControllertoDocumentCapturePlaceholderViewControllerreworked validation process in
DocumentCapturePlaceholderViewControllerDocumentCaptureViewControllerDelegateis now shared between view controllersremoved
DocumentDoesNotFitPlaceholderValidatorDocumentSmallValidatorandDocumentLargeValidatornow calculate using area instead of widthDocumentCaptureController.detectionWidthis now publicImageconversion to and fromvImage_Bufferis now publicadded
Imagetransformation supportadded transformation support to Camera and Video document source
Added
Added
DocumentCaptureViewControllerStyleAdded
DocumentCaptureFreeViewControllerLandscape support in UI components
DocumentRotationValidatorDocumentCenterValidatorLogging 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