Changelog
[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