_____ _ _
| _ |___ _ _| |_|___ ___
| | | | | | | | -_|
|__|__|_|_|_ |_|_|_|_|___|
|___|
Anyline is mobile OCR SDK, which can be configured by yourself to scan all kinds of numbers, characters, text and codes.
The plugin lets you connect to the SDK with React-Native.
Go to the Example project in the example folder.
Check out the examples ResultView.js and config.json to see the implementation.
Go to our pricing page and get your license or sign up for your expiring test license.
Download or Clone the Repo to your node_modules
project
│ android.index.js
│ ios.index.js
└─── node_modules
└─── anyline-ocr-react-native-module
or just go
npm i anyline-ocr-react-native-module
Link the project. Run in root:
react-native link
in the root folder.
Package name must match with the bundleID from your Anyline License.
Go into the native Android folder of your Project to your MainApplication.
Import the AnylinePackage
import com.anyline.reactnative.AnylinePackage;
and add the package to your getPackages function
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new AnylinePackage()
);
}
Strict mode does not allow function declarations in a lexically nested statement.
http://stackoverflow.com/a/41076153/2157717
duplicate files during packaging of APK
packagingOptions {
pickFirst 'lib/armeabi-v7a/libgnustl_shared.so'
pickFirst 'lib/x86/libgnustl_shared.so'
}
Disable bitcode in your project
- Copy the Podfile from our example Project to your native iOS root folder.
- Change the target of the Podfile to your project name.
pod update
Add Camera Permissions to Info.plist
Privacy - Camera Usage Description
Add also every other permission you want to configure in your config.js (vibrate, sound).
Your BundleIdentifier of your app has to match with your bundleID from your Anyline License.
import Anyline from 'anyline-ocr-react-native-module';
import config from './config.js';
Add and import a JSON file with the proper structure and elements. The JSON config contains:
-
The license key
-
Options field with
- AnylineSDK config parameter
- “segment”: which contains the scanModes for the UI Segment (e.g. switch between Analog and Digital) - optional
- OCR field with (Only if you want to use the OCR module)
- your custom training data
- RegEx Validation
If you want to get detailed information on the config JSON, go to ourdocumentation
.
AnylineOCR.setup(
JSON.stringify(config),
“ANALOG_METER”,
this.onResult,
this.onError
);
openAnyline = async () => {
...
try {
const result = await AnylineOCR.setupPromise(JSON.stringify(config), “ANALOG_METER”);
} catch(error) {
console.error(error);
}
...
}
AnylineOCR.setupScanViewWithConfigJson(
JSON.stringify(config),
“ANALOG_METER”,
this.onResult,
this.onError
);
If you are using the ANYLINE_OCR module, you'll have to add some traineddata. There are some predefined traineddata which you can find in the example app. Also the OCR Config has to reflect the path. Check the VoucherConfig.js in the example/RNExampleApp/config folder.
ios
└─── trainedData
└─── myTrainedData.traineddata
android
└─── app
└─── src
└─── main
└─── assets
└─── traindData
└─── myTrainedData.traineddata
Key | Type | Default | Description |
---|---|---|---|
config | string | *required | config (JSON String) |
scanMode | string | *required | Will set the scanMode/Module of the Plugin. |
onResult | function | *required | The function you pass will be the onResult callback. Use this callback to handle the found scan results. |
onError | function | *required | The onError function will be called when the AnylinePlugin encounters an error. Handle the error messages in this method. |
Stringified JSON with all the configurations, detailed information here.
Keep in mind, that you have to add every permission to your project, you add in the config (vibrateOnResult -> vibration permission)
Available settings:
"AUTO_ANALOG_DIGITAL_METER"
"ANALOG_METER"
"DIGITAL_METER"
"DIAL_METER"
"HEAT_METER_4"
"HEAT_METER_5"
"HEAT_METER_6"
"SERIAL_NUMBER"
"BARCODE"
"MRZ"
"ANYLINE_OCR"
"DOCUMENT"
"LICENSE_PLATE"
Get more information in our Docu.
Callback -> Stringified JSON
{
reading : 'Result of the Scan',
imagePath : 'path to cropped image',
fullImagePath : 'path to full image',
barcode : 'result of the simultaneous barcode scanning',
scanMode : 'selected scanMode',
meterType : 'meter type'
}
More information about the simultaneous barcode scanning here.
Callback -> String
- String errorMessage
Keep in mind, all the images are saved in the cache directory of the app. For performance reasons, we only provide the path as string, so we don't have to transfer the whole image through the bridge. Please be aware, that you should not use the images in the cache directory for persistent storage, but store the images in a location of your choice for persistence.
See LICENSE file.