如何使用OpenCV的使用摇篮?如何使用OpenCV的使用摇篮?(How to use opencv

2019-05-08 16:55发布

我想使用Android Studio开发使用摇篮构建工具的应用程序。 我不能插入OpenCV的回购和库中build.gradle 。 我.gradle文件是象下面这样:

buildscript {
    repositories {
        mavenCentral()

    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
}

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
}

android {
    compileSdkVersion 17
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 16
    }
}

如何添加OpenCV的在我的项目?

Answer 1:

您可以在Android Studio中做到这一点很容易。

按照下面的步骤,在您的项目库中添加打开CV。

  1. 创建libraries项目主目录下的文件夹中。 例如,如果你的项目是OpenCVExamples ,您将创建一个OpenCVExamples/libraries文件夹。

  2. 转到您有SDK的位置“\ OpenCV的-2.4.8-Android的SDK \ SDK”在这里你会找到java文件夹,重命名为opencv

  3. 现在从SDK复制完整的OpenCV的目录文件夹到你刚刚创建的库。

  4. 现在创建build.gradle在文件opencv包含以下内容目录

     apply plugin: 'android-library' buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.9.+' } } android { compileSdkVersion 19 buildToolsVersion "19.0.1" defaultConfig { minSdkVersion 8 targetSdkVersion 19 versionCode 2480 versionName "2.4.8" } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] res.srcDirs = ['res'] aidl.srcDirs = ['src'] } } } 
  5. 编辑您的settings.gradle文件在你的应用程序的主目录,并添加此行:

     include ':libraries:opencv' 
  6. 同步与摇篮您的项目,它应该是这样的

  7. 右键单击您的项目,然后单击Open Module Settings ,然后选择左侧列表模块,单击您的应用程序的模块上,单击依存关系选项卡,并单击+按钮添加新的模块依赖。

  8. 选择Module dependency 。 这将打开与模块可供选择的列表的对话框; 选择“:图书馆:OpenCV的”。

  9. 创建jniLibs在文件夹/app/src/main/位置,并与*复制所有文件夹中的.so文件(armeabi,armeabi-V7A,MIPS,X86) jniLibs来自OpenCV的SDK。

  10. 单击确定。 现在一切都做了,去和OpenCV的享受。



Answer 2:

按照OpenCV的文档( 1 ),下面使用的OpenCV管理器被使用OpenCV进行生产运行的推荐的方法步骤。 但是,OpenCV的经理( 2 )是一个额外的由谷歌安装Play商店。 所以,如果你喜欢一个自包含的apk(不使用OpenCV的经理)或正在开发/测试阶段,我建议在回答https://stackoverflow.com/a/27421494/1180117 。

推荐步骤Android Studio中使用的OpenCV与OpenCV的经理。

  1. OpenCV的解压Android SDK中从OpenCV.org下载( 3 )
  2. File -> Import Module ,选择sdk/java解压后OpenCV的存档文件夹。
  3. 更新build.gradle项下的进口OpenCV的模块更新4场,以配合您的项目build.gradle一)compileSdkVersion B)buildToolsVersion C)的minSdkVersion和4)targetSdkVersion。
  4. 通过添加模块依赖Application -> Module Settings ,并选择Dependencies标签。 点击+图标在底部(或右),选择Module Dependency ,选择导入的OpenCV的模块。

作为最后一步,在你的Activity类,下面添加片段。

    public class SampleJava extends Activity  {

        private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch(status) {
                case LoaderCallbackInterface.SUCCESS:
                    Log.i(TAG,"OpenCV Manager Connected");
                    //from now onwards, you can use OpenCV API
                    Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
                    break;
                case LoaderCallbackInterface.INIT_FAILED:
                    Log.i(TAG,"Init Failed");
                    break;
                case LoaderCallbackInterface.INSTALL_CANCELED:
                    Log.i(TAG,"Install Cancelled");
                    break;
                case LoaderCallbackInterface.INCOMPATIBLE_MANAGER_VERSION:
                    Log.i(TAG,"Incompatible Version");
                    break;
                case LoaderCallbackInterface.MARKET_ERROR:
                    Log.i(TAG,"Market Error");
                    break;
                default:
                    Log.i(TAG,"OpenCV Manager Install");
                    super.onManagerConnected(status);
                    break;
            }
        }
    };

    @Override
    protected void onResume() {
        super.onResume();
        //initialize OpenCV manager
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
    }
}

