DOT iOS Document library
v3.7.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
Distribution
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'
end
In 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 = .debug
Log levels:
info
debug
warning
error
none
Each log message contains dot-document
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:
documentAutoCaptureController.process(bgraRawImage: bgraRawImage)
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 by the delegate and the document auto capture process is over.
In case you want to force the capture event, call the requestCapture()
method. After you call the next process()
method, the input image will be returned as a result by the delegate and the document auto capture process will be finished.
documentAutoCaptureController.requestCapture();
In case you want to restart the document auto capture process, call the restart()
method.
documentAutoCaptureController.restart();
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
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.
The following properties are available in DocumentAutoCaptureConfiguration
:
(Optional)
[CameraFacing.back]
cameraFacing: CameraFacing
– Camera facing.CameraFacing.front
CameraFacing.back
(Optional)
[CameraPreviewScaleType.fit]
cameraPreviewScaleType: CameraPreviewScaleType
– The camera preview scale type.CameraPreviewScaleType.fit
CameraPreviewScaleType.fill
(Optional)
[CameraPreset.fullHD]
cameraPreset: CameraPreset
– Camera preset.CameraPreset.photo
CameraPreset.hd
CameraPreset.fullHD
(Optional)
[ValidationMode.standard]
validationMode: ValidationMode
– Validation mode.ValidationMode.standard
ValidationMode.strict
(Optional)
[0.9]
confidenceLowThreshold: Double
- Document detection confidence threshold in range [0, 1.0].(Optional)
[0.43]
sizeSmallThreshold: Double
- Minimal accepted size ratio between the shortest edge of the detected document and the image side, in range [0, 1.0].(Optional)
[0.65]
sharpnessLowThreshold: Double
- Minimal accepted sharpness threshold in range [0, 1.0].(Optional)
[0.25]
brightnessLowThreshold: Double
- Minimal accepted brightness threshold in range [0, 1.0].(Optional)
[0.9]
brightnessHighThreshold: Double
- Maximal accepted brightness threshold in range [0, 1.0].(Optional)
[0.008]
hotspotsScoreHighThreshold: Double
- Maximal accepted hotspots score threshold in range [0, 1.0].(Optional)
[false]
isMrzReadingEnabled: Bool
- Use this flag to enable MRZ reading during document auto capture process.(Optional)
[false]
isDetectionLayerVisible: Bool
- Use this flag to show or hide detection rectangle during the document auto capture process.
The following properties are available in DocumentAutoCaptureStyle
:
(Optional)
[UIColor.black]
backgroundColor: UIColor
- Background color of top level view.(Optional)
[UIFont.systemFont(ofSize: 16, weight: .semibold)]
instructionFont: UIFont
- Instruction label font.(Optional)
[UIColor(red: 2.0/255.0, green: 27.0/255.0, blue: 65.0/255.0, alpha: 1.0)]
instructionTextColor: UIColor
- Instruction label text color.(Optional)
[UIColor(red: 2.0/255.0, green: 27.0/255.0, blue: 65.0/255.0, alpha: 1.0)]
instructionCandidateSelectionTextColor: UIColor
- Instruction label text color during capture.(Optional)
[UIColor(red: 248.0/255.0, green: 251.0/255.0, blue: 251.0/255.0, alpha: 1.0)]
instructionBackgroundColor: UIColor
- Instruction background color.(Optional)
[UIColor(red: 0, green: 191.0/255.0, blue: 178.0/255.0, alpha: 1)]
instructionCandidateSelectionBackgroundColor: UIColor
- Instruction background color during capture.(Optional)
[UIColor.white]
placeholderColor: UIColor
- Placeholder color.(Optional)
[UIColor(red: 0, green: 191.0/255.0, blue: 178.0/255.0, alpha: 1)]
placeholderCandidateSelectionColor: UIColor
- Placeholder color during capture.(Optional)
[UIColor.white]
detectionLayerColor: UIColor
- Detection layer color.(Optional)
[UIColor(red: 19.0/255.0, green: 19.0/255.0, blue: 19.0/255.0, alpha: 0.5)]
overlayColor: UIColor
- Overlay color, semi-transparent color is recommended.
You can handle the DocumentAutoCaptureViewController
events using its delegate DocumentAutoCaptureViewControllerDelegate
.
@objc(DOTDocumentAutoCaptureViewControllerDelegate) public protocol DocumentAutoCaptureViewControllerDelegate: AnyObject {
/// Tells the delegate that the document was captured.
@objc func documentAutoCaptureViewController(_ viewController: DocumentAutoCaptureViewController, captured result: DocumentAutoCaptureResult)
/// Tells the delegate that the new detection was processed.
@objc optional func documentAutoCaptureViewController(_ viewController: DocumentAutoCaptureViewController, detected detection: DocumentAutoCaptureDetection)
/// Tells the delegate that the candidate selection phase has started.
@objc optional func documentAutoCaptureViewControllerCandidateSelectionStarted(_ viewController: DocumentAutoCaptureViewController)
/// Tells the delegate that you have no permission for camera usage.
@objc optional func documentAutoCaptureViewControllerNoCameraPermission(_ viewController: DocumentAutoCaptureViewController)
@objc optional func documentAutoCaptureViewControllerViewDidLoad(_ viewController: DocumentAutoCaptureViewController)
@objc optional func documentAutoCaptureViewControllerViewDidLayoutSubviews(_ viewController: DocumentAutoCaptureViewController)
@objc optional func documentAutoCaptureViewControllerViewWillAppear(_ viewController: DocumentAutoCaptureViewController)
@objc optional func documentAutoCaptureViewControllerViewDidAppear(_ viewController: DocumentAutoCaptureViewController)
@objc optional func documentAutoCaptureViewControllerViewWillDisappear(_ viewController: DocumentAutoCaptureViewController)
@objc optional func documentAutoCaptureViewControllerViewDidDisappear(_ viewController: DocumentAutoCaptureViewController)
@objc optional func documentAutoCaptureViewControllerViewWillTransition(_ viewController: DocumentAutoCaptureViewController)
}
In order to start the document auto capture process call the start()
method.
In case you want to handle detection data, implement documentAutoCaptureViewController(:detected:)
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.
In case you want to force the capture event, call the requestCapture()
method.
In case you want to restart the document auto capture process (e.g. you want to capture both sides of the document, one after another), call the restart()
method. The whole process will start from the beginning.
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 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
"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.candidate_selection" = "Hold still...";
"dot.document_auto_capture.instruction.document_centering" = "Center document";
"dot.document_auto_capture.instruction.document_not_present" = "Scan document";
"dot.document_auto_capture.instruction.document_too_far" = "Move closer";
"dot.document_auto_capture.instruction.hotspots_present" = "Avoid reflections";
"dot.document_auto_capture.instruction.mrz_not_valid" = "Scan valid machine readable document";
"dot.document_auto_capture.instruction.sharpness_too_low" = "More light needed";
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
3.7.1 - 2022-12-02
Changed
objc class name renamed from
DOTCorners
toDOTDCorners
objc class name renamed from
DOTFLIntervalDouble
toDOTDIntervalDouble
objc class name renamed from
DOTFLQualityAttributeThresholds
toDOTDQualityAttributeThresholds
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.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.3 - 2022-01-24
Fixed
MRZ parsing
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.9SharpnessLowValidator.defaultThreshold
to 0.65DocumentDoesNotFitPlaceholderValidator.defaultPenaltyThreshold
to 0.035renamed
DocumentSmallValidator
toSizeSmallValidator
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
toDocumentAutocaptureDetectionValidator
DocumentAutocaptureDetectionValidator.validate()
DocumentAutoCaptureController.detect()
to.process(bgraRawImage: BgraRawImage)
DetectionResult
toDocumentDetector.Result
renamed
DocumentCapturePlaceholderViewController
toDocumentAutoCaptureViewController
and all related APIrenamed
DotDocumentLocalization
toLocalization
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 componentsDocumentAutoCaptureViewControllerConfiguration
propertydocumentSource
DocumentAutoCaptureViewControllerConfiguration
propertyconfidenceThreshold
DocumentAutoCaptureViewControllerConfiguration
propertysharpnessLowThreshold
DocumentAutoCaptureViewControllerConfiguration
propertybrightnessLowThreshold
DocumentAutoCaptureViewControllerConfiguration
propertybrightnessHighThreshold
DocumentAutoCaptureViewControllerConfiguration
propertyhotspotsScoreHighThreshold
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
toSimpleImageBatch
PlaceholderImageBatch.init
toinit(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 toDotDocumentLocalization
2.1.0 - 2021-01-27
Changed
add
DocumentCaptureViewController.start()
to start capture process explicitlycapture process of
DocumentCaptureViewController
will no longer start implicitly
2.0.0 - 2021-01-13
Added
Localization
class, to support localization in more complex projectsHotspotsScoreHighValidator
ImageParametersAnalyzer
ImageParameters
protocol
ImageBatch
SingleImageBatch
PlaceholderImageBatch
DocumentAutoCaptureFrameParameters
DocumentAutoCaptureFrameParametersEvaluator
DocumentAutoCaptureType.simple
andDocumentAutoCaptureType.secondaryImageParameters
DocumentSourceDelegate.sourceNotAuthorized()
to allow handling of camera permissionDocumentCaptureViewControllerDelegate.documentSourceNotAuthorized()
to allow handling of camera permission
Changed
renamed framework and module to
DotDocument
changed localization keys
protocol
DetectionValidatorProtocol
renamed toDocumentAutoCaptureFrameParametersValidator
DocumentCaptureController
renamed toDocumentAutoCaptureController
DocumentCaptureControllerDelegate
renamed toDocumentAutoCaptureControllerDelegate
removed
DocumentAutoCaptureController.detectionValidator
added.evaluator
of typeDocumentAutoCaptureFrameParametersEvaluator
insteadDocumentAutoCaptureController
now detects fromImageBatch
instead ofImage
, to allow more complex auto capture workflowsremoved
DocumentCaptureViewController.requestHighResolutionImage()
, added.highResolutionCapture
insteadremoved
DocumentCaptureViewController.startDocumentCapture()
,.stopDocumentCapture()
, added.restart()
insteadremoved
DocumentCaptureController.startDetection()
,.stopDetection()
addedDocumentAutoCaptureController.restart()
insteadDocumentAutoCaptureFrameParametersValidator
now requiresDocumentAutoCaptureFrameParameters
instead ofDetectionResult
DocumentAutoCaptureControllerDelegate
andDocumentCaptureViewControllerDelegate
now providesDocumentAutoCaptureFrameParameters
instead ofDetectionResult
ImageParameters.brightness
,.sharpness
,.hotspotsScore
andDetectionResult.confidence
is now normalized to [0, 1.0]confidence, brightness, sharpness, hotspotsScore validators take normalized input values
removed
SequenceValidator
useDocumentAutoCaptureFrameParametersEvaluator
insteadremoved
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
CameraDocumentSource
overrideNSObject.init()
withconvenience CameraDocumentSource.init()
and withCameraDocumentSourcePreset.fullHD
as default parameter.
1.2.0 - 2020-11-04
Added
CameraDocumentSourcePreset
enum
Changed
CameraDocumentSource.init()
hasCameraDocumentSourcePreset
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 toAVCaptureVideoOrientation
Added
documentCaptureDidLayoutSubviews
toDocumentCaptureViewControllerDelegate
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
hasstartDetection()
,stopDetection()
DocumentSourceProtocol
hasstartSession()
,stopSession()
DocumentCaptureViewController
hasstartDocumentCapture()
,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 supportrename
DocumentCaptureSimpleViewController
toDocumentCapturePlaceholderViewController
reworked validation process in
DocumentCapturePlaceholderViewController
DocumentCaptureViewControllerDelegate
is now shared between view controllersremoved
DocumentDoesNotFitPlaceholderValidator
DocumentSmallValidator
andDocumentLargeValidator
now calculate using area instead of widthDocumentCaptureController.detectionWidth
is now publicImage
conversion to and fromvImage_Buffer
is now publicadded
Image
transformation supportadded 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