GithubHelp home page GithubHelp logo

mayuce / androiddocumentscanner Goto Github PK

View Code? Open in Web Editor NEW
527.0 17.0 167.0 84.41 MB

This library helps to scan a document like CamScanner.

Home Page: https://www.linkedin.com/in/mayuce/

License: MIT License

Kotlin 35.71% Java 64.29%
android androidlibrary opencv image-processing android-library

androiddocumentscanner's Introduction

Android Document Scanner Library

version 1.6.1 green
minSDK 21 blue
license MIT yellowgreen

If you liked the work you can think about Donate via Paypal.

This library helps you to scan any document like CamScanner.

documentscannerMockup

Requirements

Add line below to your top level build.gradle

allprojects {
    repositories {
        /// ....
        mavenCentral()
    }
}

Add lines below to your app level build.gradle

    implementation 'io.github.mayuce:AndroidDocumentScanner:1.6.1'

And Sync the gradle

Usage

New version of this library provides you the gear instead of ready to go car. So you need to build your own implementation with it, before you upgrade your project make sure that you know it’s gonna be a braking change in your project.

  • Add DocumentScannerView to your layout

...
            <com.labters.documentscanner.DocumentScannerView
                    android:id="@+id/document_scanner"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
...
  • Set loading listener

        binding.documentScanner.setOnLoadListener { loading ->
            binding.progressBar.isVisible = loading
        }
  • Set selected Bitmap into the view

        binding.documentScanner.setImage(bitmap)
  • After selecting the edge points get cropped image

        binding.btnImageCrop.setOnClickListener {
            lifecycleScope.launch {
                binding.progressBar.isVisible = true
                val image = binding.documentScanner.getCroppedImage()
                binding.progressBar.isVisible = false
                binding.resultImage.isVisible = true
                binding.resultImage.setImageBitmap(image)
            }
        }

Additional Features

On above Android 9.0 there is magnifier to help user to see zoomed image to crop.

If you face with any issues you can take a look at com.labters.documentscannerandroid.ImageCropActivity to see how does it works.

TO-DO

  • Nothing so far, you may tell me?..

Thanks

MIT License

Copyright (c) 2020 Muhammet Ali YUCE

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

androiddocumentscanner's People

Contributors

bagolysz avatar mayuce avatar shahawi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  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  avatar  avatar  avatar  avatar  avatar  avatar

androiddocumentscanner's Issues

The known vulnerabilities in the shared library which AndroidDocumentScanner depends on.Can you help upgrade to patch versions?

Hi, @mayuce , @shahawi , I'd like to report a vulnerability issue in io.github.mayuce:AndroidDocumentScanner:1.6.1.

Issue Description

io.github.mayuce:AndroidDocumentScanner:1.6.1 directly or transitively depends on 7 C libraries (.so) cross many platforms(such as x86-64, x86, arm64, armhf). However, I noticed that one C libraries is vulnerable, containing the following CVEs:

libopencv_java3.so from C project opencv(version:3.4.1) exposed 4 vulnerabilities:
CVE-2019-15939, CVE-2019-14491, CVE-2019-14493, CVE-2019-14492

Suggested Vulnerability Patch Versions

opencv* has fixed the vulnerabilities in versions >=4.2.0

Java build tools cannot report vulnerable C libraries, which may induce potential security issues to many downstream Java projects.
Could you please upgrade the above shared libraries to their patch versions?

Thanks for your help~
Best regards,
Helen Parr

Can't change button text

First, I'm new to Native (Android Studio, Kotlin). I use this library, follow your requirements but I can't change the button text in ScannerConstants.java (Header in readme -> Customizing ImageCropActivity). The file is locked. How can I change?

Thanks.

Thanks

Thank you Brother, for help to Making my Application more Beautiful 🙏🙏🙏.

WhatsApp Image 2020-07-11 at 2 05 16 PM

Function invertColor not working

Hello, I have a problem with the function invertColor, when I invert the for gray scale and crop the imagem i cannot invertColor again and get the original color with the image already cropped.

Could you help me?

Edge detection not working sometimes.

I had implemented this library in one of my project with the help of library I want to detect the id prof cards every thing is working fine but the problem is when card was placed on multicoloured background the edges of the card are not getting exactly identified in the sense the polygon view which allows the user to crop is getting applied to full background. Please help me to solve this issue

Gradle Error

Hello,

I setup the project as described in git but getting the following error message:

FAILURE: Build failed with an exception.

  • Where:
    Initialization script '/private/var/folders/54/3v4ns1x96dbb0kk291hjm96c0000gr/T/ijinit.gradle' line: 41

  • What went wrong:
    A problem occurred evaluating initialization script.

org/gradle/internal/impldep/com/google/common/collect/Lists

  • Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.

  • Exception is:
    org.gradle.api.GradleScriptException: A problem occurred evaluating initialization script.
    at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:92)
    at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$2.run(DefaultScriptPluginFactory.java:221)
    at org.gradle.configuration.DefaultScriptTarget.addConfiguration(DefaultScriptTarget.java:74)
    at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:226)
    at org.gradle.configuration.BuildOperationScriptPlugin$1$1.run(BuildOperationScriptPlugin.java:69)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:66)
    at org.gradle.configuration.BuildOperationScriptPlugin$1.execute(BuildOperationScriptPlugin.java:63)
    at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
    at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:63)
    at org.gradle.configuration.DefaultInitScriptProcessor.process(DefaultInitScriptProcessor.java:49)
    at org.gradle.initialization.InitScriptHandler$1.run(InitScriptHandler.java:55)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.initialization.InitScriptHandler.executeScripts(InitScriptHandler.java:49)
    at org.gradle.initialization.DefaultGradleLauncher$LoadBuild.run(DefaultGradleLauncher.java:275)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.initialization.DefaultGradleLauncher.loadSettings(DefaultGradleLauncher.java:202)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:147)
    at org.gradle.initialization.DefaultGradleLauncher.getConfiguredBuild(DefaultGradleLauncher.java:129)
    at org.gradle.internal.invocation.GradleBuildController$2.execute(GradleBuildController.java:67)
    at org.gradle.internal.invocation.GradleBuildController$2.execute(GradleBuildController.java:64)
    at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:82)
    at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:75)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:183)
    at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
    at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:75)
    at org.gradle.internal.invocation.GradleBuildController.configure(GradleBuildController.java:64)
    at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:62)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:58)
    at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
    at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:49)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:46)
    at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:78)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:46)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:59)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:36)
    at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
    at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:67)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:26)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:34)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:74)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:72)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:72)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:62)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:81)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:36)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:50)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:295)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
    Caused by: java.lang.NoClassDefFoundError: org/gradle/internal/impldep/com/google/common/collect/Lists
    at org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder.(ExtraModelBuilder.java:56)
    at org.jetbrains.plugins.gradle.tooling.internal.ExtraModelBuilder.(ExtraModelBuilder.java:50)
    at RegistryProcessor.(/private/var/folders/54/3v4ns1x96dbb0kk291hjm96c0000gr/T/ijinit.gradle:41)
    at JetGradlePlugin.apply(/private/var/folders/54/3v4ns1x96dbb0kk291hjm96c0000gr/T/ijinit.gradle:18)
    at JetGradlePlugin.apply(/private/var/folders/54/3v4ns1x96dbb0kk291hjm96c0000gr/T/ijinit.gradle)
    at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:42)
    at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:177)
    at org.gradle.api.internal.plugins.DefaultPluginManager.access$300(DefaultPluginManager.java:51)
    at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:267)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:402)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:394)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:92)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
    at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:155)
    at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:152)
    at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:48)
    at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:152)
    at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:137)
    at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:130)
    at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyPlugin(DefaultObjectConfigurationAction.java:114)
    at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$100(DefaultObjectConfigurationAction.java:38)
    at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$2.run(DefaultObjectConfigurationAction.java:77)
    at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:143)
    at org.gradle.groovy.scripts.DefaultScript.apply(DefaultScript.java:139)
    at org.gradle.api.Script$apply.callCurrent(Unknown Source)
    at ijinit_dwlyhb4ru5ymi7s7k60awysyj.run(/private/var/folders/54/3v4ns1x96dbb0kk291hjm96c0000gr/T/ijinit.gradle:14)
    at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:90)
    ... 110 more

  • Get more help at https://help.gradle.org

CONFIGURE FAILED in 0s

Thanks,
Ozan

Can't find DocumentScanActivity

Hi, I want to use this library for a Test project. I'm using version 1.5.1. Here my gradle dependencies:

image

Follow the tutorial. It says
image

but when I want to extends my Activity from DocumentScannerActivity (or DocumentScanActivity. I found in the library), Android Studio does not recognize it.

image

Please, help me. Thank you!

App crashed while setting bitmap

I am getting the bitmap correctly but when I setImage to documentScanner the app crashed. And the error is NullPointerException

Points go out of screen in some cases

Please check the image attached .... points go out out bound .... is there a way to atlas keep the points inside the screen so that user can adjust it

Screenshot 2020-06-26 at 11 05 38 AM

APK Size is above 60 MB?

Hello
When i use your library for detecting edges apk size is above 60MB due to openCV so how to reduce it nearly 35-40MB?
Any solution?

Points are not showing

Getting error libEGL: call to OpenGL ES API with no current context (logged once per thread)

1611157357427

Cannot run when i change the package name.

Hi sir,

Can you tell me how to execute with different package name. If you tell me the procedure i will be very thanful.
Because i am new to android. Kindly help me to solve this problem.

io.reactivex.exceptions.OnErrorNotImplementedException: Hardware bitmaps are always immutable

io.reactivex.exceptions.OnErrorNotImplementedException: Hardware bitmaps are always immutable
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704)
at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701)
at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:276)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172)
at io.reactivex.internal.operators.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:252)
at io.reactivex.android.schedulers.HandlerScheduler$ScheduledRunnable.run(HandlerScheduler.java:119)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6762)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.IllegalArgumentException: Hardware bitmaps are always immutable
at android.graphics.Bitmap.copy(Bitmap.java:659)
at com.labters.documentscanner.base.DocumentScanActivity.setImageRotation(DocumentScanActivity.java:64)
at com.labters.documentscanner.base.DocumentScanActivity.lambda$startCropping$0$DocumentScanActivity(DocumentScanActivity.java:93)
at com.labters.documentscanner.base.-$$Lambda$DocumentScanActivity$syQvfFNgdVcexd14QWj5Z9g7Jyc.call(Unknown Source:2)
at io.reactivex.internal.operators.observable.ObservableFromCallable.subscribeActual(ObservableFromCallable.java:42)
at io.reactivex.Observable.subscribe(Observable.java:12030)
at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)
at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)

FATAL EXCEPTION: RxCachedThreadScheduler-1

Hi there trying to implement this library into our Android App but it keeps crashing when we try and open the ImageCropActivity.

Our Android App specs:
compileSdkVersion 30
minSdkVersion 21
targetSdkVersion 30
multiDexEnabled true

Kotlin 1.3.50
BuildToolsVersion 29.x
openCVLibrary3412 (Works since we use it for other features in the app)

The actual error message.

