Added setters for UseCaseResolutionSize limits for Preview and Analyzer use-cases in ScanbotCameraXView. See ScanbotCameraXView#setPreviewFrameResolutionLimit(limit: UseCaseResolutionSize) and ScanbotCameraXView#setAnalyzerFrameResolutionLimit(limit: UseCaseResolutionSize).
🚀 Improvements:
Barcode Scanner:
Improved handling of back action with multiple dialogs and bottom sheets.
Document Scanner:
Don't rotate images if they are initially detected as rotated by 180 degrees.
General:
Changed permission on mock camera to android.permission.READ_EXTERNAL_STORAGE.
Optimized the selection of the resolution for the Preview use-case in ScanbotCameraXView. Square resolution support is now an opt-in option. See IScanbotCameraView#setSquareFrameSizeEnabled(enabled: Boolean).
RTU-UI v2: Added parameter DocumentScanningFlow.showReviewScreenOnStart that allows showing the Review Screen immediately if the scanner is opened with an existent document ID. E.g. document edit mode.
RTU-UI v2: Added an option to automatically navigate to the Review Screen after each scan. Use DocumentScanningFlow().screens.camera.openReviewAfterEachScan = true.
RTU-UI v2: Added an option to open either the first or the last page when the Review Screen is opened. Use DocumentScanningFlow().screens.review.showLastPageWhenAdding = true.
VIN Scanner:
RTU-UI v2: Added a brand-new, redesigned VIN Scanner. Use io.scanbot.sdk.ui_v2.vin.VinScannerActivity.
Document Data Extractor:
RTU-UI v2: Added a brand-new, redesigned Document Data Extractor. Use io.scanbot.sdk.ui_v2.documentdata.DocumentDataExtractorActivity to start the new scanner.
Introduced a Document Verification API including document semantics verification capabilities. Use the new verifyDocument(documentParts: List<GenericDocument>) method.
Added support for multiple new document types:
ID Cards from Brazil, Hong Kong, Macao, and China.
Chinese Entry and Exit Permits.
Returns the issuing series of German ID Cards as part of the returned document as the Series field.
Now supports the front side of many more EU driver's licenses.
Partial support for parsing of German addresses. For respective ID cards, address parsing can be enabled via a new DeAddressParserConfiguration. Parsed addresses are stored as child documents.
Check Scanner:
RTU-UI v2: Added a brand-new, redesigned Check Scanner. Use io.scanbot.sdk.ui_v2.check.CheckScannerActivity.
Barcode Scanner:
Added extendedQuad and extendedQuadNormalized fields to the BarcodeItem class to represent extended quads for 1D barcodes.
BarcodeItem has a new field rawBytesEncodings that contains the precise character encoding information of rawBytes.
BarcodeItem has a new field structuredAppendInfo for messages split across multiple barcodes.
BarcodeScannerConfiguration has a new field accumulationConfig which allows the accumulation of barcodes over multiple frames in live mode. BarcodeItem has a new field globalIndex to identify a barcode across multiple frames.
RTU-UI v2: Added selectedZoomFactor: Double metadata field in BarcodeScannerUiResult with the value that the user used to scan the barcode.
General:
Added an analytics feature. You can now subscribe to events and redirect them to an external analytics system. Use ScanbotSDK(context).analyticsManager.
ImageRef in Java wrapper can now be efficiently created from a java.io.InputStream.
Added setImageCaptureEnabled(enabled: Boolean) method to ScanbotCameraXView to enable or disable image capture functionality.
Added more debug level logging to ScanbotCameraXView events.
Added the possibility to inject an image to simulate a video stream and a captured image to any scanner's camera session for UI testing. See ScanbotCameraViewConfigurationProvider.
Integrated Android Performance Hint Session. This significantly improves multithreading performance for different scanners on devices that support the Hint Session (e.g. Pixel 9 Pro and Samsung S24 Ultra). Use ScanbotSDKInitializer.setPerformanceHintApiEnabled(false) to turn it off.
Added option for rtu-ui-v2 CameraConfiguration for limit the detection fps in ScanbotCameraXView. Use CameraConfiguration.fpsLimit = 4 to limit the detection fps to less than 4 frames per second.
🚀 Improvements:
Document Scanner:
Increased performance for Document Scanner algorithms.
Document Quality Analyzer:
Speed improvements. Note: document quality scores may slightly change for the same input images when compared to the previous version of the DoQA.
OCR Engine:
Improved handling of special characters like umlauts when frame accumulation is used.
MRZ Scanner:
On US border crossing permits, the document number is now returned in the correct field.
Dates in MRZ now also support parsedData correctly.
Text Pattern Scanner:
General speed improvements.
Now supports XNNPACK for faster inference.
Document Data Extractor:
General speed improvements.
Now detects whether a document is in focus and only starts the heavy recognition pipeline when image quality is suitable.
Can now detect glare in images. Fields obstructed by glare will be returned with a validation status of Obstructed.
Classification for documents with MRZ is more stable.
Added normalization before date recognition.
More consistent usage of common field types.
Improved maiden name processing for DePassport and DeIdCard.
Now also supports the new German ID card format issued starting 2024.
Check Scanner:
If image cropping is enabled and is successful, check recognition is performed on the crop instead of the original image.
Credit Card Scanner:
Support for credit cards with an expiry date above the card number.
Support for credit cards with a name written on two lines.
Medical Certificate Scanner:
Date recognition in Medical Certificate forms is now based on the Scanbot OCR Engine and shows significant quality improvements.
Barcode Scanner:
All Barcode AR overlays are now based on extendedQuads.
Boarding pass document parser now supports up to version 8 of the IATA-BCBP standard.
vCard document parser was improved.
Android: Improved ScanbotCameraXView preview size selection strategy for the square screens.
Android: Improved the algorithm of high performance cores computation as the old one didn't work correctly on some devices (e.g. Pixel 9 Pro).
Android: Integrated Android Performance Hint Session. This significantly improves multithreading performance for some scanners (e.g. Credit Card Scanner and Barcode Scanner) on devices that support the Hint Session (e.g. Pixel 9 Pro and Samsung S24 Ultra).
🐞 Bug Fixes:
Document Scanner:
RTU-UI v2: Fixed an issue where the last scanned page's preview would not update on a specific layout configuration.
RTU-UI v2: Fixed an issue where the start of the activity without initializing the Scanbot SDK was leading to an application crash.
RTU-UI v2: Auto-rotation is now applied only if the document was found in the snapped image.
RTU-UI v1: Fixed insets for the shutter button when the app is built with target_sdk >= 35.
Cropping View: Fixed an issue with a broken layout after screen rotation without recreating the view.
MRZ Scanner:
Fixed an issue causing null to be returned as a confidence of empty fields.
Document Data Extractor:
When IssuerNumber is excluded on European health insurance cards, this no longer leads to the IssuerName being incorrectly excluded.
MRZ fallback now also works when no accepted document types are selected.
Credit Card Scanner:
Setting the confirmation method to INTERPOLATE when scanning credit cards no longer results in unsuccessful recognitions if all data was extracted and verified.
Returns the correct scanning status if no fields are recognized.
Barcode Scanner:
The carrier identifier for MaxiCode mode 3 might be encoded by using different codewords. Now, all possible codewords are checked.
vCard document parser now correctly processes the "FN" key as FormattedName.
General:
Fixed a rare division by zero crash in Credit Card Scanner, Document Data Extractor, and MRZ Scanner.
RTU-UI v2: Fixed handling of the back actions for modal dialogs.
Fixed a bug when CameraTakePictureCallback.onTakePictureRequested() wasn't called properly at the corresponding event.
⚠️ Breaking changes:
Document Data Extractor:
Removed the legacy RTU-UI Document Data Extractor. Use RTU-UI v2 instead.
By default, only German documents are now enabled for scanning. Previously, all supported documents were enabled.
DeDriverLicenseFront and DeDriverLicenseBack are renamed to EuropeanDriverLicenseFront and EuropeanDriverLicenseBack respectively.
Barcode Scanner:
BarcodePolygonsView.BarcodeItemViewBinder.bindView(): Added an additional property with textViewStyle.
Added an option to limit the analyzer FPS processing for DocumentScannerView, BarcodeScannerView and BarcodeScanAndCountView. See more here ICameraViewConfiguration#setAnalyzerFpsLimit(fps: Float).
🚀 Improvements:
Updated custom ScanbotCameraXConfigProvider logic for Kiron devices.
Document Scanner RTU-UI v2: added an auto-rotate document option. The document will now be automatically rotated based on the text orientation detected by the Document Quality Analyzer. See more here: CameraScreenConfiguration.autoRotateImages.
ContourDetector feature was renamed to DocumentScanner and has a more advanced configuration and scanning API. See more here: DocumentScanner.
Advanced configuration of Barcode Scanner. See more here: BarcodeScannerConfiguration.
Simplified configuration of Barcode Scanner. See more here: BarcodeScannerConfiguration.create(barcodeFormats: List<BarcodeFormat>, extractedDocumentFormats: List<BarcodeDocumentFormat>, onlyAcceptDocuments: Boolean).
Lists of predefined subsets (1D, 2D, Postal, Pharma, etc.) of barcode formats. Old predefined sets of barcode formats were removed. See more here: BarcodeFormats.
Added an ability to filter out all unaccepted barcode document formats in BarcodeDocumentParser. See more here: BarcodeDocumentParser.parseDocument(input: String, acceptedFormats: List<BarcodeDocumentFormat> = BarcodeDocumentFormats.all).
Advanced configuration of Document Quality Analyzer. See more here: DocumentQualityAnalyzerConfiguration.
Advanced configuration of Health Insurance Card Scanner. See more here: EuropeanHealthInsuranceCardRecognizerConfiguration.
Advanced configuration of MRZ Scanner. See more here: MrzScannerConfiguration.
Generic Document Recognizer feature was renamed to Document Data Extractor and has a more advanced configuration and scanning API. See more here: DocumentDataExtractor.
Generic Text Recognizer feature was renamed to Text Pattern Scanner and has a more advanced configuration and scanning API. See more here: TextPatternScanner.
Introduced a new Text Patter Scanner RTU-UI v2 component. See more here: TextPatternScannerActivity.
Introduced a new MRZ Scanner RTU-UI v2 component. See more here: MrzScannerActivity.
Medical Certificate Recognizer feature was renamed to Medical Certificate Scanner and has a more advanced configuration and scanning API. See more here: MedicalCertificateScanner.
Images are now represented as references by using the ImageRef feature.
Image Processor can now be created with an ImageRef object. See more here: ImageProcessor(imageRef: ImageRef).
Check Recognizer feature was renamed to Check Scanner and has a more advanced configuration and scanning API. See more here: CheckScanner.
Introduced a new feature: Credit Card Scanner, capable of detecting credit cards and extracting data from them. See more here: CreditCardScanner.
Introduced a new Credit Card Scanner RTU-UI v2 component. See more here: CreditCardScannerActivity.
Added an option to limit input image size for Document Quality Estimator. If it is bigger then the image will be resized.
Added a new BarcodeScannerEngineMode called NEXT_GEN_FAR_DISTANCE which is optimized for scanning from far distances.
Introduced a new engine mode NEXT_GEN_LOW_POWER_FAR_DISTANCE that is optimized for scanning barcodes from far distances on low-power devices.
Added support for new barcode formats that are used in the pharmaceutical industry: PHARMA_CODE, PHARMA_CODE_TWO_TRACK, PZN_8 (Pharmazentralnummer) and PZN_7.
Added support for a new barcode document format BarcodeDocumentFormat.HIBC.
BarcodeItem has a new sizeScore field with a value between 0 and 1 that represents the relative size of the barcode compared to the size of the input image. All barcode configurations have a new float minimumSizeScore that is set to 0 by default. All barcodes with sizeScore < minimumSizeScore are ignored. Note that minimumSizeScore can be configured differently for each barcode format.
Added a flag addAdditionalQuietZone to BarcodeFormatConfigurationBase. If this flag is enabled, we process the barcode scanning with an artificial quiet zone that we add to the input image. This flag should be used to scan sharp crops of a barcode. By default the flag addAdditionalQuietZone is disabled.
Expanded generic document field validation status. A field can now also be INFERRED - means that the value was not OCR'd but was inferred from the document type or other fields, or IGNORED - means that the field is required by the schema, but was disabled in the recognizer.
Generic document fields can now have parsedData attributes. See more here: FieldParsedData.
Generic document dates are parsed into a YYYY-MM-DD date format according to ISO 8601.
Generic document countries are parsed as in the formats ISO_COUNTRY_NAME, ISO_COUNTRY_ALPHA_2, ISO_COUNTRY_ALPHA_3 and ISO_COUNTRY_NUMERIC according to ISO 3166-1.
Generic document gender fields are parsed as "Male" or "Female" if applicable.
Document Quality Analyzer: can now also return the orientation of the document in steps of 90 degrees. Enabled by setting DocumentQualityAnalyzerConfiguration.detectOrientation to true.
Document Data Extractor, Medical Certificate Scanner and Check Scanner now return document detection results.
Check Scanner: added possibility of returning cropped document.
Optionally return QualityHeatmap as a part of the DocumentQualityAnalyzerResult.
Added support for non-ICAO conformant machine readable zones on US border crossing cards.
Added properties to MrzScannerConfiguration and CreditCardScannerConfiguration that allow to set if crops should be returned.
Added a flag keepScreenOn to configuration for all RTU-UI v2 scanner screens. If true, as long as this window is visible, the device's screen will stay awake.
Introduced a boolean strictMode for certain barcode configurators. If this mode is disabled, it should allow for a higher detection rate in difficult scenarios, but with the possibility that false positive results may occur. Currently, we support strictMode for QR_CODE, MICRO_QR_CODE, RMQR_CODE, PDF_417, MICRO_PDF417, and GS1_COMPOSITE.
RTU-UI v2: added support of minimumSizeScore property for Barcode Scanner configuration.
🚀 Improvements:
Added the option to ignore barcodes that do not decode to one of the accepted document formats for BarcodeScannerConfiguration in RTU-UI v2 screen. See more here: BarcodeScannerConfiguration.onlyAcceptDocuments.
Significant speed improvements in live mode on very large input resolutions.
Improved the false positive rate for ITF barcode format.
Improved quiet zone checks for the barcode formats ITF, CODE_11, MSI_PLESSEY, IATA_2_OF_5, INDUSTRIAL_2_OF_5 and CODE_25.
We additionally allow for checking maximumTextLength for the barcode formats Code11, Code39, Code93, Code128 and Codabar.
Added the option to extract VIN data from barcodes for VIN Scanner RTU UI v1 screen. See more here: VinScannerConfiguration.setExtractVINFromBarcode(enabled: Boolean)
Quantized TextLineDetection model. Now it works faster with the same quality.
Image Processor: new preset - BinarizationFilterPreset.PRESET_5, an improved version of PRESET_4, that also works well on documents with barcodes.
Higher accuracy for document classification.
Document Scanner: exposed acceptedAspectRatioScore and aspectRatios in the scanner configuration.
Document Scanner: added OK_ORIENTATION_MISMATCH status - returned when screen and document orientations don't match.
Document Scanner: OK_ORIENTATION_MISMATCH can be disabled by setting ignoreOrientationMismatch to true.
Validation of VINs implements full ISO 3779 standard reducing false positives.
Digits are no longer recognized as part of given names or surnames in the Document Data Extractor.
Guarantee the same document quality for 90 degree rotated images.
Passports issued in Costa Rica before 2022 include both a Sequence Number and an ID Number. When used internationally, the ID Number functions as the equivalent of what other countries refer to as the Passport Number or Document Number. However, the pre-2022 Costa Rican passport does not encode the ID Number in the Document Number area of the MRZ, leading to confusion during international travel. To address this, we now return the ID Number as the DocumentNumber in the MRZ field and the Sequence Number as the PersonalNumber field.
Document Scanner RTU-UI v2: improved expandability of bad image quality hint on Acknowledgement Screen from 2 to 5 lines.
Barcode Scanner: By default, Code 93 now includes check digits in the result. To disable this and restore the previous behavior, set stripCheckDigits = true.
🐞 Bug fixes:
Fixed screen insets for Android API 35 with forced edge-to-edge mode by opting it out for RTU-UI v1 screens.
RTU-UI v2: fixed the modal dialog to no longer appear below the status bar.
Clamped parametric filters radius to 127 to prevent asserts in openCV.
Fixed an overflow when decoding a MICRO_QR_CODE barcode format with wrong bits in numeric mode.
Fixed minimumTextLength for ITF barcode format. Before, we used it to check the number of symbols instead of the true text length.
Fixed returned results for all types of UpcEanExtensionBehavior.
Fixed checksum for Code39 barcode format.
For Code11 barcode format with exactly 10 data digits, enabled checksum and enabled flag stripCheckDigits, we now strip both check digits.
Fixed sorting of quad points for four-state/postal barcode types.
Fixed quad when flag BarcodeFormatConfigurationBase.addAdditionalQuietZone is enabled.
RTU-UI v2: fixed issue where FindAndPickScanningMode().sheetContent.barcodeItemImageVisible was not properly applied.
RTU-UI v2: fixed accessibility content for action buttons.
Fixed Medical Certificate Scanner user guidance default background (was absent before).
Fixed Check Scanner user guidance default background (was absent before).
Fixed Document Scanner user guidance default background (was green, should be kept the same).
Fixed Finder Document Scanner user guidance default background (was green, should be kept the same).
Fixed Document Scanner fill polygon color (should not be filled by default - was yellow before).
Fixed Finder Document Scanner fill polygon color (should not be filled by default - was yellow before).
Fixed Document Scanner shutter button (should not have yellow color by default).
Document Scanner RTU-UI v2: fixed bug where screens.camera.captureFeedback.snapFeedbackMode = PageSnapFeedbackNone() resulted in not auto switching to review screen after reaching max pages limit (if set).
Cropping Screen RTU-UI v2: screen returned result instead of cancel if nothing was changed on the screen.
PDF Generator properly handles no-schema URIs as an input.
Fixed a bug in Document Data Extractor while determining validation status when fields are excluded.
Fixed point sorting in Document Scanner.
Resolved an issue with high peak memory consumption in Document Data Extractor.
On some German ID cards, the MaidenName and Surname results were incorrectly merged in the result.
Document Quality Analyzer: fixed crash when maxImageSize was 0.
Fixed a crash and simplified the logic in person-number extraction. Previously the alphabetical substrings were extracted from whitelisted texts, without considering the current length of the already filtered texts.
Fixed incorrect handling of field validation for Driver License expiry date.
Fixed incorrect output of Text Pattern Scanner for unicode symbols.
Fixed a crash when MRZ fallback was enabled and no text on document was detected.
Document Quality Analyzer: fixed patch size which is used when minFraction = 1.
TIFF Generator: fixed JPEG/Deflate support.
TIFF Generator properly handles URIs with schema as an input.
Cropping Screen RTU-UI v2: fixed issue with status bar light/dark mode not applied correctly.
Fixed content:// type uri handling for PdfGenerator, TiffGenerator and OcrEngine by adding temporary local caching mechanism for the input uris. File copies would be deleted after processing.
Fixed a crash when adding/removing frameHandlers in ScanbotCameraX in a concurrency race condition.
Fixed the resolution strategy for the square preview for ScanbotCameraXView.
⚠️ Breaking Changes:
Document Quality Analyzer: to use this feature, you now also need the following dependency: io.scanbot:sdk-docqualityanalyzer-assets:X.X.X. Note that it’s also required for the Ready-to-Use UI Document Scanner feature.
RTU-UI v1: ll screens now expect RGBA values for HEX string when parsing configuration from JSON.
RTU-UI v1: refactored the screen result structure for both single and batch scanning operations. See more here: BarcodeScannerResult.
RTU-UI v1: removed the ability to set Barcode Image Generation type in the screen configuration.
RTU-UI v2: changed the result API of the screen. See more here: BarcodeScannerUiResult.
Removed old configuration API of Barcode Scanner. Please use the new configuration mechanisms instead.
All Barcode Formats are represented by io.scanbot.sdk.barcode.BarcodeFormat enum. All other barcode format enums were removed.
Replaced class io.scanbot.barcodescanner.model.BarcodeType with io.scanbot.sdk.barcode.BarcodeFormat.
Renamed enum MSIPlesseyChecksumAlgorithm to MsiPlesseyChecksumAlgorithm.
Barcode Document Format is represented by io.scanbot.sdk.barcode.BarcodeDocumentFormat enum.
Removed class io.scanbot.sdk.ui_v2.common.mappers.AspectRatio, please use io.scanbot.sdk.common.AspectRatio.
RTU-UI v2: refactored BarcodesExtensionFilter enum and synchronized with UpcEanExtensionBehavior enum from Barcode Scanner Classic component API.
Replaced acceptedDocumentFormats list parameter in BarcodeScannerConfiguration with extractedDocumentFormats list of document formats and onlyAcceptDocuments flag.
Changed Check Scanner result API. See more here: CheckScanningResult.
Removed old configuration API of Check Scanner. Please use the new configuration mechanisms instead. See more here: CheckScanner.setConfiguration(configuration: CheckScannerConfiguration).
Removed old configuration API of Document Quality Analyzer. Please use the new configuration mechanisms instead. See more here: DocumentQualityAnalyzer.setConfiguration(configuration: DocumentQualityAnalyzerConfiguration).
Removed NO_DOCUMENT status from the DocumentQuality enum in Document Quality Analyzer results.
Removed old configuration API of Health Insurance Card Scanner feature. Please use the new configuration mechanisms instead. See more here: HealthInsuranceCardScanner.setConfiguration(configuration: EuropeanHealthInsuranceCardRecognizerConfiguration).
Changed Health Insurance Card Scanner result API. See more here: EuropeanHealthInsuranceCardRecognitionResult.
Removed old configuration API of MRZ Scanner. Please use the new configuration mechanisms instead. See more here: MrzScanner.setConfiguration(configuration: MrzScannerConfiguration).
Removed old configuration API of Document Data Extractor. Please use the new configuration mechanisms instead. See more here: DocumentDataExtractor.setConfiguration(configuration: DocumentDataExtractorConfiguration).
Removed old configuration API of Text Pattern Scanner. Please use the new configuration mechanisms instead. See more here: TextPatternScanner.setConfiguration(configuration: TextPatternScannerConfiguration).
Changed the interfaces of Text Pattern Validation and Clean callbacks. Please use new Custom Content Validator instead. See more here: ContentValidator.
Changed Text Pattern Scanner result API. See more here: TextPatternScannerResult.
Renamed sdk-generictext-assets assets library to sdk-textpattern-assets.
Removed shouldRecognize property from the extract*() methods in Document Data Extractor. Please use the new DocumentDataExtractionMode configuration instead. See more here: DocumentDataExtractionMode.
Renamed sdk-genericdocument-assets assets library to sdk-documentdata-assets.
Renamed class MRZScanner to MrzScanner.
Changed MRZ Scanner result API. See more here: MrzScannerResult.
Changed Medical Certificate Scanner result API. See more here: MedicalCertificateScanningResult.
Removed old configuration API of Medical Certificate Scanner. Please use the new configuration mechanisms instead. See more here: MedicalCertificateScanningParameters.
Removed old configuration API of VIN Scanner. Please use the new configuration mechanisms instead. See more here: VinScanner.setConfiguration(configuration: VinScannerConfiguration).
Changed VIN Scanner result API. See more here: VinScannerResult.
Changed Document Scanner result API. See more here: DocumentDetectionResult.
Document Scanner was moved to the io.scanbot.sdk.document package.
Changed the engine mode API representation for Document Scanner. The engine modes now are respectively named LEGACY for EDGE_BASED and ML for ML_BASED. See more here: DocumentScannerEngineMode.
Removed context: Context property from DocumentScannerActivity.ResultContract constructor.
Document Scanner RTU-UI v2: screens.camera.cameraConfiguration.ignoreBadAspectRatio parameter renamed to ignoreOrientationMistmatch.
Document Scanner RTU-UI v2: changed acceptedSizeScore and acceptedAngleScore range of values from 0..1 to 0..100.
Document Scanner RTU-UI v2: moved parameters related to the detection process (requiredAspectRatios, ignoreOrientationMistmatch, acceptedBrightnessThreshold, acceptedSizeScore, acceptedAngleScore and acceptedAspectRatioScore) from screens.camera.cameraConfiguration to screens.camera.scannerParameters.
Removed Result Repositories mechanism for most RTU UI screens. All results are returned directly from the scanner or RTU UI screens.
Changes old configuration API of PDF Generator. Please use the new configuration mechanisms instead. See more here: PdfConfiguration.
Moved all logic related to PDF with OCR from OCR Engine to PDF Generator. See more here: PdfGenerator.generateWithOcr*()
For all classic components (scanners) all methods like scan[recognize]WithFinderOverlay() are renamed to scan[recognize]InArea().
For all classic components (scanners) all methods like scan[recognize]From[input_type]() are renamed to scan[recognize]From[input_type]().
For Document Data Extractor classic component all recognize methods are renamed to extractFrom[input_type]().
For Document Quality Analyzer all methods analyzeIn*() are renamed to analyzeOn*().
Removed class ImageProcessor.ImageRotation. Please use the new io.scanbot.sdk.core.ImageRotation class.
Removed class io.scanbot.sdk.ui_v2.common.mappers.AspectRatio, please use io.scanbot.common.AspectRatio.
All detected lines in Document Scanner results are represented by new LineSegmentFloat class.
TIFF Writer feature was renamed to TIFF Generator and has an updated generation API. See more here: TiffGenerator.
For TIFF Generator all methods write*() are renamed to generateFrom*().
Removed deprecated License Plate Scanner feature.
Removed deprecated Text Orientation Scanner. Use DocumentQualityAnalyzer instead.
Default MRZ Scanner result handling mode is Reject. Result only gets counted as success if every field is Valid or Confirmed.
VIN Scanner RTU-UI v1: changed TextPatternScannerResult result type to VinScannerResult type.
⚠️ Deprecations:
Marked Document Scanner, Finder Document Scanner, MRZ Scanner and Text Pattern Scanner RTU UI v1 screens as deprecated. Please use the corresponding RTU UI v2 screens.
Added NoFeedbackMode to disable the animation when a page is captured and the document quality check is disabled.
Added a new property hardwareButtonsEnabled that enables snapping from the hardware volume buttons and the new hardware camera control button (enabled by default).
Added option MultipleScanningMode.allowEmptySubmission to allow submission of an empty barcode list in the Multiple Barcodes use case in RTU-UI v2.
🚀 Improvements:
Document detector:
Improved detection speed and robustness against orientation changes.
Improved robustness against picking up random contours.
Improved robustness against documents with colored corners, booklets, handheld documents and cards, documents near edges of tables and overlapping documents.
🐞 Bug fixes:
RTU UI v2.0 Document Scanner:
Fixed a rare crash on the review screen when encryption is enabled.
Fixed a crash on some devices (e.g., Samsung S21, S22) with encryption enabled.
Fixed an issue that could cause a crash in the Document RTU v2 scanner after scanning a very large number of pages in one session.
Fixed KANJI mode for QR codes.
Fixed a bug with incorrect raw bytes returned for some 2D barcode types.
Fixed an issue with AR Overlay and barcode mapping in BarcodeScannerActivity RTU UI v2.0, where the mapped image wasn't shown on the AR Overlay until the same barcode appeared in the list below.
⚠️ Breaking changes:
Changed the type of the rotation field in the Page class to the io.scanbot.sdk.core.ImageProcessor enum.
Implemented new Document API to perform document creation and editing.
Implemented new Ready-To-Use Document Scanner screen with extended scanning and reviewing capabilities.
Added render() methods which take document: Document as an input parameter in PDFRenderer interface.
Added render() methods which take optional outputFile: File as an input parameter in PDFRenderer interface.
Added recognizeTextWithPdfFrom*() methods which take document: Document as an input parameter in OpticalCharacterRecognizer interface.
Added recognizeTextWithPdfFrom*() methods which take optional outputFile: File as an input parameter in OpticalCharacterRecognizer interface.
Added writeTIFF() methods which take document: Document as an input parameter in TIFFWriter.
Added writeTIFF() methods which take optional outputFile: File as an input parameter in TIFFWriter.
Added new property addAdditionalQuietZone to BarcodeScannerAdditionalConfig.
Added a new predefined collection of barcodes, BarcodeFormat.POSTAL, which includes barcodes used in the postal industry.
🚀 Improvements:
Improved MagnifierView.
AR overlay is enabled by default for FindAndPickScanningMode in Barcode Scanner RTU UI v2 screen.
For CODE_128 and ITF, we improved the recognition of barcodes generated by defective thermal printers that do not print certain black bars correctly.
🐞 Bug fixes:
Minor fixes for BarcodeScanner appearance in RTU UI v2 to make it consistent with iOS counterpart.
Fix point sorting in ContourDetector.
⚠️ Breaking changes:
All classes from the old Page API were marked as deprecated and moved to io.scanbot.sdk.persistence.page.legacy package.
Renamed methods to render() in PDFRenderer interface.
Changed render() method signature in PDFRenderer interface. Now it takes an array of Uris instead of the List of Uris.
Renamed writeTIFFFromImages() and writeTIFFFromFiles() methods to writeTIFF() in TIFFWriter.
Renamed writeTIFFFromImages(): ByteArray methods to tiffByteArray(): ByteArray in TIFFWriter.
Document scanner asset dependency io.scanbot:sdk-ml-docdetector was renamed to io.scanbot:sdk-ml-docdetector-assets.
Renamed io.scanbot.sdk.process.model.DocumentQualityResult to io.scanbot.sdk.process.model.DocumentQuality
Renamed io.scanbot.sdk.core.contourdetector.DetectionStatus to io.scanbot.sdk.core.contourdetector.DocumentDetectionStatus
The usage of asset dependency io.scanbot:sdk-mc-assets and also the usage of OCR from io.scanbot:sdk-package-2 now require an additional dependency to be specified: implementation("io.scanbot:sdk-common-ocr-assets:$scanbotSdkVersion").
Added support for German health insurance cards (front and back) and European health insurance cards (back only) to GenericDocumentRecognizer, GenericDocumentRecognizerFrameHandler and GenericDocumentRecognizerActivity RTU UI screen.
HealthInsuranceCardScanner, HealthInsuranceCardScannerFrameHandler, and HealthInsuranceCardScannerActivity were deprecated. Please use GenericDocumentRecognizer, GenericDocumentRecognizerFrameHandler and GenericDocumentRecognizerActivity instead.
Added ResultAccumulationConfig for the generic document recognition API.
Added support for new barcode types Maxicode, rMQR code, Code 11 and Code 32.
Added properties australiaPostCustomerFormat, useIATA2OF5Checksum and useCode11Checksum to BarcodeAdditionalParameters, BarcodeScannerAdditionalConfiguration for RTU UI screen and BarcodeRecognizerConfiguration for RTU UI v2 screen.
Added AustraliaPostCustomerFormat enum to represent formats of the barcode data for the Australian Post customer barcode.
Added resetPolygonState() in BarcodePolygonView to properly clean its state when disabling it after scanning.
🚀 Improvements:
Changed resample flag to resamplingMethod: io.scanbot.pdf.model.ResamplingMethod in PdfConfig class.
The Generic Document Recognizer and its UI components now use the new Scanbot OCR engine under the hood. In order to scan for generic documents the additional OCR language data bundle is no longer required.
Improved generic document recognition on static images.
Improved document detection on booklet documents.
Improved performance of DocumentQualityAnalyzer.
Added support for Extended Channel Interpretation (ECI) for Data Matrix and Aztec.
Improved GS1 string handling with new modes for decoding and validation. See Gs1Handling.
ScanbotCameraXView now logs more information throughout its lifecycle (use filter by ScanbotCameraXView tag). Logging is enabled only in the 'debug' builds.
Improved detection of UPC/EAN barcode extensions in live mode.
The barcode scanner now supports transposed (mirrored/flipped) Aztec barcodes.
🐞 Bug fixes:
Removed redundant dependency on io.scanbot:sdk-licenseplate-assets inside io.scanbot:sdk-generictext-assets.
Fixed R8 obfuscation config for SDK logging classes.
Fixed a bug in ScanbotColor where setting isArgb to true, resulted in a wrong color.
⚠️ Breaking Changes:
Removed ML assets library for Document Quality Analyzer - io.scanbot:sdk-docqualityanalyzer-assets:X.X.X. Please use io.scanbot:sdk-multitasktext-assets:X.X.X instead.
Removed enum BarcodeDensity.
Removed property codeDensity from BarcodeAdditionalParameters.
Removed enum values VALIDATE and DECODE from Gs1Handling and replaced them by DECODE_STRUCTURE, DECODE_FULL, VALIDATE_STRUCTURE and VALIDATE_FULL.
Removed property sharpnessAcceptanceFactor from GenericDocumentRecognizer and GenericDocumentRecognizerConfiguration for RTU UI screen.
Removed redundant fields barcodeImagePath and barcodePreviewFramePath from Result class in Barcode Scanner RTU UI v2.
Changed barcodesRegexFilter config behavior for Barcode Scanner RTU UI v2. Barcodes are accepted if the barcode data contains the part that matches the regex.
Replaced standard and validationStatus fields with validationErrors in the GS1.Element class.
Added new property barcodesRegexFilter to BarcodeRecognizerConfiguration for Barcode Scanner RTU UI v2 screen.
Added support of the new 'Find and Pick' barcode scanning mode, see FindAndPickScanningMode.
Added support for continuous scanning in the BarcodeScannerView composable.
Added new setter setLiveDetectionParameters(parameters: EhicRecognizerParameters) in HealthInsuranceCardScanner to adjust the scanning process.
Added new setter setRecognizerParameters(recognizerParameters: EhicRecognizerParameters) in HealthInsuranceCardScannerConfiguration to adjust the scanning process in EHIC scanner RTU UI screen.
Added support for new barcode format BarcodeFormat.MICRO_PDF_417.
Added support for parsing of AAMVA Certificate of Title for motor vehicle barcodes.
Added property acceptedBrightnessThreshold to ContourDetector to control the accepted brightness level for contour detection (same property added to DocumentScannerConfiguration and FinderDocumentScannerConfiguration in RTU UI and ContourDetectorFrameHandler).
Added new class BarcodeTextLocalization and new property localization to BarcodeScannerConfiguration to support localized strings.
🚀 Improvements:
The Health Insurance Card Recognizer now implements the new Scanbot OCR engine. The recognition is faster and more accurate than before.
🐞 Bug fixes:
Fixed SoundController crash on Android API <= 23.
Fixed VinScannerConfiguration.setFinderTextHintColor(color) not being applied to the text hint.
Fixed null pointer exception for PageFileStorage operations.
Fixed behavior of 'Update' Button in Manual Count Edit Dialog for Barcode Scanner RTU UI v2 screen.
⚠️ Breaking changes:
Replaced the class BarCodeFormattedResult by GenericDocuments class for barcode document parser output.
Added new classes for all the barcode document formats. See the API documentation for more details.
All HealthInsuranceCard prefixes in result model class names were replaced with Ehic (EhicRecognitionResult, EhicDetectionStatus, etc.).
Deleted deprecated isLicenseActive and isLicenseValid from ScanbotSDK. Please use licenseInfo.isValid instead.
Renamed ScanbotPalette to Palette for consistency with RTU UI v2 configuration classes.
BarcodeExtensionsFilter now accepts EAN and UPC barcodes with extensions only and all other formats without extensions.
Made the property type: BarcodeFormat? in io.scanbot.sdk.ui_v2.barcode.configuration.BarcodeItem optional.
Changed the type of numeric parametric filter parameters from Float to Double.
Changed default UI behavior in Barcode Scanner RTU UI v2. If BarcodeMappedData.barcodeImage in BarcodeItemMapper is empty - placeholder image will be shown. If BarcodeMappedData.barcodeImage is set with BarcodeMappedDataExtension.barcodeFormatKey constant - the barcode image will be displayed.
🚙 Under the hood:
Updated 3rd-party libraries:
libjpeg-turbo to 2.1.5.1
libpng to 1.6.40
libtiff to 4.6.0
added zlib library
Extracted parts of ScanbotSDK and ScanbotBarcodeScannerSDK API to the LicensableSdk and BarcodeScanningSdk interfaces.
Migrated project to AGP 8.x.
Added more rules for R8 shrinker to work adequately with AGP >= 8.
Fixed pro-guard rules for DocumentQualityAnalyzer.
Added an R8 consumer rule to keep the internals of io.scanbot.core.processor.ImageProcessor from shrinking/obfuscating.
Added Theme.AppCompat.NoActionBar theme as default for Barcode Scanner RTU UI v2 activity.
Added Consumer Proguard rules for RTU UI v2 modules.
Fixed a bug in the Generic Document Scanner which prevented the extraction of the given names as well as the valid from date from a residence permit card.
Added new freshly designed RTU-UI version 2 for Barcode scanning with advanced agile configuration. Use io.scanbot:rtu-ui-v2-bundle module dependency to access the new screen.
Added new ParametricFilters in ImageProcessor API (ScanbotBinarizationFilter, CustomBinarizationFilter, ColorDocumentFilter, BrightnessFilter, ContrastFilter, GrayscaleFilter, WhiteBlackPointFilter and LegacyFilter).
Added support for German residence permits (2011 and 2019 formats) in GenericDocumentRecognizer.
PdfConfig in the PDFWriter now allows setting the jpegQuality for images encoding. The parameter is only used when transcoding images (adding an image from a bitmap, or resample is true). The parameter is ignored when directly embedding JPEG files.
Added resample parameter in PdfConfig and extended the meaning of the dpi setting.
Added new constructor parameters dpi: Int and pageFit: PageFit in PageConfig class for PDFWriter.
Added setParametricFilter(parametricFilter: ParametricFilter) method in DocumentScannerConfiguration for DocumentScanner RTU UI screen.
Added support of minEstimatedNumberOfSymbolsForNoDocument config parameter in DocumentQualityAnalyzer API.
🚀 Improvements:
Optimized speed of the camera preview frames handling for all scanners.
Optimized memory consumption for PDF rendering with encryption enabled.
Text detection is faster and more accurate.
Improved MRZ parser for a stronger rejection of outliers.
Improved speed and quality of scanning for GenericDocumentRecognizer.
Changed touch to focus square in ScanbotCameraXView to a circle.
🐞 Bug fixes:
For BarcodeFormat.PDF_417, a single case to generate clusters was not covered, which led to a crash.
Fixed potential crash when trying to embed invalid images in a PDF.
Fixed issue with misaligned document polygon and barcode polygons on some devices with horizontal orientation.
Fixed drawing of the detected document contour polygon in landscape orientation.
Fixed NPE in MRZ scanning with optional fields.
⚠️ Breaking changes:
Changes in ImageProcessor API:
ImageProcessor is not a singleton anymore.
Removed scanbotSDK.imageProcessor() getter. Call one of ImageProcessor constructors to create a new instance.
Removed old process*(List<Operation>) methods and Operation classes. They are replaced with applyFilter(), rotate(), crop(), resize() methods in ImageProcessor. Call ImageProcessor#processedBitmap(), ImageProcessor#encodedProcessedImage(), or ImageProcessor#saveProcessedImage(path: String) to get the image result or to write it to a file.
ImageFilterType enum is deprecated. Use ParametricFilter API with new filters. Usage of old filters is still available with LegacyFilter wrapper.
ImageFilterTuneTypes are no longer supported. The class was deleted.
Changes in PageProcessor API:
PageProcessor methods are also migrated to the ParametricFilter API.
Added parametricFilters: List<ParametricFilter> field in Page class. It will be used in page processing by default. If it's empty, old legacy filter in filter: ImageFilterType deprecated field will be used.
Removed tunes and filterOrder fields in Page class.
Deprecated setImageFilterType(imageFilterType: ImageFilterType) method in DocumentScannerConfiguration for the DocumentScanner RTU UI screen.
Removed imageProcessorType(type: ImageProcessor.Type) in ScanbotSDKInitializer.
In TIFFImageWriterParameters constructor replaced binarizationFilter: ImageFilterType? parameter with binarizationFilter: ParametricFilter?.
In TIFFImageWriterParameters.defaultParametersForBinaryImages() parameters changed the default filter to ScanbotBinarizationFilter parametric filter.
Renamed RSS_14 barcode format to DATABAR and RSS_EXPANDED to DATABAR_EXPANDED.
BatchBarcodeScannerActivity class from RTU UI v1 is now marked as 'Deprecated'.
Removed BarcodeFormat.CODE_25 from BarcodeFormat.COMMON_CODES list.
ZoomRange can be created with any input values but will be limited under the hood by internal MIN_ZOOM (x0.2) and MAX_ZOOM (x100) values.
🚙 Under the hood:
Added 3rd-party library "libzueci" to dependencies.
Class SoundController was renamed to SoundControllerImpl and interface SoundController was extracted.