Giter Site home page Giter Site logo

anyline-ocr-examples-android's Introduction

anyline-ocr-examples-android

Anyline - A powerful OCR SDK for Android

File summary

  • AnylineExamples - Example app source code
  • README.md - This readme.
  • LICENSE.md - The license file.

API Reference

The API reference for the Anyline SDK for Android can be found here: https://documentation.anyline.com/android-sdk-component/latest/index.html

Getting Started

Check out our getting-started section here: https://documentation.anyline.com/android-sdk-component/latest/getting-started.html

Documentation

Check out our developer guide here: https://documentation.anyline.com/android-sdk-component/latest/index.html

License

See LICENSE file.

anyline-ocr-examples-android's People

Contributors

berndkamplanyline avatar danielalbertini avatar davlhd avatar igor-graca avatar igorbozin avatar igorbzin avatar patrickanyline avatar ricardocolombo avatar superqua avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

anyline-ocr-examples-android's Issues

VIN Scan Placeholder and Text Recognition animation not displaying

Hi,

i am calling ScanVehicleIdentificationNumberActivity.java to scan a VIN number.
Scanner loading fine and reading number fine. But sometimes scan placeholder and text recognition effect not displaying when i started from a fragment (even activity sometimes). passing vin_view_config.json, but no luck. Could anyone pls suggest on this. thank you.
InkedScreenshot_2019-07-24-14-51-23-219_com manheim mobilede_LI

Creating Custom document ocr

Hello.

Found this SDK and want to buy it.

First, I compiled the demo one and Id like to ask if we can create a custom scan like the MRZ.

We have some kind of documents and we want to use ocr on them.

Can we use ocr like (x : 0 , y: 20 ) so we can get values from some points ( like mrz )

Kotlin version catalogs failed to reseolve anylinesdk

I am creating a new project in Android using the latest Android Studio (Jellyfish 2023.3.1 Patch 1) with the latest Android frameworks and libraries and using Kotlin version catalogs for dependencies management.

For some raison gradle can't find the anyline dependencies, I have tried looking online for any solutions or similar problems, but I found none.

This is the error I get when I synch my project:
Failed to resolve: io.anyline:anylinesdk:51.6.0

and I get this error when I try to build:
> Could not find io.anyline:anylinesdk:51.6.0.
Searched in the following locations:
- https://dl.google.com/dl/android/maven2/io/anyline/anylinesdk/51.6.0/anylinesdk-51.6.0.pom
- https://repo.maven.apache.org/maven2/io/anyline/anylinesdk/51.6.0/anylinesdk-51.6.0.pom
Required by:
project :app

I have one module (app) and here is the build script for it:

plugins {
    alias(libs.plugins.android.application)
    alias(libs.plugins.jetbrains.kotlin.android)
}