E/AndroidRuntime: FATAL EXCEPTION: RxCachedThreadScheduler-1
    Process: com.avochoc.liquimoly, PID: 16205
    io.reactivex.exceptions.UndeliverableException: java.lang.UnsatisfiedLinkError: No implementation found for void org.opencv.imgproc.Imgproc.resize_3(long, long, double, double) (tried Java_org_opencv_imgproc_Imgproc_resize_13 and Java_org_opencv_imgproc_Imgproc_resize_13__JJDD)
        at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:69)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.lang.UnsatisfiedLinkError: No implementation found for void org.opencv.imgproc.Imgproc.resize_3(long, long, double, double) (tried Java_org_opencv_imgproc_Imgproc_resize_13 and Java_org_opencv_imgproc_Imgproc_resize_13__JJDD)
        at org.opencv.imgproc.Imgproc.resize_3(Native Method)
        at org.opencv.imgproc.Imgproc.resize(Imgproc.java:8627)
        at com.labters.documentscanner.libraries.NativeClass.getPoint(NativeClass.java:68)
        at com.labters.documentscanner.base.DocumentScanActivity.setImageRotation(DocumentScanActivity.java:66)
        at com.labters.documentscanner.base.DocumentScanActivity.lambda$startCropping$0$DocumentScanActivity(DocumentScanActivity.java:93)
        at com.labters.documentscanner.base.-$$Lambda$DocumentScanActivity$syQvfFNgdVcexd14QWj5Z9g7Jyc.call(Unknown Source:2)
        at io.reactivex.internal.operators.observable.ObservableFromCallable.subscribeActual(ObservableFromCallable.java:42)
        at io.reactivex.Observable.subscribe(Observable.java:12030)
        at io.reactivex.internal.operators.observable.ObservableSubscribeOn$SubscribeTask.run(ObservableSubscribeOn.java:96)
        at io.reactivex.Scheduler$DisposeTask.run(Scheduler.java:579)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
        at java.lang.Thread.run(Thread.java:764) 

It rotate Image after taking from gallery, Also It increase my App Size by 330 MB

How can I prevent Image from rotation. I know there is function
private suspend fun setImageRotation() { var tempBitmap = selectedImage.copy(selectedImage.config, true) for (i in 1..4) { val point2f = nativeClass.getPoint(tempBitmap) if (point2f == null) { tempBitmap = rotateBitmap(tempBitmap, (90 * i).toFloat()).first() } else { selectedImage = tempBitmap.copy(selectedImage.config, true) break } } }

But I don't know what specific reason for using that. 
Also it increased my app size by 330 MB

NullPointerException after Image Capture

Below is the Error:
" java.lang.RuntimeException: Unable to start activity ComponentInfo{com.labters.documentscannerandroid/com.labters.documentscannerandroid.ImageCropActivity}: java.lang.NullPointerException: contentResolver!!.openIn…odeStream(this)
} must not be null ".
The application works fine when I select the image from the gallery. But when I use camera to capture, the above error comes up in the console.
is this a known issue?, can anyone help me resolve this?
Thanks

Cropping activity stops, when rotate the large photo (12mp)

I have a problem with a rotation the large photo (12mp), when I try to rotate it, cropping activity was stopping and application return to the previous activity. When I use a not large photo, for example screenshot, all cropping without problems. This problem is also in your sample application.

Rebuild .so Lib

I modify something on opencv source code, and i want to rebuild .so file
how to do that?
Thanks!

No scanning feature but only cropping?!

I have built this application as is without adding the lines you mentioned in the readme.md and it worked.
The problem is the application has only the cropping option and there is no scanning feature like in CamScanner.

Update 1.5 Has ScannerConstants missing

I've managed to install this library correctly, both using 1.4 and 1.5

1.4 uses the following namespace:

import team.clevel.documentscanner.ImageCropActivity;
import team.clevel.documentscanner.helpers.ScannerConstants;

while 1.5 uses:

import com.labters.documentscanner.ImageCropActivity;
import com.labters.documentscanner.helpers.ScannerConstants;

But, for some reason, in the version 1.5, the Helpers namespace has NOTHING in it, or at least nothing accessible to the public.
Comparison here:
image

1.4:
image

I don't know what went wrong during the version being published, but this problem basically doesn't allow one to use it, as you need to access the ScannerConstants class to get/set the image.

Invert Color not working

Hello. there's a problem with invert color function, when I convert for gray scale and then crop the image and the result showing colorful image (original image). Gray scale not applied at cropped image.

Need Guidance, please

Sir I also want to make such app, could you please tell how should I proceed?
Is there any tutorial for for it?
Please help sir

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.