注意: 您收到的成功回调后,您只能做OpenCV的电话onManagerConnected方法 。 在运行过程中,系统会提示您从Play商店安装OpenCV的经理,如果尚未安装。 在开发过程中,如果你没有访问Play商店或在emualtor,使用适当的OpenCV的经理APK目前在apk文件夹下下载OpenCV的SDK存档。

优点

  • 约40 MB的APK大小减少(考虑升级太)。
  • OpenCV的经理安装你的硬件,可以帮助速度优化的二进制代码。
  • 升级到OpenCV的经理可能从OpenCV的错误保存您的应用程序。
  • 不同的应用程序可以共享相同的OpenCV库。

缺点

  • 最终用户体验 - 可能不喜欢与您的应用程序安装提示。


Answer 3:

如果你不想使用此JavaCV工作对我来说...

第1步 - 下载资源

从下载OpenCV的Android SDK中http://opencv.org/downloads.html

第2步 - 复​​制OpenCV的二进制文件到您的APK

复制libopencv_info.so&libopencv_java.so从

OpenCV-2.?.?-android-sdk -> sdk -> native -> libs -> armeabi-v7a

Project Root -> Your Project -> lib - > armeabi-v7a

邮编lib文件夹并重新命名拉链到任何-v7a.jar。

复制此.jar文件,在这里将其放置在您的项目

Project Root -> Your Project -> libs

该行添加到您的项目的build.gradle相关内容部分

compile files('libs/whatever-v7a.jar')

现在,当您编译你可能会看到你的apk文件大约是4MB大。

(重复“armeabi”如果你想支持ARMv6的太多,可能没有必要了。)

第3步 - 添加Java SDK添加到项目

从这里复制java文件夹

OpenCV-2.?.?-android-sdk -> sdk

Project Root -> Your Project -> libs (同一地点你的.jar文件);

(您可以在“Java”作为文件夹名称重命名为“OpenCV的)

在这个新复制的文件夹添加一个典型的build.gradle文件; 我用这个:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}

apply plugin: 'android-library'

repositories {
    mavenCentral();
}

android {
    compileSdkVersion 19
    buildToolsVersion "19"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 19
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
    }
}

在您的项目根settings.gradle文件更改它太像下面这样:

include ':Project Name:libs:OpenCV', ':Project Name'

在你的项目根 - >项目名称 - >相关内容部分的build.gradle文件中加入这一行:

compile project(':Project Name:libs:OpenCV')

第4步 - 在项目中使用的OpenCV

重建,你应该能够导入并开始在项目中使用的OpenCV。

import org.opencv.android.OpenCVLoader;
...
if (!OpenCVLoader.initDebug()) {}

我知道这是否有点黑客,但我想我会反正它张贴。



Answer 4:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.5.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
    maven {
        url 'http://maven2.javacv.googlecode.com/git/'
    }
}

dependencies {
    compile 'com.android.support:support-v4:13.0.+'
    compile 'com.googlecode.javacv:javacv:0.5'
    instrumentTestCompile 'junit:junit:4.4'
}

android {
    compileSdkVersion 14
    buildToolsVersion "17.0.0"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 14
    }
}

这是为我工作:)



Answer 5:

我已经张贴了关于如何建立一个Android NDK应用程序使用Android Studio和摇篮与OpenCV中包括一个新的职位。 更多信息可以看到这里 ,我总结了两种方法:

(1)运行ndk-build摇篮任务中

sourceSets.main.jni.srcDirs = []

task ndkBuild(type: Exec, description: 'Compile JNI source via NDK') {
    ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
    commandLine "$ndkDir/ndk-build",
            'NDK_PROJECT_PATH=build/intermediates/ndk',
            'NDK_LIBS_OUT=src/main/jniLibs',
            'APP_BUILD_SCRIPT=src/main/jni/Android.mk',
            'NDK_APPLICATION_MK=src/main/jni/Application.mk'
}

tasks.withType(JavaCompile) {
    compileTask -> compileTask.dependsOn ndkBuild
}

(2)运行ndk-build与外部工具

参数: NDK_PROJECT_PATH=$ModuleFileDir$/build/intermediates/ndk NDK_LIBS_OUT=$ModuleFileDir$/src/main/jniLibs NDK_APPLICATION_MK=$ModuleFileDir$/src/main/jni/Application.mk APP_BUILD_SCRIPT=$ModuleFileDir$/src/main/jni/Android.mk V=1

更多信息可以看出这里



Answer 6:

由于OpenCV的整合是这样的努力,我们预包装,再通过JCenter它发表在这里: https://github.com/quickbirdstudios/opencv-android

只是这包括在你的模块的build.gradle依赖节

dependencies {
  implementation 'com.quickbirdstudios:opencv:3.4.1'
}

这在项目的存储库的build.gradle节

repositories {
  jcenter()
}

你不会得到皮棉的gradle错误导入后,但不要忘了初始化OpenCV库这样在MainActivity

public class MainActivity extends Activity {
    static {
        if (!OpenCVLoader.initDebug())
            Log.d("ERROR", "Unable to load OpenCV");
        else
            Log.d("SUCCESS", "OpenCV loaded");
    }
...
...
...
...


Answer 7:

它的工作原理与Android 1.2工作室的OpenCV +-2.4.11-Android的SDK文件(.zip),太。

只要做到以下几点:

1)按照与开头的回答:“你可以在Android Studio中做到这一点很容易。按照以下步骤在您的项目库中添加OpenCV的。” 通过TGMCians。

2)在修改<yourAppDir>\libraries\opencv文件夹中新创建build.gradle到(步骤4中TGMCians'的回答, 适于OpenCV2.4.11-Android的SDK和使用1.1.0的gradle):

apply plugin: 'android-library'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.0'
    }
}

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 21
        versionCode 2411
        versionName "2.4.11"
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            aidl.srcDirs = ['src']
        }
    }
}

3)* .so文件是位于目录"armeabi", "armeabi-v7a", "mips", "x86"可下(默认OpenCV的定位)发现..\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\native\libs (步骤9在TGMCians'回答)。

享受,如果这有助于,请给予肯定的评价。 我需要50直接回答的答案(19人):)



Answer 8:

这些都是使用的OpenCV采用Android 1.2工作室的必要步骤:

  • 下载的OpenCV和提取归档
  • 打开Android Studio中的应用程式专案
  • 转到文件- >新建- >导入模块...
  • 选择sdk/java目录,你之前提取
  • 设置模块名称 opencv
  • Next,然后单击Finish
  • 在进口OpenCV的模块和更新开放的build.gradle compileSdkVersionbuildToolsVersion到版本中,你有你的机器上
  • 添加compile project(':opencv')到你的应用的build.gradle

     dependencies { ... compile project(':opencv') } 
  • 同步同项目文件摇篮



Answer 9:

我已经导入来自OpenCV的SDK中的Java项目到Android Studio中gradle这个项目,并使其可在https://github.com/ctodobom/OpenCV-3.1.0-Android

您可以包括它在你的项目只增加两行build.gradle文件感谢jitpack.io服务。



Answer 10:

OpenCV的Android SDK有一些有用的注释的例子gradle.build文件: https://github.com/opencv/opencv/blob/master/modules/java/android_sdk/build.gradle.in

//
// Notes about integration OpenCV into existed Android Studio application project are below (application 'app' module should exist).
//
// This file is located in <OpenCV-android-sdk>/sdk directory (near 'etc', 'java', 'native' subdirectories)
//
// Add module into Android Studio application project:
//
// - Android Studio way:
//   (will copy almost all OpenCV Android SDK into your project, ~200Mb)
//
//   Import module: Menu -> "File" -> "New" -> "Module" -> "Import Gradle project":
//   Source directory: select this "sdk" directory
//   Module name: ":opencv"
//
// - or attach library module from OpenCV Android SDK
//   (without copying into application project directory, allow to share the same module between projects)
//
//   Edit "settings.gradle" and add these lines:
//
//   def opencvsdk='<path_to_opencv_android_sdk_rootdir>'
//   // You can put declaration above into gradle.properties file instead (including file in HOME directory),
//   // but without 'def' and apostrophe symbols ('): opencvsdk=<path_to_opencv_android_sdk_rootdir>
//   include ':opencv'
//   project(':opencv').projectDir = new File(opencvsdk + '/sdk')
//
//
//
// Add dependency into application module:
//
// - Android Studio way:
//   "Open Module Settings" (F4) -> "Dependencies" tab
//
// - or add "project(':opencv')" dependency into app/build.gradle:
//
//   dependencies {
//       implementation fileTree(dir: 'libs', include: ['*.jar'])
//       ...
//       implementation project(':opencv')
//   }
//
//
//
// Load OpenCV native library before using:
//
// - avoid using of "OpenCVLoader.initAsync()" approach - it is deprecated
//   It may load library with different version (from OpenCV Android Manager, which is installed separatelly on device)
//
// - use "System.loadLibrary("opencv_java3")" or "OpenCVLoader.initDebug()"
//   TODO: Add accurate API to load OpenCV native library
//
//
//
// Native C++ support (necessary to use OpenCV in native code of application only):
//
// - Use find_package() in app/CMakeLists.txt:
//
//   find_package(OpenCV 3.4 REQUIRED java)
//   ...
//   target_link_libraries(native-lib ${OpenCV_LIBRARIES})
//
// - Add "OpenCV_DIR" and enable C++ exceptions/RTTI support via app/build.gradle
//   Documentation about CMake options: https://developer.android.com/ndk/guides/cmake.html
//
//   defaultConfig {
//       ...
//       externalNativeBuild {
//           cmake {
//               cppFlags "-std=c++11 -frtti -fexceptions"
//               arguments "-DOpenCV_DIR=" + opencvsdk + "/sdk/native/jni" // , "-DANDROID_ARM_NEON=TRUE"
//           }
//       }
//   }
//
// - (optional) Limit/filter ABIs to build ('android' scope of 'app/build.gradle'):
//   Useful information: https://developer.android.com/studio/build/gradle-tips.html (Configure separate APKs per ABI)
//
//   splits {
//       abi {
//           enable true
//           reset()
//           include 'armeabi-v7a' // , 'x86', 'x86_64', 'arm64-v8a'
//           universalApk false
//       }
//   }
//

apply plugin: 'com.android.library'

println "OpenCV: " + project.buildscript.sourceFile

android {
    compileSdkVersion 27
    //buildToolsVersion "27.0.3" // not needed since com.android.tools.build:gradle:3.0.0

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
    }

    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 = ['native/libs']
            java.srcDirs = ['java/src']
            aidl.srcDirs = ['java/src']
            res.srcDirs = ['java/res']
            manifest.srcFile 'java/AndroidManifest.xml'
        }
    }
}

dependencies {
}


Answer 11:

下面的权限和功能是必需在AndroidManifest.xml文件中没有它,你将得到下面的对话框

“看来,您的设备不支持摄像头(或被锁定)。应用程序将被关闭”

  <uses-permission android:name="android.permission.CAMERA"/>

    <uses-feature android:name="android.hardware.camera" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.front" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>