android {
    namespace = "com.lamda.anylinetest"
    compileSdk = 34

    defaultConfig {
        applicationId = "com.lamda.anylinetest"
        minSdk = 24
        targetSdk = 34
        versionCode = 1
        versionName = "1.0"

        testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
        vectorDrawables {
            useSupportLibrary = true
        }
    }

    buildTypes {
        release {
            isMinifyEnabled = false
            proguardFiles(
                getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            )
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
    buildFeatures {
        compose = true
    }
    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.1"
    }
    packaging {
        resources {
            excludes += "/META-INF/{AL2.0,LGPL2.1}"
        }
    }
}

dependencies {

    implementation(libs.androidx.core.ktx)
    implementation(libs.androidx.lifecycle.runtime.ktx)
    implementation(libs.androidx.activity.compose)
    implementation(platform(libs.androidx.compose.bom))
    implementation(libs.androidx.ui)
    implementation(libs.androidx.ui.graphics)
    implementation(libs.androidx.ui.tooling.preview)
    implementation(libs.androidx.material3)
    testImplementation(libs.junit)
    androidTestImplementation(libs.androidx.junit)
    androidTestImplementation(libs.androidx.espresso.core)
    androidTestImplementation(platform(libs.androidx.compose.bom))
    androidTestImplementation(libs.androidx.ui.test.junit4)
    debugImplementation(libs.androidx.ui.tooling)
    debugImplementation(libs.androidx.ui.test.manifest)

    //camera-x
    implementation(libs.camera.core)
    implementation(libs.camera.camera2)
    implementation(libs.camera.view)
    implementation(libs.camera.lifecycle)

    //anyline
    implementation (libs.anylinesdk)

    //accompanist permissions
    implementation (libs.accompanist.permissions)
}

verions libs:

[versions]
agp = "8.4.1"
anylinesdk = "51.6.0"
kotlin = "1.9.0"
coreKtx = "1.13.1"
junit = "4.13.2"
junitVersion = "1.1.5"
espressoCore = "3.5.1"
lifecycleRuntimeKtx = "2.8.1"
activityCompose = "1.9.0"
composeBom = "2023.08.00"
camerax = "1.3.3"
accompanistPermissions = "0.35.1-alpha"

[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
junit = { group = "junit", name = "junit", version.ref = "junit" }
androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }
androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" }
androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycleRuntimeKtx" }
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activityCompose" }
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" }
androidx-ui = { group = "androidx.compose.ui", name = "ui" }
androidx-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" }
androidx-material3 = { group = "androidx.compose.material3", name = "material3" }

#cameraX
camera-core = { group = "androidx.camera", name = "camera-core", version.ref = "camerax" }
camera-camera2 = { group = "androidx.camera", name = "camera-camera2", version.ref = "camerax" }
camera-view = { group = "androidx.camera", name = "camera-view", version.ref = "camerax" }
camera-lifecycle = { group = "androidx.camera", name = "camera-lifecycle", version.ref = "camerax" }

anylinesdk = { module = "io.anyline:anylinesdk", version.ref = "anylinesdk" }

accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanistPermissions" }


[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

And this is my project gradle script

plugins {
    alias(libs.plugins.android.application) apply false
    alias(libs.plugins.jetbrains.kotlin.android) apply false
}

And this the settings gradle file

pluginManagement {
    repositories {
        google {
            content {
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.name = "AnylineTest"
include(":app")

Sample code crashes on startup

I've tried running the Anyline SDK example, and that works. But following the tutorial on the web page causes the app to crash on startup and kick me back to the home screen. It seems to me the tutorial has not been updated to the latest version, and I'm a beginner with coding for Android, thus I can't tell what's wrong.

I'm using a Samsung Galaxy S8.

Application crash when using Anyline SDK 20 for barcode scanning.

I am getting crash when trying to scan the barcode using anylineSDK 20.

2020-11-05 15:15:26.826 8352-8352/com.vyntelligence.vyn E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test, PID: 8352
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/firebase/ml/vision/barcode/FirebaseVisionBarcodeDetectorOptions$Builder;
at at.nineyards.anyline.camera.NativeBarcodeDetectionThread.(SourceFile:41)
at at.nineyards.anyline.camera.NativeBarcodeDetector.enableBarcodeDetection(SourceFile:46)
at at.nineyards.anyline.camera.CameraView.enableBarcodeDetection(SourceFile:693)
at io.anyline.plugin.barcode.BarcodeScanPlugin.start(SourceFile:117)
at io.anyline.view.AbstractScanViewPlugin.start(SourceFile:122)
at io.anyline.view.ScanView.a(SourceFile:324)
at io.anyline.view.ScanView.start(SourceFile:359)
at com.vyntelligence.vyn.views.activities.ScanBarcodeActivity.onResume(ScanBarcodeActivity.java:73)
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1354)
at android.app.Activity.performResume(Activity.java:7079)
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3620)
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3685)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2898)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.firebase.ml.vision.barcode.FirebaseVisionBarcodeDetectorOptions$Builder" on path: DexPathList[[zip file "/data/app/com.vyntelligence.vyn-GUfFHkz-I2cmJGQVKUwJnw==/base.apk"],nativeLibraryDirectories=[/data/app/com.vyntelligence.vyn-GUfFHkz-I2cmJGQVKUwJnw==/lib/x86, /data/app/com.vyntelligence.vyn-GUfFHkz-I2cmJGQVKUwJnw==/base.apk!/lib/x86, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at at.nineyards.anyline.camera.NativeBarcodeDetectionThread.(SourceFile:41) 
at at.nineyards.anyline.camera.NativeBarcodeDetector.enableBarcodeDetection(SourceFile:46) 
at at.nineyards.anyline.camera.CameraView.enableBarcodeDetection(SourceFile:693) 
at io.anyline.plugin.barcode.BarcodeScanPlugin.start(SourceFile:117) 
at io.anyline.view.AbstractScanViewPlugin.start(SourceFile:122) 
at io.anyline.view.ScanView.a(SourceFile:324) 
at io.anyline.view.ScanView.start(SourceFile:359) 
at com.vyntelligence.vyn.views.activities.ScanBarcodeActivity.onResume(ScanBarcodeActivity.java:73) 
at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1354) 
at android.app.Activity.performResume(Activity.java:7079) 
at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3620) 
at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3685) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2898) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

