简体   繁体   English

如何在Android应用中加载OpenCV Manager软件包?

[英]How do I load the OpenCV Manager package in my Android app?

I am working on Android app which uses OpenCV in Android Studio. 我正在使用在Android Studio中使用OpenCV的Android应用程序。 My app compiles and executes but when starting the activity which loads OpenCV, I am getting this alert saying 我的应用程序编译并执行,但是在启动加载OpenCV的活动时,我收到此警告

"OpenCV manager package not found. try to install it?" “找不到OpenCV管理器软件包。尝试安装它吗?”

I click yes, and the Google Play Store app is opened but it can not find the OpenCV Manager. 我单击“是”,并且Google Play商店应用已打开,但找不到OpenCV管理器。 Seems the app is not available anymore in Google Play. 似乎该应用程序在Google Play中不再可用。 However, I would prefer to have the OpenCV library bundled with my app. 但是,我希望将OpenCV库与我的应用程序捆绑在一起。 Any help is appreciated. 任何帮助表示赞赏。 Thanks. 谢谢。

Here is my setup: settings.gradle: 这是我的设置:settings.gradle:

include 'Application', ':libhrdataglasses', ':opencv401'

build.gradle for Application: build.gradle的应用程序:

apply plugin: 'com.android.application'
buildscript {
    repositories {
        jcenter()
        google()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}


repositories {
    jcenter()
    google()
}

dependencies {
    implementation 'com.android.support:support-v4:27.0.2'
    implementation 'com.android.support:support-v13:27.0.2'
    implementation 'com.android.support:cardview-v7:27.0.2'
    implementation 'com.android.support:appcompat-v7:27.0.2'
    implementation project(':libhrdataglasses')
    implementation 'android.arch.lifecycle:extensions:1.1.1'
    implementation project(':opencv401')
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
}

// The sample build uses multiple directories to
// keep boilerplate and common code separate from
// the main sample code.
List<String> dirs = [
        'main',     // main sample code; look here for the interesting stuff.
        'common',   // components that are reused by multiple samples
        'template'] // boilerplate code that is generated by the sample template process

android {
    compileSdkVersion 27

    buildToolsVersion '28.0.3'

    defaultConfig {
        minSdkVersion 26
        targetSdkVersion 27
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    sourceSets {
        main {
            dirs.each { dir ->
                java.srcDirs "src/${dir}/java"
                res.srcDirs "src/${dir}/res"
            }
        }
        androidTest.setRoot('tests')
        androidTest.java.srcDirs = ['tests/src']

    }

}

build.gradle for opencv401 opencv401的build.gradle

    apply plugin: 'com.android.library'

android {
    compileSdkVersion 26
    //buildToolsVersion "x.y.z" // not needed since com.android.tools.build:gradle:3.0.0

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 26
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['../../jni']
            java.srcDirs = ['src']  // TODO Use original files instead of copied into build directory
            aidl.srcDirs = ['src']
            res.srcDirs = ['../opencv401/res']
            manifest.srcFile 'AndroidManifest.xml'
        }
    }
}

dependencies {
implementation 'com.android.support:appcompat-v7:26.1.0'
}

And in my Activity: 在我的活动中:

        @Override
    protected void onResume() {
        super.onResume();
        if (!OpenCVLoader.initDebug()) {
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION, this, mOpenCVLoaderCallback);
    } else {

    mOpenCVLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }

    private BaseLoaderCallback mOpenCVLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS: {
                    Log.i(TAG, "OpenCV loaded successfully");
                    mProcessButton.setVisibility(View.VISIBLE);
                } break;
                default: {
                    super.onManagerConnected(status);
                } break;
            }
        }
    };
1. Include opencv library in your app by downloading opencv sdk and adding this as dependency in your app. 
    https://docs.opencv.org/2.4/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html#application-development-with-static-initialization


2. If you want to use opencv manager then do adb install by getting from this link.

https://docs.opencv.org/2.4/platforms/android/service/doc/UseCases.html#how-to-select-the-proper-version-of-opencv-manager

3. Check the sample code 

https://github.com/opencv/opencv/tree/master/samples/android

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM