Changelog
[5.4.0] - 2024-11-26
- [Core] Improved the license key initialization by making it more resilient and logging more information in case of failure. In particular, if you pass an invalid license key, the SDK will not even attempt to rely on any cached key but will immediately fail, so that you can quickly fix the issue.
- [iOS] Fix issue with missing symbols for the GSK class.
- [iOS ScanFlow] Fix an issue that could cause
GSKScanFlow
to incorrectly dismiss its presenting view controller when presented from a modal view controller.
- [Android ScanFlow] Improve UI style by using Material 3 guidelines.
[5.3.1] - 2024-11-12
- [iOS] Fix crash caused by an exception:
-[AVCaptureSession stopRunning] stopRunning may not be called between calls to beginConfiguration and commitConfiguration
. The fix consisted in preventing a race condition when cleaning up the camera session stack.
- [Android] Add support for 16kb page size, which will soon be a requirement to publish apps on Google Play. As part of this change, our SDK now depends on LiteRT, the new name of TensorflowLite. If a conflict arises with another dependency of your app that depends on TFLite, adding an exclusion in your Gradle file might be necessary.
- [iOS ScanFlow] Fix
defaultFlashMode
not being used when starting a ScanFlow with a configuration dictionary (ie from crossplatform plugins).
[5.3.0] - 2024-10-04
- [Android] Add support for Android 15 and add edge-to-edge on all Android versions.
- [Android ScanFlow] Improve accessibility.
- [Android ScanFlow] Fix the behavior of the
photoLibraryButtonHidden
flag which was ignored in cross-platform plugins.
- [Android ScanFlow] Remove the portrait orientation constraint on Android tablets: the ScanFlow screens will now rotate accordingly with the device orientation. The UI remains locked to portrait on phones. This aligns to the behavior on iOS.
- [Android ScanFlow] Fix occasional crash when refreshing license key with a poor Internet connection.
- [iOS] Fix
GSKReceiptVAT
symbol not being visible.
[5.2.0] - 2024-09-11
- [Scanflow] Users can now add photos from their Photo Library during a camera-based scan flow. To disable this feature, set the configuration
photoLibraryButtonHidden
to true
.
- [iOS] Include underlying error when the structured data extraction fails because of missing required OCR data.
- [iOS] Fix crash when the license key refresher fetched an expired key.
[Android] Receipt Scanner
Like on iOS, you can now extract structured data from receipts on Android devices. To enable this feature, use the property structuredData
on ScanConfiguration
or use StructuredDataExtractor
in custom integrations. Receipt extraction will extract the date, merchant, amount, category, currency and locale.
[5.1.5] - 2024-08-05
- [Android] Fix
FilterConfiguration
which was not really Serializable, despite implementing the interface.
- [iOS] Restore KVO compatibility for the
GSKCameraSession.captureDevice
property.
- [iOS] Fix an issue that could cause
GSKCameraViewController
to be configured with an incorrect interface orientation.
[5.1.4] - 2024-07-29
- [iOS] Prevent conflicts when a consuming app uses MBProgressHUD also used internally by the SDK. The previous fix was incomplete.
- [iOS] Re-expose publicly some symbols that broke custom integrations with Genius Scan SDK 5.1.0.
[5.1.3] - 2024-07-26
- [iOS] Add Value-added-tax (VAT) detection in receipt detector, with the ability to extract multiple tax rates if present.
- [iOS] Fix regression preventing the camera lens from switching to obtain optimal focus.
- [iOS] Resume continuous autofocus after the user taps to focus and the subject area changes significantly.
[5.1.2] - 2024-07-23
- [iOS] Fix memory leak that would cause the camera session indicator to stay on after scanning.
- [iOS] Prevent conflicts when app uses MBProgressHUD also used internally by the SDK.
- [Android] Remove use of legacy Camera API on Redmi Note 9 Pro devices as the black camera screen issue has been fixed in CameraX library.
- [Android] Prevent conflicts between the version of TensorflowLite used by the SDK and another version that might be used by the app integrating the SDK.
[5.1.1] - 2024-07-11
- [ScanFlow] Improve and shorten filter names.
- [Android ScanFlow] Always take into account the default filter and curvature correction mode from the ScanFlow configuration.
- [iOS ScanFlow] Fix regression in SDK v5.0 where custom colors from ScanFlow configuration were improperly taken into account.
[5.1.0] - 2024-06-19
Improve document detection precision
We’ve replaced our legacy algorithm that used to refine the document detection by a new deep-learning approach. It greatly improves the precision of the document detection, reducing the need to manually fine-tune the quadrangle position by users. The size increase of the SDK due to this change is approximately 600KB.
[Android] Static filters
The Genius Scan SDK offers a new set of fixed filters in addition to the existing filters (Monochrome, B/W, Color, and Photo).
See v5.0.3 changelog for the iOS part.
Core integration
- To automatically process a document, use
Enhancement.automatic()
.
- To process a document while specifying a magic filter, use
Enhancement.automatic(FilterStyle.DOCUMENT, Palette.GRAYSCALE)
.
- To process a document while specifying a static filter, use
Enhancement.withFilterConfiguration(FilterConfiguration.strongMonochrome())
. FilterConfiguration
exposes a series of static filters as static methods.
Scan flow integration
The filters, automatic and fixed, are exposed on the type ScanConfiguration.Filter
.
Retro-compatibility
FilterType
enum class has been deprecated, use FilterConfiguration
instead. Enhancement.withFilter()
methods have also been deprecated in favor of Enhancement.withFilterConfiguration()
.
- In the
ScanProcessor.Result
class, the appliedFilter
has been deprecated in favor of appliedFilterConfiguration
.
Misc
- [ScanFlow] It’s now possible to customize which filters the user will see when they tap on the Edit Filter button with the
availableFilters
parameter in the ScanFlow configuration.
- [Android ScanFlow] It’s now possible to customize whether curvature correction should be applied by default with the
defaultCurvatureCorrection
parameter in the ScanFlow configuration.
- [ios] Remove duplicate resource files to reduce the size of the SDK.
- [Cross-platform/iOS] Fix a regression causing the scan flow to have multipage mode disabled by default. This fix ensures that the default value for the
multiPage
property of the scan flow configuration is true
.
- [ios ScanFlow] Fix an issue where the scan flow would incorrectly finish when the user tapped “Retry” during a single-page camera scanning session.
[5.0.8] - 2024-06-05
- [Android ScanFlow] Restrict the images available in the image picker to the formats supported by the SDK (JPEG and PNG).
- [Cordova, ReactNative, Flutter, .NET] Add structured data extraction support for the
receipt
and businessCard
types in addition to bankDetails
.
[5.0.7] - 2024-06-03
- [Core] Fix an issue with the document detection that sometimes incorrectly returns a subpart of the document instead of the entire document.
- [Android] Fix crash when deserializing the cached license key.
[5.0.6] - 2024-05-24
- [ios] Prevent duplicate symbol runtime errors if the consuming app directly depends on PhoneNumberKit as well.
- [ios ScanFlow] Fix regression where the snap animation wasn’t reset when the document detection lost track of the document.
- [ios ScanFlow] Fix regression that removed the Photo filter from the filters available by default.
[5.0.5] - 2024-04-22
- [ios] Fix potential crash when using a custom logger.
[5.0.4] - 2024-04-18
- [ios] Fix issue where selecting the None filter has no effect in ScanFlow.
- [ios] Receipt scanner: Fix an issue causing the merchant name not to be properly detected.
[5.0.3] - 2024-04-15
Improved automatic filters
With this update, we have improved the logic in these smart filters to enhance processing for certain classes of documents. For example, they will now apply softer enhancements to carbon-copy documents.
[iOS] Static filters
The Genius Scan SDK offers a set of four magic filters: Monochrome, B/W, Color, and Photo.
While we highly recommend using these magic filters, fine-tuned based on our experience processing billions of documents with Genius Scan, we have also introduced fixed filters that allow you to select a specific filter that better suits your needs.
Core integration
- To automatically process a document, call
GSKScanProcessor.processImage(_:configuration:)
with a defaultConfiguration
.
- To process a document while specifying a magic filter, call
GSKScanProcessor.processImage(_:configuration:)
with GSKEnhancementConfiguration.automaticConfiguration(filterStyle: .document, colorPalette: .grayscale)
.
- To process a document while specifying a static filter, call
GSKScanProcessor.processImage(_:configuration:)
with GSKEnhancementConfiguration.automaticConfiguration(filterConfiguration: .strongMonochrome)
. GSKFilterConfiguration
exposes a series of static filters as static variables.
Scan flow integration
The filters, automatic and fixed, are exposed on the type GSKScanFlowFilterType
.
Retro-compatibility
- This change enhances the existing filters (exposed through
GSKFilterType
or GSKScanFlowFilterType
).
- We have deprecated the
GSKFilterType
type (the APIs are still available but marked as deprecated).
- We have deprecated the
GSKScanFlowType
type (the APIs are still available but marked as deprecated).
Misc
- [ios] Add Privacy manifest file. For the record: the SDK doesn’t perform any user tracking, and doesn’t collect any user data.
[5.0.2] - 2024-04-09
- [ios] Fix crash in receipt detection when OCR text contained special characters.
[5.0.1] - 2024-04-04
- [ios] Fix GSKDocumentGenerator method not found in cross-platform plugins.
[5.0.0] - 2024-04-03
Version 5.0 of the SDK aims to simplify the integration of the SDK. It also introduces support for modern OCR engines, improving the speed and accuracy of text recognition.
Single-framework architecture
Instead of using a modular architecture with 3 different pieces, the SDK now comes as a single module. Concretely, this only affects customers doing a custom integration. The benefit is that you just need to use a single module, enabling faster iteration and better internal optimizations.
iOS
Instead of importing the modular frameworks, you now just import GSSDK
:
- import GSSDKCore
- import GSSDKOCR
- import GSSDKScanFlow
+ import GSSDK
Android
Instead of importing several modules, a single module is now needed in your app’s build.gradle
file:
- implementation "com.geniusscansdk:gssdk-ocr:4.21.0"
- implementation "com.geniusscansdk:gssdk-core:4.21.0"
- implementation "com.geniusscansdk:gssdk-scanflow:4.21.0"
+ implementation "com.geniusscansdk:gssdk:5.0.0"
No change is required.
Modern OCR
The Genius Scan SDK can use the platform OCR engines instead of our legacy engine based on Tesseract. This results in higher performance and accuracy, and the processing still happens fully on-device. If the modern OCR engines do not support a language, the SDK will fall back to our legacy engine.
You must now provide a BCP 47 language tag (en-US
) instead of an IOS 639-3 code (eng
) to specify the language(s) of the text recognition. The languages supported by the modern OCR engines on both iOS 17 and Android are: Simplified Chinese (zh-Hans
), Traditional Chinese (zh-Hant
), English (en-US
), French (fr-FR
), German (de-DE
), Italian (it-IT
), Japanese (ja-JP
), Korean (ko-KR
), Brazilian Portuguese (pt-BR
), Spanish (es-ES
), Vietnamese (vi-VT
). An extensive list of all the supported tags is available on the SDK website.
There is no need to pass in the language model files for the legacy OCR anymore. If the SDK needs to fall back on the legacy engine, it will download the language model files on-demand. The SDK doesn’t need to download any language files for the modern engines.
iOS
The API slightly changes:
- let ocrConfiguration = GSKOCRConfiguration()
- ocrConfiguration.languageCodes = ["eng", "fra"]
- ocrConfiguration.trainedDataPath = "…"
+ let ocrConfiguration = GSKOCRConfiguration(languageTags: ["en-US"])
Android
The OCR configuration needs to be adapted:
- OcrConfiguration ocrConfiguration = new OcrConfiguration(Arrays.asList("eng"), trainedDataFolder);
+ OcrConfiguration ocrConfiguration = new OcrConfiguration(Arrays.asList("en-US"));
The API stays the same, but make sure to change the values of the languages
key to BCP 47 language tags: eng
must become en-US
, etc.
Also, remove the languagesDirectoryUrl
from the ocrConfiguration
dictionary as it is not used anymore.
On iOS, you can now extract structured data from receipts, business card and bank details. To enable this feature, use the property structuredData
on GSKScanFlowConfiguration
or use GSKStructuredDataExtractor
in custom integrations. Receipt extraction will extract the date, merchant, amount, category, currency and locale. Business card extraction will extract the contact details from a business card or other type of documents. Bank details recognition will extract IBAN and BIC/SWIFT code.
Improved document detection
The Genius Scan SDK introduces an improved document detection model to more accurately find documents even if they are low-contrast, feature unusual aspect ratios, or are partially hidden by other items in the picture such as pens, keyboards or other documents. It also reduces the SDK size by approximately 5MB.
Modernize Android API
Some APIs were modernized, introducing breaking changes for customers with a custom integration:
- the
PDFPage
constructor now takes a File
instead of a String
path for its first argument
- the
pages
argument of the PDFDocument
constructor has been moved at the first position and all other arguments are optional
- the
DocumentGenerator
methods now throw a DocumentGenerator.Exception
instead of a DocumentGeneratorException
PDFImageProcessor
is now an interface instead of an abstract class, and its process
method uses File
objects rather than String
paths
- the
LoggerSeverity
enum has been renamed into Logger.Severity
, and its values have been renamed: VERBOSELEVEL
into Verbose
,…
- the
OcrProcessor
constructor takes an OcrProcessor.ProgressListener
argument rather than an OCREngineProgressListener
- the
TextLayoutToTextConverter
class now has an empty constructor, and uses the logger set on GeniusScanSDK
- the
TextLayoutToTextConverter.convert
method now returns a TextLayoutToTextConverter.Result
and throws a TextLayoutToTextConverter.Exception
when an error occurs
Misc
- [iOS] The SDK is now built with Xcode 15 and its minimum deployment target has been increased to iOS 13.
- [iOS] Demo projects now integrate the SDK with SwiftPM and not CocoaPods anymore. CocoaPods is still supported.
- [iOS] Implement a new
GSKDocumentFinder
which lets you identify if a document is present in a given image, and if the documents needs post-processing such as perspective correction or filters.
- [iOS] Remove the deprecated GSKPDF type and associated methods in favor of
GSKDocumentGenerator
to generate PDF and TIFF files.
- [All] Remove deprecated methods to initialize the SDK and deprecated
pdfURL
field.
- [.NET] Upgrade plugin and demo app to .NET 8.
[5.0.0-beta9] - 2024-03-19
- [Core] Use new document detection models which both improve detection accuracy and reduce SDK size (by ~5MB).
- [iOS] Remove deprecated
GSK.initWithLicenseKey
method and GSKScanFlowResult.pdfURL
field.
- [Android] Improve exceptions thrown by
OCRProcessor
.
- [Cordova, ReactNative, Flutter] Remove deprecated
setLicenceKey
method. Use setLicenseKey
instead (note the syntax difference with a “s” instead of a “c”).
[5.0.0-beta8] - 2024-03-05
- [ios] The documentation and podfiles for the native, Flutter, and React Native versions of the SDK have been updated to use iOS 13 as their minimum deployment target.
- [ios] Fix potential crash (introduced in v5.0.0-beta5) when deallocing the GSKCameraViewController and its view wasn’t loaded yet.
- [ios] Introduce
GSKStructuredDataExtractor
to expose extracting structured data (receipts, business cards, IBAN) in custom integrations.
- [Android] Remove deprecated
GeniusScanSDK.init()
method and ScanResult.pdfFile
field.
- [.NET] Upgrade plugin and demo app to .NET 8.
[5.0.0-beta7] - 2024-02-20
- [ios] Implement a new
GSKDocumentFinder
which lets you identify if a document is present in a given image, and if the documents needs post-processing such as perspective correction or filters.
[5.0.0-beta6] - 2024-02-15
- [Android] Only expose OCR languages available on Android.
[5.0.0-beta5] - 2024-02-14
- [ios] Fix occasional crash due to a race condition when deallocating the GSKCameraViewController.
- [Android] Add ability to preload OCR models. This is useful to ensure models are present when text recognition is processed.
[4.21.1] - 2024-02-13
- [Android] Fix an issue where the camera preview is black on Redmi Note 9 Pro devices.
[5.0.0-beta4] - 2024-02-09
- [ios] Prevent potential app hang when deallocating the GSKCameraViewController.
- [ios] Add missing header file from GSSDK.h umbrella header.
- [ios] Restore previous
GSKScanFlow.startFromViewController
Objective-C API.
- [ios] The new
async/await
-based GSKScanFlow.resultByStarting
API is now only available when using Swift.
[5.0.0-beta3] - 2024-02-09
Features
On iOS, you can now perform receipt and business card extraction with GSKScanFlow
. To enable this feature, use the property structuredData
on GSKScanFlowConfiguration
. Receipt extraction will extract the date, merchant, amount, category, currency and locale. Business card extraction will extract the contact details from a business card or other type of documents.
Misc
- [ios] Make
GSKPDFGeneratorError
public again.
[5.0.0-beta2] - 2024-02-07
Modernize Android Custom API
Some APIs were modernized, introducing breaking changes for customers with a custom integration:
- the
PDFPage
constructor now takes a File
instead of a String
path for its first argument
- the
pages
argument of the PDFDocument
constructor has been moved at the first position and all other arguments are optional
- the
DocumentGenerator
methods now throw a DocumentGenerator.Exception
instead of a DocumentGeneratorException
PDFImageProcessor
is now an interface instead of an abstract class, and its process
method uses File
objects rather than String
paths
- the
LoggerSeverity
enum has been renamed into Logger.Severity
, and its values have been renamed: VERBOSELEVEL
into Verbose
,…
- the
OcrProcessor
constructor takes an OcrProcessor.ProgressListener
argument rather than an OCREngineProgressListener
- the
TextLayoutToTextConverter
class now has an empty constructor, and uses the logger set on GeniusScanSDK
- the
TextLayoutToTextConverter.convert
method now returns a TextLayoutToTextConverter.Result
and throws a TextLayoutToTextConverter.Exception
when an error occurs
Misc
- [Android] Fix incorrect OCR progress.
- [Android] Expose supported OCR languages.
[5.0.0-beta1] - 2024-01-19
Version 5.0 of the SDK aims to simplify the integration of the SDK. It also introduces support for modern OCR engines, improving the speed and accuracy of text recognition.
Single-framework architecture
Instead of using a modular architecture with 3 different pieces, the SDK now comes as a single module. Concretely, this only affects customers doing a custom integration. The benefit is that you just need to import a single framework, enabling faster iteration and better internal optimizations.
iOS
Instead of importing the modular frameworks, you now just import GSSDK
:
- import GSSDKCore
- import GSSDKOCR
- import GSSDKScanFlow
+ import GSSDK
Android
Instead of importing several modules, a single module is now needed in your app’s build.gradle
file:
- implementation "com.geniusscansdk:gssdk-ocr:4.21.0"
- implementation "com.geniusscansdk:gssdk-core:4.21.0"
- implementation "com.geniusscansdk:gssdk-scanflow:4.21.0"
+ implementation "com.geniusscansdk:gssdk:5.0.0-beta1"
No change is required.
Modern OCR
The Genius Scan SDK can use the platform OCR engines instead of our legacy engine based on Tesseract. This results in higher performance and accuracy, and the processing still happens fully on-device. If the modern OCR engines do not support a language, the SDK will fall back to our legacy engine.
You must now provide a BCP 47 language tag (en-US
) instead of an IOS 639-3 code (eng
) to specify the language(s) of the text recognition. The languages supported by the modern OCR engines on both iOS 17 and Android are: Simplified Chinese (zh-Hans
), Traditional Chinese (zh-Hant
), English (en-US
), French (fr-FR
), German (de-DE
), Italian (it-IT
), Japanese (ja-JP
), Korean (ko-KR
), Brazilian Portuguese (pt-BR
), Spanish (es-ES
), Vietnamese (vi-VT
). An extensive list of all the supported tags will be available on the SDK website.
There is no need to pass in the language model files for the legacy OCR anymore. If the SDK needs to fall back on the legacy engine, it will download the language model files on-demand. The SDK doesn’t need to download any language files for the modern engines.
iOS
The API slightly changes:
- let ocrConfiguration = GSKOCRConfiguration()
- ocrConfiguration.languageCodes = ["eng", "fra"]
- ocrConfiguration.trainedDataPath = "…"
+ let ocrConfiguration = GSKOCRConfiguration(languageTags: ["en-US"])
Android
The OCR configuration needs to be adapted:
- OcrConfiguration ocrConfiguration = new OcrConfiguration(Arrays.asList("eng"), trainedDataFolder);
+ OcrConfiguration ocrConfiguration = new OcrConfiguration(Arrays.asList("en-US"));
The API stays the same, but make sure to change the values of the languages
key to BCP 47 language tags: eng
must become en-US
, etc.
Also, remove the languagesDirectoryUrl
from the ocrConfiguration
dictionary as it is not used anymore.
Misc
iOS
- The iOS SDK is now built with Xcode 15.
- Demo projects now integrate the SDK with SwiftPM and not CocoaPods anymore. CocoaPods is still supported.
[4.21.0] - 2023-12-20
- [Android] Upgrade to CameraX 1.3.1 to fix a performance issue in camera initialization.
[4.20.1] - 2023-12-12
- [iOS, ScanFlow] Add missing exported symbol for
GSKScanFlowButton
.
[4.20.0] - 2023-12-11
- [Cordova, ReactNative, Flutter, .Net] Add auto-refreshing of license key (see v4.17.0 for more details). The new method used to set the license key is called
setLicenseKey
and has an autoRefresh
boolean flag. The old method, called setLicenceKey
is now deprecated. See the documentation for each framework for more details.
- [iOS, ScanFlow] Correctly report a cancellation error if the user dismissed the system photo picker by swiping down.
ScanFlow: Add SwiftUI API for starting a scan flow
ScanFlow now offers a dedicated SwiftUI-based button, GSKScanFlowButton
, which acts as a convenience API for starting a scan flow from within a SwiftUI view.
ScanFlow: Bank Details Scanning
ScanFlow now supports scanning bank details (such as IBAN and BIC/SWIFT codes). The feature is launching on iOS but you can already use it in the cross-platform plugins; support for Android will come soon.
To enable this feature, set the flag structuredData
to .bankDetails
on GSKScanFlowConfiguration
.
[4.19.0] - 2023-11-27
- [Android] Add auto-refreshing of license key (see v4.17.0 for more details).
- [Android] Accelerate the camera startup. The upgrade to CameraX 1.3 introduced a bug where the camera could take a few seconds to initialize. Several improvements were made internally to mitigate this problem until a fix is available in the CameraX library.
- [Android] Fix a bug in ScanFragmentLegacy where setting the JPEG quality before the camera was initialized would not be taken into account.
[4.18.0] - 2023-11-15
- [iOS] Fix build issues with JS plugins due to incorrect iOS headers.
[4.17.0] - 2023-11-14
New
- [iOS] iOS 13.0 is now required.
- [iOS] Auto-refreshing license keys (see below).
- [Android] Add ability to disable PDF/A format by passing a
PDFAConfiguration
to the DocumentGenerator
. It was already possible to do so on iOS by passing a null iccProfilePath
to the GSKPDFGeneratorConfiguration
.
Fixed
- [iOS] Fix issue where some public Swift symbols were not properly exported.
[iOS] Auto-refreshing License Keys
The Genius Scan SDK no longer requires a new license key to be obtained and updated in your app’s source code annually. While it is still advisable to update the license key each year, you now have the option to enable automatic license key renewal. This provides greater flexibility and ensures that users who do not immediately update your app will continue to have access to the Genius Scan SDK features.
If you use the new APIs, this feature is enabled by default but can be disabled.
API Changes
- Introduction of a new API
setLicenseKey(_:, autoRefresh: Bool)
that allows you to set an initial license key. This initial license key will be utilized for automatic renewal of the license key from our servers. Upon your app’s launch, it will ping our licensing server to update the license key, if necessary, with our servers receiving the license key, a random device identifier, and your app’s version. This is the only network connection the SDK will perform.
- If you want to prevent the license key refresh (for privacy reasons), set the
autoRefresh
flag to false
. This will provide the same behavior as the deprecated initWithLicenseKey(_:)
API call and the SDK will make no connection to our licensing server.
- The former API
initWithLicenseKey(_:) throws
has been deprecated.
Best Practices for User Experience
- It is recommended to update the license key annually to ensure a seamless offline experience for your app users.
- We advise initializing the SDK as early as possible after app launch so that a fresh key is received as early as possible.
[4.16.0] - 2023-11-07
- [iOS] Properly specify the dSYM path of the different XCFrameworks in the Info.plist, so that the consuming app can properly archive them and upload them to the store and/or crash reporting systems.
[4.15.0] - 2023-11-02
- [Android] Upgrade AndroidX Camera component to v1.3. This mainly fixes a camera resolution issue on some Samsung devices. We used to workaround this issue by using the legacy Camera API for these devices. We’ve now removed this workaround and the CameraX API is now used for these devices.
- [Flutter, ReactNative, Cordova, .NET] A new source for the ScanFlow is now officially supported and documented:
library
. It allows to start the ScanFlow with an image picker, and the image picked by the user will be used as the source of the ScanFlow.
[4.14.0] - 2023-10-17
- [ScanFlow] Add support for Polish and Hungarian languages.
- [ScanFlow Android] Change error code and message when the scan flow is canceled by the user to align with the ones on iOS: “E_SCAN_CANCELED” and “Scanning canceled by user”.
- [ScanFlow] Add ability to configure the format of the text recognition result (
outputFormats
in the ocrConfiguration
). It can be a combination of raw text, hOCR text layout and an invisible layer in the generated PDF documents. Prior to this change, the OCR result was available in all these formats without the ability to skip some of them.
- [ScanFlow iOS] Breaking changes: the
GSKUIOCRConfiguration
class was renamed into GSKScanFlowOCRConfiguration
, the OCR result returned for each scan is now a GSKScanFlowOCRResult
instead of GSKOCRResult
and some internal properties of the result scans were removed (appliedQuadrangle
, appliedFilter
, appliedRotation
).
[4.13.0] - 2023-09-01
- [Core iOS] Fix issue preventing PDF/A-1 files from being properly generated because the ICC profile wasn’t properly loaded from the framework.
- [Core Android] Fix resolution issue on some Samsung Galaxy devices (A41, Tab S8 Ultra). The Camera legacy API is used until this issue is solved in CameraX library.
- [ScanFlow Android] Fix crash when
multiPageFormat
is set to none
in crossplatform plugins.
- [.NET] Revert Android package name to GeniusScanSDK.Scanflow. It was inadvertently modified when migrating from Xamarin to .NET.
[4.12.0] - 2023-06-01
- [ScanFlow iOS] Fix bug where images are not deleted when the user taps the Retry button.
- [ScanFlow iOS] Fix bug where custom PDF font file was ignored in the ScanFlow configuration.
- [ScanFlow iOS] Fix issue where OCR progress wasn’t displayed when the
multipage
flag was set to false
.
- [Core iOS] Make GSKPDFGeneratorError public again, it was incorrectly made private in 4.11.0.
- [Core iOS] Expose a GSKPDFGeneratorConfiguration initializer that will use a default ICC profile to create a PDF/A-1.
- [.NET] This version drops support for Xamarin and adds support for .NET MAUI for both Android and iOS. The NuGet packages keep the same name:
GeniusScanSDK.ScanFlow.Android
and GeniusScanSDK.ScanFlow.iOS
.
[4.11.0] - 2023-05-24
- [Core] Fix performance regression for the PNG output. The regression was due to the compression factor being switched from 1 to 9. While this improved the compression by about 10%, this caused the compression to be several orders of magnitude slower.
- [ScanFlow] Generated PDF files are now using the PDF/A-1 format (PDF 1.4), particularly suitable for long-term archiving.
- [iOS] SDK is now built with Xcode 14.3.
- [iOS] Catch C++ exceptions raised during document detection and raise them as errors to the GSKCameraSession.
- [iOS] Prevent a rare crash when the camera session is deallocated.
- [Android] Fix incorrect behavior when the app is in the background during OCR.
[4.10.1] - 2023-04-20
- [Android] Fix crash when custom font file is not provided for PDF generation.
[4.10.0] - 2023-04-13
- [Xamarin Android] Strip Android native debugging symbols from the Xamarin.Android plugin. This reduces considerably the size of the APK when using the plugin.
- [ScanFlow] Add ability to specify a custom font to the PDF generator. The default font supports a limited set of scripts and a custom font needs to be specified when generating a PDF file with a text layer with non-Latin characters.
[4.9.0] - 2023-03-14
- [ScanFlow] Android: Add ability to start the ScanFlow with a photo picker (with source
gallery
). This was already available on iOS.
- [ScanFlow] Expose OCR text layout (in addition to raw text) in the result of the ScanFlow so that it can be used in the PDF generation.
[4.8.0] - 2023-01-24
- [Android] Refactor image format management with two breaking changes:
- The
ScanProcessor.process
method now takes an OutputConfiguration
with a destination folder as input instead of an output file.
- The
GeniusScanSDK.scaleImage
method doesn’t accept a filter type as a parameter. Instead, it will automatically infer the type of interpolation needed from the image.
- [Core] iOS: Catch some memory exceptions to return them as errors instead of crashing.
- [Core] iOS: Catch some internal exceptions if some conditions attempts to create an image with negative dimensions and return an error instead of crashing.
- [ScanFlow] iOS: Add distortion correction feature to the scan flow. This toggle button lets the user correct the curvature of documents (curved book pages or folded documents).
- [ScanFlow] iOS: Display activity indicator during PDF generation.
- [ScanFlow] iOS: Fix bug where document detection could still be active when performing text recognition and PDF generation on a document with many pages.
- [ScanFlow] Android: Fix crash when discarding a scan flow with an existing image as input.
[4.7.4] - 2022-12-09
- [ScanFlow] Android: Stop automatic document detection when dialog is displayed on top of camera screen
- [Core] Change interpolation mode in curvature correction to avoid aliasing artifacts
- [Xamarin] Add OCR configuration to demo apps
[4.7.3] - 2022-11-17
- [Xamarin] Fix Android runtime error because of missing CameraX classes.
- [Xamarin] Fix Android binding again to expose ScanFragment implementations.
- [ReactNative] Android: Adapt plugin and demo for ReactNative v0.70.
[4.7.2] - 2022-11-11
- [ReactNative] Adapt plugin and demo for ReactNative v0.70
[4.7.1] - 2022-11-09
- [Xamarin] Fix incorrect Java.Interop version used in Android plugin
[4.7.0] - 2022-11-07
- [Xamarin] Fix an issue with Android binding that prevented some classes (eg ScanFragment) from being exposed.
- [Xamarin] Fix iOS binding.
- [Xamarin] Add code sample in demo apps to show how to use document generation.
- [iOS] Fix close-up camera focus issue on some devices with multiple lenses such as iPhone 14 Pro.
- [Android] Increase the compression level for PNG files produced when using the Monochrome filter to align with the value on iOS.
- [Android] Fix a camera resolution issue on Samsung A32 and A32 5G devices. The Camera legacy API is used until this issue is solved in CameraX library.
[4.6.0] - 2022-10-04
- [Flutter, ReactNative, Cordova, Xamarin] Add a PDF generation method to crossplatform plugins to allow generating a PDF document from a collection of images outside of the Scan Flow. Refer to the documentation of each plugin or to the demo apps for more details on how to use this method.
- [iOS] Build SDK with Xcode 14.0.
- [iOS] Remove BCSymbolMaps from the SDK’s XCFrameworks since Bitcode isn’t supported by Xcode 14 anymore.
- [Android ScanFlow] Use CameraX instead of the legacy Camera API on most devices. The legacy Camera API will still be used on a very limited list of device models that don’t support some features.
- [Android ScanFlow] Fix missing message on OCR progress dialog.
- [Android ScanFlow] Support dark theme for dialog.
- [Android ScanFlow] Keep the user-selected flash mode on all scans in the same scanning session.
[4.5.3] - 2022-08-26
- [Android] Update CameraX to v1.1.0: this should solve a crash when no camera can be found on some devices.
[4.5.2] - 2022-06-23
- [Core] Prevent auto-rotation from rotating documents by 180 degrees.
- [Core] iOS: Take in account sensor orientation for auto-orientation to improve results.
[4.5.1] - 2022-06-10
- [ScanFlow] iOS: Fix behavior of post processing actions where the Recrop button was hidden when it shouldn’t be.
- [Core] Android: Fix method not available when using CameraX 1.1.0
- [iOS] Fix deprecation documentation.
[4.5.0] - 2022-04-19
Added
- [Core] Auto-rotation: Genius Scan now automatically detects the orientation of your document to make sure users scan documents in the proper orientation.
- [ScanFlow] Allow zooming in image on validation screen
- [Core ScanFlow] Add TIFF support as multi-page document format in addition to PDF. When using the ScanFlow module, use the
multiPageFormat
to specify the output format and the multiPageDocument
field in the ScanFlow result to retrieve the document in the right format.
- [Core ScanFlow] iOS: the recrop view now prevents the creation of a concave selection.
- [Core] iOS: Allow changing the magnifier crosshair to show the zoomed quadrangle vertex (see
GSKMagnifierView
)
- [Core] iOS: Allow customization of the shade color of the area outside and inside the quadrangle (see
GSKEditableFrame
)
Changed
- [Core ScanFlow] iOS: Added small corners to denote that quadrangle vertices are draggable.
- [Core ScanFlow] iOS: Make outside of quadrangle shaded in transparent black, as opposed to shading the inside of the quadrangle.
- [Core] Android: Improve capture callback to allow the caller to handle the capture result. The method
takePicture
now takes as input an ImageCaptureCallback
instead of a File
. The previous behavior can be kept by using a FileImageCaptureCallback
.
Fixed
- [Core] Improve B&W and Color filters for document with dark background.
- [Core] Return a negative clean image for the Monochrome filter when the background is dark to improve OCR results.
- [Core ScanFlow] iOS: Ensured magnifier crosshair is visible on both light and dark backgrounds.
[4.4.7] - 2022-03-25
- [Android] Fix behavior of
setPreviewAspectFill
option when using CameraX.
- [Android] Stop the preview before (rather than after) calling the
onPictureTaken
callback when using CameraX.
[4.4.6] - 2022-03-15
- [Android] Fix document detection not working when using CameraX on some devices.
[4.4.5] - 2022-03-01
- [Android] Fix rare crash when using CameraX and SurfaceView is not properly laid out.
[4.4.4] - 2022-02-16
- [iOS, ScanFlow] Fix memory leak when using OCR in ScanFlow. This could cause the scan flow to crash especially for JS plugins.
[4.4.3] - 2022-01-16
- [Android] Fix crash in ScanFlow when the Recrop action was used before the page was processed.
- [Android] Fix crash in ScanFlow when using
ScanfragmentX
without FocusIndicator
- [Android] Fix bug where the overlay color of the ScanFragment could not be set to white.
[4.4.2] - 2021-12-14
- [Android] Fix optimization level for native code which resulted in slower code and a bigger library size.
[4.4.1] - 2021-12-08
- [Android] Fix crash when using CameraX.
- [Flutter, ReactNative, Cordova] Remove Android binaries from plugins. The plugins now depend on Genius Scan Android SDK via Maven.
[4.4.0] - 2021-12-07
- [iOS] Add support for simulator on Apple Silicon
- [Android] The minimum version required is increased from Android 4.4 (API level 19) to Android 5.0 (API level 21). This covers more than 98% of Android devices.
- [Android] Fix crash when flash mode is switched before camera is initialized.
- [Xamarin] Improve iOS plugin: shortened paths, unique target name, better temporary file management.
[4.3.0] - 2021-11-23
- [Android] Core: Add a new camera screen with CameraX API. The goal of this change is to prepare the replacement of the Camera API which is deprecated. The
ScanFragment
class has been converted to an interface, the ScanFragmentLegacy
is an implementation of this interface using the legacy Camera API and ScanFragmentX
is a new implementation using CameraX API. The ScanFragmentLegacy
implementation will still be used by default for now but it’s possible to try the ScanFragmentX
implementation when using the Core module of the SDK.
- [Android] Core: Fix a bug where the camera preview would not be centered on screen when setting
setPreviewAspectFill
to true on the ScanFragment
.
- [iOS] ScanFlow: Fix innocuous Auto-Layout warnings.
- [Xamarin] Add support for iOS simulators (x86_64 only for now).
[4.2.2] - 2021-11-12
- [Flutter] Fix missing iOS frameworks in plugin.
- [Flutter] Remove Android native symbols to limit plugin size to 100MB.
- [ScanFlow] Android: Disable Next button until scan is proccessed to avoid errors in PDF generation.
[4.2.1] - 2021-11-09
- [iOS] Fix issue resulting in invalid archive when archiving an app linked with the Genius Scan SDK installed through CocoaPods.
[4.2.0] - 2021-11-08
- [ScanFlow] Add ability to perform Text Recognition (OCR) in ScanFlow. To enable it, add an
ocrConfiguration
to your ScanFlow configuration and add the required Tesseract language files to your application. This change increases the footprint of the ScanFlow module by approximately 15%.
- [OCR] Android: Fix the
OcrProcessor
to avoid loading language models for each page that is processed.
- [Flutter] Support the new Android plugins APIs.
[4.1.4] - 2021-10-26
- [iOS] Fix potential crash when app moves to the background and image stream still being processed. This wasn’t affecting users but could be potentially seem in your app’s crash reports.
[4.1.3] - 2021-09-28
- [Android] Fix bug where the JPEG quality setting was ignored in image processing operations.
[4.1.2] - 2021-09-13
- [Xamarin] Change plugin dependencies to proper AndroidX libraries.
- [ScanFlow] iOS: Fix bug where discarding a page would also discard the previous one.
[4.1.1] - 2021-09-10
- Fix 4.1 publication issue.
- [ScanFlow] Add missing translations.
[4.1.0] - 2021-09-09
- [Android] Migrate to AndroidX and Java 8 language level.
[4.0.12] - 2021-08-26
- [ScanFlow] Properly handle case where camera permission was previously denied by user.
- [ScanFlow] Tweak localizations in French and Spanish.
- [Android] Fix minor memory leak involving the singleton class
BorderDetectionThreadManager
.
[4.0.11] - 2021-08-18
- [ReactNative] Remove iOS debug symbols from ReactNative plugin to avoid a Cocoapods bug which results in corrupt archives.
[4.0.10] - 2021-07-02
- [iOS] Properly apply curvature correction on images rotated by 90° or 270°.
[4.0.9] - 2021-06-24
- [iOS] Include dSYMs and BCSymbolMaps as part of the SDK’s XCFrameworks.
[4.0.8] - 2021-05-07
- [Android] ScanFlow: Prevent crash when changing filter before processing is finished.
- [Core] Improve perspective correction interpolation to avoid aliasing issues.
- [Flutter] Migrate Flutter plugin to null safety. The minimum required Dart version is now 2.12.
[4.0.7] - 2021-03-31
- [Android] ScanFlow: Prevent multiple clicks on rotation button to avoid image corruption.
[4.0.6] - 2021-03-29
- [Xamarin] Add Xamarin plugins wrapping the ScanFlow module on nuget. Xamarin.Forms demo apps are available on our demo repository.
- [OCR] Improve hOCR to text conversion.
[4.0.5] - 2021-03-16
- [OCR] Return a proper exception in java instead of crashing if OCR engine cannot be initialized.
[4.0.4] - 2021-03-12
- [Android] Core: Fix the
scaleImage(float aspectRatio)
method that was not correctly processing images with an exif orientation.
- [Core] Tune the B&W and Color filters to better process white text over dark background.
[4.0.3] - 2021-03-05
- [iOS] Core: Fix a regression where Red and Blue channels were systematically swapped.
- [OCR] Fix a crash when OCR engine cannot find text.
[4.0.2] - 2021-03-04
- [OCR] Return an error instead of crashing if OCR engine cannot be initialized because of a corrupt language file.
- [Android] Fix crash when taking photo on devices without flash. Add method to list available flash modes to be able to properly initialize the flash button:
ScanFragment.getAvailableFlashModes()
.
- [Android] Fix resource leak in document detector.
- [iOS] Swift Package support. Point to https://github.com/thegrizzlylabs/geniusscan-sdk-spm to get the Swift Package.
- [iOS] Core: Fix issue where Red and Blue channels could be swapped when resizing images.
- [iOS] ScanFlow: When editing the crop area, properly show the current area.
- [iOS] ScanFlow: Return GSKScanFlowUserCancelationError when user cancels scanning from source, library.
- [iOS] ScanFlow: Hide flash button on devices without a flash.
- [iOS, Android] ScanFlow: Improve Russian, Japanese localizations.
- [Flutter, ReactNative] Remove UIViewControllerBasedStatusBarAppearance=NO from Info.plist. Note: The Genius Scan SDK only supports the modern, view controller-based, status bar appearance. In particular, the camera screen is designed to work the status bar hidden.
- [Flutter, ReactNative, Cordova] Better forwarding of iOS error codes.
[4.0.1] - 2021-01-27
- [iOS] Fix crash when taking photo on devices without flash.
- [iOS] iOS demo apps are now available on our Github repository.
[4.0.0] - 2021-01-11
Genius Scan SDK 4.0 is an entire rewrite from scratch of the Genius Scan SDK, using entirely new technologies and algorithms. Genius Scan 4.0 introduces breaking changes to the API.
Document Detection
The document detection has been entirely rewritten using deep learning. The document detection is more accurate and more robust to low-contrast, low-light or unusual settings.
API Change
On Android, instead of using GeniusScanLibrary.detectFrame(path)
, use the DocumentDetector
class. On iOS, use the GSKDocumentDetector
class.
Document Enhancement
New Algorithms
We used novel algorithms to improve the image filters to achieve enhanced quality and readability for your scanned documents. You can expect better removal of shadows, white-balancing, and treatment of the colors in text documents.
In automatic mode, the document enhancement pipeline can now automatically select one of the four filters: no filter if the image doesn’t contain any document, black and white if the image is a text document with little color, color for text documents with some colors, or photo when the document mainly contains visuals but not so much text.
Edge Cleaning
Edge cleaning is a powerful enhancement that cleans up the edges of the documents. Often, after you crop a scan, some artifacts are left on the edges. The edge cleaning cleans them up. This step results in a cleaner document and helps with the accuracy of the OCR step. Edge cleaning only applies to the monochrome, black and white, and color filters.
API Change
The document enhancement pipeline is available through a single processor
object set up with configuration objects. Use the ScanProcessor
on Android or the GSKScanProcessor
on iOS instead of the static methods on GeniusScanLibrary
and GSK
. When creating a processor
, use the associated configuration object to tune the processing to your liking.
ScanFlow
We’ve renamed the ScannerUI framework into ScanFlow.
We’ve simplified the ScanFlow module to two main screens: a Camera screen and a Scan Review screen, from which one can change the filter and edit the cropping area of the current page.
The batch scanning mode is now streamlined: after validating a page on the post-processing screen, instead of being prompted to add a new page, the user is brought back to the camera screen. Hitting the Done button validates the scanned pages and terminates the flow. Hitting the Cancel button cancels the entire scan flow after a confirmation.
API Change
On Android, the class containing all the static methods to manage the scan flow has been renamed from GeniusScanSdkUI
to ScanFlow
.
PDF Generation
We’ve made several changes to optimize the size of PDF files created with the SDK. When using the Monochrome
filter, you have the ability to save the output as monochrome 1-bit PNG images. Resulting PDF files using these PNG images are up to 10 times smaller.
Integration
iOS
The SDK is now packaged as XCFrameworks. We’ve removed support for Carthage.
Android
All package names and Maven articfact groups have changed from com.thegrizzlylabs.geniusscan.sdk
to com.geniusscansdk
to match our website URL.
Modules have also been renamed as follows:
gs-sdk-core
into gssdk-core
gs-sdk-ui
into gssdk-scanflow
gs-sdk-ocr
into gs-sdk-ocr
Other Changes
- Improve API documentation. Up-to-date API documentation is now provided directly on the geniusscansdk.com website.
- Rewrite iOS demo apps in Swift.
- Large API simplifications.
- Remove the Android interface
ScanContainer
which was used to hold the result of a capture and replace it with a File
object.
- Improve performance of algorithms.
[4.0.0-beta15] - 2021-01-07
- [iOS] Fix issue where grayscale images were not processed properly with OCR.
- [iOS] Fix issue where 16-bit images were not properly imported and resulted in garbled scans.
- [ScanFlow] Add missing translations
[4.0.0-beta14] - 2021-01-04
- [Android] Fix a plural string in the ScanFlow module.
- [Android] Prefix all string resources with “gssdk_” to avoid conflicts with other libraries resources.
- [Android] Remove a useless empty constructor in
OcrConfiguration
.
- [iOS] Mark quadrangle in
GSKDocumentDetectionResult
as non-null.
- [iOS] ScanFlow: Fix bug preventing flash button from having any effect.
[4.0.0-beta13] - 2020-12-17
- [iOS] Properly handle ARGB, ABGR -> RGB conversions.
- [iOS] Renamed
GSKDocumentProcessor
into GSKScanProcessor
.
- [Android] The public API for document detection is now
DocumentDetector
instead of CnnDocumentDetection
.
[4.0.0-beta12] - 2020-12-08
- [Core] Add a new document detection configuration, which improves the precision of the document detection.
- [iOS] API change:
GSKDocumentProcessor
now takes a single configuration object.
ScanFlow
- [iOS] Add cancel button when changing filter.
- [iOS] Fix regression allowing ScanFlow to run in landscape mode.
- [iOS] Layout fixes.
- [iOS] Fix status bar text color in Dark Mode.
- [iOS] Fix toolbar tint color that wasn’t taking in account the
foregroundColor
.
- [Android] Fix navigation bar color on devices with an old Android version.
[3.0.27] - 2020-12-03
- [React Native] Android: Remove tag from plugin manifest resulting in a warning while building your project.
[4.0.0-beta11] - 2020-11-26
- [iOS] Fix localization of “Detect” text in ScanFlow module.
- [iOS] Remove the beta modifier in Framework’s SDK version as this doesn’t respect the semantic versioning required by
CFBundleShortVersionString
. Instead of v4.0.0-beta11
, the framework’s version will be 4.0.0
even for beta versions.
- [Android] Simplify the API of the ScanFlow result: you don’t need to use
ImageStore
to get the file path of the images.
[4.0.0-beta10] - 2020-11-24
- [Flutter] Fix missing iOS frameworks.
[4.0.0-beta9] - 2020-11-23
- [iOS] Further simplify the
GSKCameraSession
API: you don’t have to call setup
on it anymore, the GSKCameraViewController
will call it at the appropriate time.
- [iOS] Add SDK version as part of the Framework Info.plist.
- [iOS] Rewrite Custom Demo in Swift.
- [core] Improve stability of image detection.
[4.0.0-beta8] - 2020-11-13
- [Android] Rename
ImageType
into FilterType
.
- [iOS] Simplify API of the
GSKCameraSession
. The session doesn’t require a GSKScanProtocol
/GSKScanFactory
, and will simply return a GSKScan
object with the new scan. See GSKCustomDemo for an updated implementation reference.
- [iOS] Prevent crash if a concave quadrangle is passed to the
GSKDocumentProcessor
. Instead, an error will be returned by the processor.
- [iOS] ScanFlow: Add padding around user guidance labels.
[4.0.0-beta7] - 2020-11-06
- [Android] Fix ScanProcessor behavior when no perspective correction should be done.
- [Android] Fix rotation of empty quadrangle.
- [Cordova] iOS: Fix plugin that included incorrect headers.
Improved ScanFlow UI
We’ve simplified the ScanFlow module to 2 main screens: a Camera screen, and a Post-processing screen, from which one can change the filter and edit the cropping area of the current page.
Also, the batch scanning mode has been changed: after validating a page on the post-processing screen, the user is brought back to the Camera screen. Hitting the Done button validates the scanned pages and terminates the flow. Hitting the Cancel button cancels the entire scan flow after a confirmation.
[4.0.0-beta6] - 2020-10-26
- [iOS/Android] Smoother real-time display of the detected document.
- [React Native] Android: Remove tag from plugin manifest resulting in a warning while building your project.
[4.0.0-beta5] - 2020-10-23
- [iOS, Android] Improve the document processor API to avoid confusing parameter combinations.
Edge Cleaning
Edge cleaning is a powerful enhancement that cleans up the edges of the documents. Often, after you crop a document, some artifacts are left on the edges of the document. The edge cleaning cleans them up. This results in a cleaner document and helps with the accuracy of the OCR step.
[3.0.26] - 2020-10-19
- [Core] Accelerate perspective correction
- [Android] Fix a crash happening on Android 11 when performing perspective correction
[4.0.0-beta4] - 2020-10-14
- [Android] Add ability to set an additional camera frame processing. A
onPreviewFrame
method has been added to the CameraManager.Callback
.
[4.0.0-beta3] - 2020-10-07
Best filter detection
The Best filter detection algorithm, which takes an image as input and returns the best filter to apply to this image, has been completely changed. It used to return only two outputs: Black & White
or Photo
.
It now has 4 outputs:
None
when the image does not contain a document
Black & White
for text documents with very little color
Color
for text documents with some color
Photo
when the document contains mainly graphic parts and little text
Other changes
- [Android] Revert incorrect renaming of the UI package in the Core module
- [Core] The document detection now returns an empty quadrangle when no document has been detected on the image. A full quadrangle is returned when the detected document fills the entire image (e.g. no crop is needed).
[4.0.0-beta2] - 2020-10-05
- Fix documentation and demo apps
[4.0.0-beta1] - 2020-10-02
Document detection
Document detection has been entirely rewritten using deep learning and a new interface is now available for Android and iOS.
On Android, instead of using GeniusScanLibrary.detectFrame(path)
, you need to build a CnnDocumentDetection
object and call one of the detectDocument
methods on it.
Similarly, on iOS, instead of using [GSK detectQuadrangleFromImage:imageOutOfCamera options:0]
, use the GSKDocumentDetector
class and the detectQuadrangle*
methods.
Scan processor
A new interface is also available for the different scan processing operations such as perspective correction, filtering and distortion correction. A single call is now needed to process an image and get a clean and readable document.
On Android, the corresponding methods have been removed from the GeniusScanLibrary
class and have been replaced by a ScanProcessor
class.
On iOS, the GSKDocumentProcessor
class replaces previous methods from GSKCore
.
Image filters
The different image filters (Photo
, Color
, Black and White
, Monochrome
) have also been rewritten from scratch using novel algorithms to improve the quality and readability of the scanned documents. This results in a better removal of shadows, a correction of the colored tint that appears on some documents because of ambient light, and a better treatment of colors in text documents.
Monochrome filter and smaller PDF files
We’ve made several changes to optimize the size of PDF files created with the SDK. When using the Monochrome
filter, you have the ability to save the output as monochrome 1-bit PNG images. Resulting PDF files using these PNG images are up to 10 times smaller.
Other changes
- [Cordova ReactNative Flutter] iOS: Change the output format to match the documentation. Now, the scans and the generated PDF all have a URL in the form
file:///path/to/file.ext
.
[3.0.25] - 2020-10-01
- [Android] Add support for Android 11
- [Cordova] Fix Ionic documentation
[3.0.24] - 2020-08-24
- [PDF] Add ability to set creation and last update dates of PDF files metadata.
- [UI] Fix bug where current page was saved when the validation dialog was canceled.
- [Core] Android: Properly throw an exception in perspective correction when quadrangle is invalid.
- [Core] iOS: Fix crash in perspective correction when two vertices of the quadrangle are really close.
[3.0.23] - 2020-07-21
- [UI] Improve translations, mainly in Turkish.
- [Android] Keep symbols in AARs to be able to track crashes (eg with Firebase Crashlytics). This shouldn’t result in bigger APKs since native symbols are stripped when built in Release mode.
[3.0.22] - 2020-07-15
- [OCR] Improve error reporting in
TextLayoutToTextConverter
.
- [UI] Improve German localization.
- [UI] iOS: Add cancel button when picking an image from the Photos or scanning directly from a URL.
- [UI] iOS: Prevent conflict between interactive pop gesture and dragging to adjust the document’s detected edges.
[3.0.21] - 2020-07-13
- [Android] Core:
ScanFragment
now checks if its parent fragment implements CameraCallbackProvider
, not only its parent activity.
- [iOS] Fix crash with 64-bit images.
- [OCR] Fix
TextLayoutToTextConverter
issue on some images with no text.
[3.0.20] - 2020-07-06
- [Android] Fix a Proguard issue regarding
TextLayoutToTextConverter
class
[3.0.19] - 2020-06-23
- [Android] Fix dependencies of Maven artifacts
- [UI] Android: Fix a minor issue closing a dialog that was causing an error being logged
- [UI] Android: Fix Camera screen on devices with a 16:9 camera
- [OCR] Add a TextLayout to Text converter to convert OCR result into a legible text
[3.0.18] - 2020-05-12
- [iOS] SDK is now built with Xcode 11.4.1.
- [Flutter, RN, Cordova] Fix Android dependency (Bolt Tasks) that was causing a crash
[3.0.17] - 2020-05-05
- [OCR] Remove
preprocessed
parameter. This parameter let the caller specify that the image was already preprocessed for OCR and that the SDK didn’t need to reprocess it. The OCR stack will now always preprocess images for optimal results. The caller doesn’t have the ability to prevent that anymore.
- [UI] Fix some translations
- [UI] Android: optimize bitmap loading, especially for devices with a very large resolution camera
[3.0.16] - 2020-04-22
- [Core] Fix regression introduced in 3.0.15 where the PDF generation was broken if the images were resized during PDF generation.
- [OCR] Report error rather than crashing if language files are missing.
[3.0.15] - 2020-04-21
- [Core] Drastically reduce memory usage during PDF creation.
[3.0.14] - 2020-04-06
[3.0.13] - 2020-03-31
- [OCR] Improve quality of OCR for non-preprocessed images.
[3.0.12] - 2020-03-17
Changed
- [Cordova] Make plugin compatible with Capacitor
[3.0.11] - 2020-03-06
Changed
- [Flutter] Android: Fixed our plugin to work with the new plugin embedding system (for apps created with Flutter 1.12 and above)
[3.0.10] - 2020-01-10
Changed
- [OCR] Android: Improve interface and include a preprocessing step if requested.
OcrProcessor
should now be used.
- [ReactNative] Android: Fix
jpegQuality
and pdfMaxScanDimension
that were Double values instead of integers.
[3.0.9] - 2019-11-29
Changed
- [Core] Android: Improve
detectWarpEnhance
method that takes a Bitmap
as input and rename it to process
now that it also handles distortion correction.
[3.0.8] - 2019-11-07
Changed
- [Flutter] Improve integration of the plugin on Android, it’s no longer needed to edit an app’s
android/build.gradle
file to include the plugin native libraries.
- [Flutter] Android: Fix crash when
onActivityResult
wasn’t called with this plugin request code.
[3.0.7] - 2019-10-21
Changed
- [Core] Improve the robustness of the distortion/curvature correction
Added
- [UI] Add a parameter
jpegQuality
to set the JPEG quality of scanned pages
- [UI] Add a parameter
pdfMaxScanDimension
to reduce size of pages before PDF generation
[3.0.6] - 2019-10-02
Changed
- [iOS] Prevent scan 180° rotation when iPhone is tilted upside down.
- [Flutter] Android: Migrate to AndroidX
- [Cordova] Android Support library version can now be passed as parameter when adding the plugin.
- [Android] Remove the unneeded permission WRITE_EXTERNAL_STORAGE from manifest since SDK only writes to app specific directory.
[3.0.5] - 2019-09-19
Added
- [iOS] ScannerUI: the status bar color now automatically adapts to the chosen background color’s contrast (https://www.w3.org/WAI/ER/WD-AERT/#color-contrast).
Changed
- [Flutter] Android: Fix return of
setLicenceKey
method. An error with message java.lang.IllegalStateException: Reply already submitted
was logged before this fix.
[3.0.4] - 2019-09-12
Changed
- [iOS] Fix link issue by exposing some missing symbols
[3.0.3] - 2019-08-28
Added
- [Flutter] Add a Flutter plugin using the UI module of the SDK on pub.dev
Changed
- [Flutter/iOS] Fix a crash when canceling the scan flow
- [Android Cordova ReactNative] Parameter name
imageUrl
has been changed into image
. This parameter still expects the image URL and not the image itself.
- [Android] UI: Fix visibility of a class to be able to access individual pages in scan flow result
[3.0.2] - 2019-07-31
- [iOS] Fixed missing symbol in GSKScannerUI framework. This was resulting in a linker error when trying to access the GSKScannerUI results as individual scans (GSKScannerUIScan).
[3.0.1] - 2019-07-22
Changed
- [Android] UI: Default
multiPage
to true
- [ReactNative] Ensure compatibility of plugin with ReactNative 0.60
[3.0.0] - 2019-07-09
As of this release, the native SDK and the cross-platform plugins will be versioned under the same version number
Added
- [Android, iOS] Add a new “Scanner UI” module that allows to start a customizable capture flow with 3 screens in one command
- [Android, iOS] Add a new “Simple demo” app that shows how to use the Scanner UI module
- [Android] Split SDK into 3 libraries (AAR): gs-sdk (core scanning methods and PDF generation), gs-sdk-ocr (text and layout extraction from an image), gs-sdk-ui (simple scan flow UI)
- [iOS] Split SDK into three frameworks: GSSDK, GSSDKScannerUI and GSSDKOCR
- Add localization into 10 new languages
- [iOS] Utils: Add methods to rotate and fix orientation of an image
- [iOS] Utils: Add method to scale an image
Changed
- [ReactNative, Cordova] Switched to using the new SDK Scanner UI module
- [iOS] API: Improved documentation
- [iOS] API: Cleaned up API for Swift
- [iOS] Camera UI: Redesigned shutter button
- [iOS] Camera UI: Added animation when document is detected
- [iOS] API: Renamed filters Color -> Photo, Whiteboard -> Color
- [Android] UI: Fix shutter button not animating after camera permission dialog.
Removed
- [Cordova, ReactNative] Removed support for title, password for the generated PDF file
- [iOS] Removed distortion correction from iOS native demo
[ReactNative_2.5.2] - 2019-06-10
Changed
- [Android] Fixed setLicenceKey method which was not returning properly
[ReactNative_2.5.1, Cordova_2.5.1] - 2019-05-07
Changed
- [Cordova, ReactNative] Fixed typos in UI
- [Cordova, ReactNative] Android: Fixed layout issue
[ReactNative_2.5.0, Cordova_2.5.0] - 2019-04-30
Changed
- [Cordova, ReactNative] Android: Page format for PDF generation is FIT rather than A4
- [Cordova, ReactNative] Android: PDF title is used for filename, in addition to PDF metadata
- [Cordova, ReactNative] Android: Image type was incorrectly detected on original image, instead of warped image
Added
- [Cordova, ReactNative] Document detection status
- [Cordova, ReactNative] Scan functions now return original image Uri, in addition to enhanced image
[2.4.2] 2019-03-07
Added
- [Android] Made focus before trigger optional
Changed
- [iOS, Android] Improved OCR progress report (was between 0 and 70, should be between 0 and 100 now)
- [Android] Improved speed of OCR
[2.4.1] 2019-03-05
Changed
- [Android] Correctly throw exception when SDK initialized with incorrect license key
- [Android] Support landscape camera screen
- [iOS] Fix AutoTrigger flag that couldn’t be disabled
[2.4] [ReactNative_2.4.2, Cordova_2.4.2] 2019-02-27
Added
- [iOS, Android] Added OCR. Ability to extract text and layout from an image and generate PDF documents with this text information to make it searchable and selectable.
- [iOS] Added distortion correction to demo
- [React] Added ability to specify “ENHANCEMENT_NONE” to avoid filter phase
- [React] Added cancel button on iOS camera screen
- [React] Added automatic photo trigger on Android
Changed
- [Cordova] Compatibility with android-cordova >= v7.0.0
[2.3.4] 2019-02-20
[2.3.3] 2019-01-29
Added
- [iOS, Android] Added distortion correction
- [Android] Added support x86_64 architecture
Changed
- [iOS] Fixed crash with B&W images (#274)
- Improved exceptions handling (eg license check) (#280)
- [Android] Upgraded to Android P
- [Android] Upgraded OpenCV to 3.4.3
[ReactNative_2.4.1] 2018-12-05
Changed
- [React] Fixed wrong method name to set license key
[ReactNative_2.4.0] 2018-12-05
Added
- PDF generation with
generatePDF
- Selecting an enhancement type by default with
defaultEnhancement
option
Changed
[2.3.2] 2018-08-22
- [Android] Fixed export in demo for Android 7 and above
[2.3.1] 2018-07-25
- [iOS] Fixed resize of scaled image
- [Android] Added Auto Trigger to demo
- [Cordova] Added upgrade instructions to doc
[2.3] 2018-11-07
- [iOS] Added Auto Trigger to demo app
- [Android] Camera is released in an async task
- [ReactNative] Added plugin and demo
- [Cordova] Breaking changes:
- Licence needs to be set via setLicence
- scan is now scanImage
- New method to scan from camera scanCamera
[2.2] 2018-06-26
- [iOS] Fixed empty Apple documentation
- [iOS] On iPad, changed picture orientation to be based on UI instead of sensors
- [Android] Breaking change
- ScanFragment is now a fragment from the Support library, instead of a native fragment
- [Android] SDK is now published to our Maven repository on S3
[2.1.9] 2018-03-06
[2.1.8] 2018-02-27
- [Android] Fixed logging, especially to notify that SDK is not initialized
- [Cordova] Changed demo app to use image instead of camera in simulator
- [Cordova] Upgraded SDK, added docs for Plugman and Ionic
[2.1.7] 2017-01-31
- [iOS] Reduced size of SDK: footprint of Universal IPA according to App Thinning Report (~ 500 KB)
- [iOS] Removed need for adding OpenCV dependency to Podfile
- Updated READMEs
[2.1.6] 2017-01-18
- Added timer to allow tests for a minute without a license
[2.1.5] 2017-01-08
- [iOS] Added support for bitcode and Xcode 9.2
[2.1.10] 2018-04-03
- Improved enhancement of shadows in B&W
- [iOS] Added Appledoc
- [Android] Changed preview to stop after each picture is taken
- [Cordova] Added translations: de, en, es, fr, it, ja, pt-BR, ru, zh-Hans, zh-Hant