Application is crashing when Initializing the Anyline SDK

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.toyota.oneapp.stage-oVe3F1Cxhu6HgdKOyiF41Q==/base.apk"],nativeLibraryDirectories=[/data/app/com.toyota.oneapp.stage-oVe3F1Cxhu6HgdKOyiF41Q==/lib/x86, /data/app/com.toyota.oneapp.stage-oVe3F1Cxhu6HgdKOyiF41Q==/base.apk!/lib/x86, /system/lib, /system/product/lib]]] couldn't find "libopencv_java3_al.so" at java.lang.Runtime.loadLibrary0(Runtime.java:1067) at java.lang.Runtime.loadLibrary0(Runtime.java:1007) at java.lang.System.loadLibrary(System.java:1667) at io.anyline.AnylineSDK.<clinit>(SourceFile:1) at io.anyline.AnylineSDK.init(SourceFile:1)

crashing at (SourceFile:100)

D/CameraController1: Skip camera opening: A camera is already open.

and the exception log is

java.lang.NullPointerException: Attempt to read from field 'float android.graphics.RectF.left' on a null object reference
at at.nineyards.anyline.camera.CutoutView.setRect(SourceFile:100)

[Android] - Crash when scanning QR code with Anyline@21

This is not 100% reproducible, it happened at least four times in this device:

Device

Brand: samsung
Model: Galaxy S8
Orientation: Portrait
RAM free: 1.04 GB
Disk free: 38.92 GB

Operating System

Version: 9
Orientation: Portrait
Rooted: No

We are using Anyline version 21

Fatal Exception: java.lang.IllegalStateException: No yuv image set!
       at at.nineyards.anyline.camera.ImageReceiver.getYuvImage(SourceFile:81)
       at io.anyline.plugin.AbstractScanPlugin.getLastImageWithFullSize(SourceFile:245)
       at io.anyline.plugin.barcode.BarcodeScanPlugin.f(SourceFile:34)
       at io.anyline.plugin.barcode.BarcodeScanPlugin$1.onSuccess(SourceFile:133)
       at at.nineyards.anyline.camera.NativeBarcodeDetectionThread$1$2.onSuccess(SourceFile:1141)
       at com.google.android.gms.tasks.zzn.run(:4)
       at android.os.Handler.handleCallback(Handler.java:873)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:214)
       at android.app.ActivityThread.main(ActivityThread.java:7073)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

Empty licence key

Hi,

I was running the example app and it crashed because of the below error.

io.anyline2.core.LicenseException: 
++++++++++ Anyline License Exception ++++++++++
The license key is empty.                                                                                                    +++++++++++++++++++++++++++++++++++++++++++++++

How can I fix it?

Thanks.

Set Language Method missing in SDK 35

We was using "setLanguages()" in SDK version 22 in previously. But in SDK version 35 this method is not there so please suggest hoe we can add language in SDK 35
Example:
anylineOcrConfig.setLanguages("tessdata/eng_no_dict.traineddata");

java.lang.UnsatisfiedLinkError: No implementation found

Hello
Users while using my application keep getting this exception and as a result the application crash
The way to reproduce this issue is:
open scanner screen
minimize application
do some actions (in my case is to open camera, make some photos, open gallery)
resume application
crash happens
While opening the scanner regularly there are no issues with it.
Here is the exception
No implementation found for void at.nineyards.anyline.core.asset_serviceJNI.swig_module_init() (tried Java_at_nineyards_anyline_core_asset_1serviceJNI_swig_1module_1init and Java_at_nineyards_anyline_core_asset_1serviceJNI_swig_1module_1init__)