Answer 12:

OpenCV的,Android的工作室1.4.1,gradle这个实验性的插件0.2.1

其他答案都不帮我。 下面是我工作。 我使用的是从OpenCV的教程-1样,但我会在我的项目中使用NDK的,所以我用做gradle这个实验性插件,它具有不同的结构比gradle这个插件。

Android的工作室应安装了Android NDK应通过在Android SDK管理器进行安装和OpenCV的Android SDK中 ,应下载并解压。

这是在bash脚本的块,以保持其紧凑而完整。 这也是所有在命令行上,因为上的大问题,我是在-IDE说明已经过时的IDE演变。

首先设置OpenCV的SDK的根目录的位置。

export OPENCV_SDK=/home/user/wip/OpenCV-2.4.11-android-sdk
cd $OPENCV_SDK

您创建的gradle构建文件...

首先OpenCV库

cat > $OPENCV_SDK/sdk/java/build.gradle <<'==='


apply plugin: 'com.android.model.library'
model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"

        defaultConfig.with {
            minSdkVersion.apiLevel = 8
            targetSdkVersion.apiLevel = 23
        }
    }

    android.buildTypes {
        release {
            minifyEnabled = false
        }
        debug{
            minifyEnabled = false
        }
    }
   android.sources {
       main.manifest.source.srcDirs +=  "."
       main.res.source.srcDirs +=  "res"
       main.aidl.source.srcDirs +=  "src"
       main.java.source.srcDirs +=  "src"
   }

}


===

然后告诉教程什么样标记图书馆作为和在哪里可以找到它。

cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/settings.gradle <<'==='


include ':openCVLibrary2411'
project(':openCVLibrary2411').projectDir = new File('../../sdk/java')


===

创建教程构建文件。

cat > $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle <<'==='


buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle-experimental:0.2.1'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

apply plugin: 'com.android.model.application'

model {
    android {
        compileSdkVersion = 23
        buildToolsVersion = "23.0.2"

        defaultConfig.with {
            applicationId = "org.opencv.samples.tutorial1"
            minSdkVersion.apiLevel = 8
            targetSdkVersion.apiLevel = 23
        }
    }

    android.sources {
       main.manifest.source.srcDirs +=  "."
       main.res.source.srcDirs +=  "res"
       main.aidl.source.srcDirs +=  "src"
       main.java.source.srcDirs +=  "src"
    } 

    android.buildTypes {
        release {
            minifyEnabled = false
            proguardFiles += file('proguard-rules.pro')
        }
        debug {
             minifyEnabled = false
        }
    }
}

dependencies {
    compile project(':openCVLibrary2411')
}


===

你的编译工具版本需要正确设置。 这里有一个简单的方法来查看已安装的。 (您可以通过安装在Android SDK管理器等版本)。 更改buildToolsVersion如果你没有做23.0.2。

echo "Your buildToolsVersion is one of: "
ls $ANDROID_HOME/build-tools

在第一行的环境变量更改为版本号

REP=23.0.2 #CHANGE ME
sed -i.bak s/23\.0\.2/${REP}/g $OPENCV_SDK/sdk/java/build.gradle
sed -i.bak s/23\.0\.2/${REP}/g $OPENCV_SDK/samples/tutorial-1-camerapreview/build.gradle

最后,树立正确的gradle这个包装。 摇篮需要一个干净的目录来做到这一点。

pushd $(mktemp -d)

gradle wrapper --gradle-version 2.5

mv -f gradle* $OPENCV_SDK/samples/tutorial-1-camerapreview
popd

你现在应该所有设置。 现在,您可以浏览到该目录与Android Studio并打开了该项目。

建立与下面的命令在命令行上tutoral:

./gradlew assembleDebug

应该建立自己的APK,把它在./build/outputs/apk



文章来源: How to use opencv in using Gradle?