E FATAL EXCEPTION: main Process: com.app.test, PID: 5939 java.lang.UnsatisfiedLinkError: No implementation found for void at.nineyards.anyline.core.asset_serviceJNI.swig_module_init() (tried Java_at_nineyards_anyline_core_asset_1serviceJNI_swig_1module_1init and Java_at_nineyards_anyline_core_asset_1serviceJNI_swig_1module_1init__) at at.nineyards.anyline.core.asset_serviceJNI.swig_module_init(Native Method) at at.nineyards.anyline.core.asset_serviceJNI.<clinit>(SourceFile:1) at at.nineyards.anyline.core.AssetDelegate.<init>(SourceFile:4) at io.anyline.trainer.AssetController.<init>(SourceFile:1) at io.anyline.plugin.AbstractScanPlugin.<init>(SourceFile:44) at io.anyline.plugin.barcode.BarcodeScanPlugin.<init>(SourceFile:1) at com.app.test.ScanBarcodeActivity.initScanPlugin(ScanBarcodeActivity.java:138) at com.app.test.ScanBarcodeActivity.onCreate(ScanBarcodeActivity.java:115) at android.app.Activity.performCreate(Activity.java:7963) at android.app.Activity.performCreate(Activity.java:7952) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3629) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3806) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2267) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:8167) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)

Parallel Scan

Hi,
Can we scan three different scan at once ?
Like Meter reading, Barcode and alphanumeric.

Thanks in advance.

eror in adnroid

i'm get eror in android 

java.lang.RuntimeException: Script not set or does not exist in the required path. Are you auto generating the anyline_assets.json in your build.gradle? Or use the AssetUtil to copy the required stuff out of the apk manually? Core Exception: CmdFile does not exist or cannot be accessed.

how to fix it?
Anyline version 42.0.0

Duplicate class a.a found in modules

Hi,

I use several libs which are obfuscated. As a result, I get the following build error:

Duplicate class a.a found in modules jetified-anylinesdk-43.1.0-runtime (io.anyline:anylinesdk:43.1.0) and jetified-xxx-3.0.0-preview-runtime (another library)

because another lib also has obfuscated a.a class.

image

Could you please use a flattened package hierarchy in your ProGuard rules to move obfuscated classes in some unique packages to prevent conflicts mentioned above with other libraries?

Thanks in advance!

lopencv Crash in new Android Studio Iguana

java.lang.UnsatisfiedLinkError: dlopen failed: library "libopencv_java3_al.so" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:1082)
at java.lang.Runtime.loadLibrary0(Runtime.java:1003)
at java.lang.System.loadLibrary(System.java:1661)
at io.anyline2.AnylineSdk.(SourceFile:1)

I'm facing this crash after update Android studio version and Sdk Version
Please help me to resolve it.

ClassNotFoundException crash after upgrading to v26

Hi team,

I was trying to update the AnyLine SDK from version 23 to 26.1, but now I'm getting the following crash:

Fatal Exception: java.lang.RuntimeException: Unable to resume activity {com.xxx/com.xxx.core.app.cards.SingleCardHolderActivity}: android.view.InflateException: Binary XML file line #12 in com.xxx:layout/fragment_xxx_scanner: Binary XML file line #12 in com.xxx:layout/fragment_xxx_scanner: Error inflating class io.anyline.view.ScanView
       at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4444)
       ...
Caused by android.view.InflateException: Binary XML file line #12 in com.xxx:layout/fragment_xxx_scanner: Binary XML file line #12 in com.xxx:layout/fragment_xxx_scanner: Error inflating class io.anyline.view.ScanView
Caused by java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/common/util/concurrent/MoreExecutors;
       at io.anyline.view.ScanView.<init>(SourceFile:20)
       at io.anyline.view.ScanView.<init>(SourceFile:2)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:852)
       at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126)
       at com.xxx.databinding.FragmentScannerBinding.inflate(FragmentScannerBinding.java:53)
       at com.xxx.scanner.ScannerFragment.onCreateView(ScannerFragment.kt:69)
       at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2699)
       ...
Caused by java.lang.ClassNotFoundException: Didn't find class "com.google.common.util.concurrent.MoreExecutors" on path: DexPathList[[zip file "/data/app/~~UghjyNcsgtnaIKSZoXs34g==/com.xxx-ZtmsdwXgjyyXx4C5o7TWUQ==/base.apk"],nativeLibraryDirectories=[/data/app/~~UghjyNcsgtnaIKSZoXs34g==/com.xxx-ZtmsdwXgjyyXx4C5o7TWUQ==/lib/arm64, /data/app/~~UghjyNcsgtnaIKSZoXs34g==/com.xxx-ZtmsdwXgjyyXx4C5o7TWUQ==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64, /product/lib64]]
       at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
       at io.anyline.view.ScanView.<init>(SourceFile:20)
       at io.anyline.view.ScanView.<init>(SourceFile:2)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
       at android.view.LayoutInflater.createView(LayoutInflater.java:852)
       at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126)
       at com.xxx.databinding.FragmentScannerBinding.inflate(FragmentScannerBinding.java:53)
       at com.xxx.scanner.ScannerFragment.onCreateView(ScannerFragment.kt:69)
       at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2699)
       ...

These are the changes that I've done:
image
image
image

any idea?

Question regarding Meter Reading

Hi Team,
I know the question I am going to ask is somewhat silly. But I still, need confirmation. In the Anyline library for android, I was just checking the Meter read functionality. Is there any way to ensure that the reading is taken only from the real physical meter, not from any photo or any sort of paper with some digits?

"Help Needed"

Application crashing when using AnyLine SDK 25

Defined the scanView in XML
<io.anyline.view.ScanView
android:id="@+id/scan_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />

getting below crash when opening my activity.

2020-11-05 15:19:56.694 8796-8796/com.vyntelligence.vyn E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.test, PID: 8796
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.views.activities.ScanBarcodeActivity}: android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class io.anyline.view.ScanView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: android.view.InflateException: Binary XML file line #8: Binary XML file line #8: Error inflating class io.anyline.view.ScanView
Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class io.anyline.view.ScanView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:647)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:695)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:174)
at com.vyntelligence.vyn.views.activities.ScanBarcodeActivity.onCreate(ScanBarcodeActivity.java:33)
at android.app.Activity.performCreate(Activity.java:6975)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/common/util/concurrent/MoreExecutors;
at io.anyline.view.ScanView.(SourceFile:20)
at io.anyline.view.ScanView.(SourceFile:2)
at java.lang.reflect.Constructor.newInstance0(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:334) 
at android.view.LayoutInflater.createView(LayoutInflater.java:647) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:695) 
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:174) 
at com.vyntelligence.vyn.views.activities.ScanBarcodeActivity.onCreate(ScanBarcodeActivity.java:33) 
at android.app.Activity.performCreate(Activity.java:6975) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.common.util.concurrent.MoreExecutors" on path: DexPathList[[zip file "/data/app/com.example.test-rOXuiikEOmNccnM1_pUO5g==/base.apk"],nativeLibraryDirectories=[/data/app/com.vyntelligence.vyn-rOXuiikEOmNccnM1_pUO5g==/lib/x86, /data/app/com.vyntelligence.vyn-rOXuiikEOmNccnM1_pUO5g==/base.apk!/lib/x86, /system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:93)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at io.anyline.view.ScanView.(SourceFile:20) 
at io.anyline.view.ScanView.(SourceFile:2) 
at java.lang.reflect.Constructor.newInstance0(Native Method) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:334) 
at android.view.LayoutInflater.createView(LayoutInflater.java:647) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) 
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) 
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:515) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:423) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:374) 
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:695) 
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:174) 
at com.example.test.activities.ScanBarcodeActivity.onCreate(ScanBarcodeActivity.java:33) 
at android.app.Activity.performCreate(Activity.java:6975) 
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
at android.app.ActivityThread.-wrap11(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

Activity code
`import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import at.nineyards.anyline.camera.CameraController;
import at.nineyards.anyline.camera.CameraOpenListener;
import io.anyline.plugin.ScanResultListener;
import io.anyline.plugin.barcode.BarcodeScanResult;
import io.anyline.plugin.barcode.BarcodeScanViewPlugin;
import io.anyline.view.BaseScanViewConfig;
import io.anyline.view.ScanView;
import io.anyline.view.ScanViewPluginConfig;

/**

  • Example activity for the Anyline-Barcode-Module
    */
    public class ScanBarcodeActivity extends AppCompatActivity implements CameraOpenListener {

    private static final String TAG = ScanBarcodeActivity.class.getSimpleName();
    private ScanView barcodeScanView;
    private TextView resultText;

    @OverRide
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_any_line_scan);
    //Set the flag to keep the screen on (otherwise the screen may go dark during scanning)
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

     //resultText = (TextView) findViewById(R.id.text_result);
    
     barcodeScanView = (ScanView) findViewById(R.id.scan_view);
     // add a camera open listener that will be called when the camera is opened or an error occurred
     //  this is optional (if not set a RuntimeException will be thrown if an error occurs)
     barcodeScanView.setCameraOpenListener(this);
     // the view can be configured via a json file in the assets, and this config is set here
     // (alternatively it can be configured via xml, see the Energy Example for that)
     //barcodeScanView.setScanConfig("barcode_view_config.json");
    
     // optionally limit the barcode format to (multiple) specific types
     //barcodeScanView.setBarcodeFormats(BarcodeScanView.BarcodeFormat.QR_CODE,
     //        BarcodeScanView.BarcodeFormat.CODE_128);
     //init the scanViewPlugin configuration which hold the scan view ui configuration (cutoutConfig and ScanFeedbackConfig)
     ScanViewPluginConfig barcodeScanviewPluginConfig = new ScanViewPluginConfig(getApplicationContext(), "barcode_view_config.json");
     //init the scan view
     BarcodeScanViewPlugin scanViewPlugin = new BarcodeScanViewPlugin(getApplicationContext(), getString(R.string.anyline_license_key), barcodeScanviewPluginConfig, "BARCODE");
     //init the base scanViewconfig which hold camera and flash configuration
     BaseScanViewConfig barcodeBaseScanViewConfig = new BaseScanViewConfig(getApplicationContext(), "barcode_view_config.json");
     //set the base scanViewConfig to the ScanView
     barcodeScanView.setScanViewConfig(barcodeBaseScanViewConfig);
     //set the scanViewPlugin to the ScanView
     barcodeScanView.setScanViewPlugin(scanViewPlugin);
     //add result listener
     scanViewPlugin.addScanResultListener(new ScanResultListener<BarcodeScanResult>() {
         @Override
         public void onResult(BarcodeScanResult result) {
             //resultText.setText(result.getResult().get(0).getValue());
         }
     });
    

    }

    @OverRide
    protected void onResume() {
    super.onResume();
    //start the actual scanning
    barcodeScanView.start();
    }

    @OverRide
    protected void onPause() {
    super.onPause();
    //stop the scanning
    barcodeScanView.stop();
    //release the camera (must be called in onPause, because there are situations where
    // it cannot be auto-detected that the camera should be released)
    barcodeScanView.releaseCameraInBackground();
    }

    @OverRide
    public void onCameraOpened(CameraController cameraController, int width, int height) {
    //the camera is opened async and this is called when the opening is finished
    Log.d(TAG, "Camera opened successfully. Frame resolution " + width + " x " + height);
    }

    @OverRide
    public void onCameraError(Exception e) {
    //This is called if the camera could not be opened.
    // (e.g. If there is no camera or the permission is denied)
    // This is useful to present an alternative way to enter the required data if no camera exists.
    throw new RuntimeException(e);
    }
    }`

NoSuchMethodError: No virtual method getDisplay() in class Context

Hi team,

I'm seeing the following crash in version 30.1 of the AnyLine sdk:

Fatal Exception: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class io.anyline.view.ScanView
       at android.view.LayoutInflater.inflate(LayoutInflater.java:558)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:434)
       at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126)
       at androidx.databinding.ViewDataBinding.inflateInternal(ViewDataBinding.java:1368)
       at com.xxx.XXXBinding.inflate(XXXBinding.java:53)
       at com.xxx.XXXBinding.inflate(XXXBinding.java:39)
       at com.xxx.XXXFragment.onCreateView(XXXFragment.java:68)
       at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2950)
       at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:515)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
       at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2177)
       at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2088)
       at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1990)
       at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
       at android.os.Handler.handleCallback(Handler.java:743)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:150)
       at android.app.ActivityThread.main(ActivityThread.java:5621)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
Caused by java.lang.NoSuchMethodError: No virtual method getDisplay()Landroid/view/Display; in class Landroid/content/Context; or its super classes (declaration of 'android.content.Context' appears in /system/framework/framework.jar)
       at at.nineyards.anyline.camera.CameraUtil.getDisplayRotationDegrees(CameraUtil.java:1)
       at at.nineyards.anyline.camera.CameraUtil.getCameraDisplayRotation(CameraUtil.java:4)
       at at.nineyards.anyline.camera.CameraController1.<init>(CameraController1.java:123)
       at at.nineyards.anyline.camera.CameraView.a(CameraView.java:6)
       at at.nineyards.anyline.camera.CameraView.<init>(CameraView.java:154)
       at io.anyline.view.ScanView.<init>(ScanView.java:3)
       at io.anyline.view.ScanView.<init>(ScanView.java:2)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at android.view.LayoutInflater.createView(LayoutInflater.java:638)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:783)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:723)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:854)
       at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:817)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:434)
       at androidx.databinding.DataBindingUtil.inflate(DataBindingUtil.java:126)
       at androidx.databinding.ViewDataBinding.inflateInternal(ViewDataBinding.java:1368)
       at com.xxx.inflate(XXXBinding.java:53)
       at com.xxx.XXXBinding.inflate(XXXBinding.java:39)
       at com.xxx.XXXFragment.onCreateView(XXXFragment.java:68)
       at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2950)
       at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:515)
       at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:282)
       at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2177)
       at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:2088)
       at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1990)
       at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:524)
       at android.os.Handler.handleCallback(Handler.java:743)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:150)
       at android.app.ActivityThread.main(ActivityThread.java:5621)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)

The affected customers were using Android 6.

Checking the Android docs, Context.getDisplay() was added in API 30, so that may be the reason?

Thanks.

Upgrade information: Accessing Cutout Rect

Hello,
I try to upgrade the version from 11 to 43.0.0.

Is there any way to get cutout rect or cutout position bounds?

Version 11
we could access them scanView.getCutoutRect().bottom on onCameraOpened of CameraOpenListener

Version 43
I tried to access ScanViewPlugin.getCutoutRect() on UIChangeListener methods but all of them returns null.

Thank you

Proguard issue for Android

I needed to add following lines to proguard-rules.pro to support minifyEnabled build

-keepclassmembers class at.nineyards.anyline.** {*;}

Following is the setup for my release build variant.

release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }

You should add the proguard rule in your ReadMe section

Overlay-cutout does not working

Hello. We just updated the library to version 21 and discovered that the overlay for cutout does not working anymore. In json config, changing these parameters (outerColor and outerAlpha) does not change anything.
"viewPlugin": {
"cutoutConfig": {
...
},
"outerColor": "000000",
"outerAlpha": 0.8,
...
}
I was checked sample project
and the same issue presented there as well.
Also was try set this value programmatically and this does not take affect.
val scanViewPluginConfig = ScanViewPluginConfig(context, VIN_SCANNER_CONFIG)
scanViewPluginConfig.cutoutConfig.outerColor = ContextCompat.getColor(context, R.color.red)
Android versions on which there was a check: Android 7.1.2; Android 10.0
On version 19, everything worked as expected and these parameters applied from config.
Is there way for change "outerColor" and "outerAlpha" for "cutoutConfig" in 21 version of the library?

ScanResultListener not getting called

While scanning any number or text "addScanResultListener" not calling. my integration code are below

// see ScanScrabbleActivity for a more detailed description
AnylineOcrConfig anylineOcrConfig = new AnylineOcrConfig();
// use predefined whitelist and regular expression
anylineOcrConfig.setCharWhitelist(AnylineOcrConfig.AnylineOcrRegex.ISBN.getWhiteList());
anylineOcrConfig.setValidationRegex(AnylineOcrConfig.AnylineOcrRegex.ISBN.getRegex());
// AUTO ScanMode automatically detects the correct text without any further parameters to be set
anylineOcrConfig.setScanMode(AnylineOcrConfig.ScanMode.AUTO);

//init the scanViewPlugin config
ScanViewPluginConfig ocrScanViewPluginConfig = new ScanViewPluginConfig(getApplicationContext(), "isbn_view_config.json");
//init the scan view
OcrScanViewPlugin scanViewPlugin = new OcrScanViewPlugin(getApplicationContext(), anylineOcrConfig, ocrScanViewPluginConfig, "OCR");
//init the base config used for camera and flash
BaseScanViewConfig ocrBaseScanViewConfig = new BaseScanViewConfig(getApplicationContext(), "isbn_view_config.json");
//set the scan Base config
scanView.setScanViewConfig(ocrBaseScanViewConfig);
//set the scan view plugin to the scan view
scanView.setScanViewPlugin(scanViewPlugin);
//add the scan result listener
scanViewPlugin.addScanResultListener(new ScanResultListener<OcrScanResult>() {
    @Override
    public void onResult(OcrScanResult result) {
        Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_SHORT).show();
        /*if (!result.toString().isEmpty()) {
            Toast.makeText(getApplicationContext(), result.toString(), Toast.LENGTH_SHORT).show();
        }*/
    }

});
scanView.getCameraView().enableBarcodeDetection(new NativeBarcodeResultListener() {
    public void onFailure(String e) {
        Log.e("Error while scanning", e);
    }
    public void onSuccess(List<Barcode> barcodes) {
        if (barcodes != null && !barcodes.isEmpty()) {
            setScanData(barcodes.get(0).getRawValue());
        }
    }
}, null);

NullPointerException after start ScanView with universal id configuration on Pixel 4a with Android 11

Exception:

java.lang.NullPointerException
        at android.content.res.XmlBlock.nativeGetStyleAttribute(Native Method)
        at android.content.res.XmlBlock.access$1500(XmlBlock.java:41)
        at android.content.res.XmlBlock$Parser.getStyleAttribute(XmlBlock.java:459)
        at android.content.res.Resources$Theme.getExplicitStyle(Resources.java:1827)
        at android.view.View.retrieveExplicitStyle(View.java:6348)
        at android.view.View.<init>(View.java:5474)
        at android.view.View.<init>(View.java:5430)
        at android.view.View.<init>(View.java:5409)
        at io.anyline.view.AnylineFeedbackView.<init>(SourceFile:1)
        at io.anyline.view.ScanView.b(SourceFile:29)
        at io.anyline.view.ScanView.$r8$lambda$XMQ9vxgMy9VgYJHKOZXNfRghkI0(Unknown Source:0)
        at io.anyline.view.ScanView$$ExternalSyntheticLambda14.run(Unknown Source:2)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7664)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

Implementation:

binding.scanView.init(UNIVERSAL_ID_CONFIG)
val scanViewPlugin = binding.scanView.scanViewPlugin as? IdScanViewPlugin
scanViewPlugin?.addScanResultListener(ScanResultListener { idScanResult: ScanResult<ID<*>?> ->
	...
} as ScanResultListener<ScanResult<ID<*>?>>)

Config:

{
  "camera": {
    "captureResolution": "1080p",
    "zoomGesture": true
  },
  "flash": {
    "mode": "none"
  },
  "viewPlugin": {
    "plugin": {
      "id": "ID",
      "idPlugin": {
        "universalIdConfig": {
          "faceDetection": true,
          "allowedLayouts": {}
        }
      }
    },
    "cutoutConfig": {
      "style": "animated_rect",
      "maxWidthPercent": "90%",
      "maxHeightPercent": "90%",
      "alignment": "center",
      "strokeWidth": 8,
      "cornerRadius": 8,
      "strokeColor": "FFFFFF",
      "outerColor": "000000",
      "outerAlpha": 0.3,
      "ratioFromSize": {
        "width": 50,
        "height": 31
      },
      "cropPadding": {
        "x": -50,
        "y": -50
      },
      "cropOffset": {
        "x": 0,
        "y": 0
      },
      "feedbackStrokeColor": "0099FF"
    },
    "scanFeedback": {
      "style": "CONTOUR_RECT",
      "visualFeedbackRedrawTimeout": 100,
      "strokeColor": "0099FF",
      "fillColor": "220099FF",
      "beepOnResult": true,
      "vibrateOnResult": true,
      "strokeWidth": 2
    },
    "cancelOnResult": true
  }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.