69

我想使用 Android Studio 使用 Gradle 构建工具开发应用程序。我无法在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?

4

13 回答 13

136

您可以在 Android Studio 中轻松完成此操作。

按照以下步骤在您的项目中添加 Open CV 作为库。

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

  2. 转到您拥有 SDK "\OpenCV-2.4.8-android-sdk\sdk" 的位置,您将找到该java文件夹​​,将其重命名为opencv.

  3. 现在将完整的 opencv 目录从 SDK 复制到您刚刚创建的库文件夹中。

  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. 将您的项目与 Gradle 同步,它应该如下所示

    屏幕 1

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

    在此处输入图像描述

  8. 选择Module dependency。它将打开一个对话框,其中包含可供选择的模块列表;选择“:库:opencv”。

    在此处输入图像描述

  9. jniLibs在该位置创建一个文件夹,并从 OpenCV SDK/app/src/main/中复制所有带有 *.so 文件(armeabi、armeabi-v7a、mips、x86)的文件夹。jniLibs

    在此处输入图像描述

  10. 单击确定。现在一切都完成了,去享受 OpenCV 吧。

于 2014-03-15T17:29:38.153 回答
32

由于 OpenCV 的集成是一项艰巨的工作,因此我们将其预先打包并通过 JCenter 在此处发布:https ://github.com/quickbirdstudios/opencv-android

只需将其包含在模块的 build.gradle 依赖项部分

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

这在您项目的 build.gradle 存储库部分

repositories {
  jcenter()
}

gradle 导入后不会出现 lint 错误,但不要忘记在 MainActivity 中像这样初始化 OpenCV 库

public class MainActivity extends Activity {
    static {
        if (!OpenCVLoader.initDebug())
            Log.d("ERROR", "Unable to load OpenCV");
        else
            Log.d("SUCCESS", "OpenCV loaded");
    }
...
...
...
...
于 2018-05-30T13:10:19.187 回答
25

根据 OpenCV docs( 1 ),以下使用OpenCV 管理器的步骤是使用 OpenCV 进行生产运行的推荐方法。但是,OpenCV manager( 2 ) 是从 Google Play 商店额外安装的。因此,如果您更喜欢自包含的 apk(不使用 OpenCV 管理器)或目前处于开发/测试阶段,我建议在https://stackoverflow.com/a/27421494/1180117上回答。

在带有 OpenCV 管理器的 Android Studio 中使用 OpenCV 的推荐步骤。

  1. 解压从 OpenCV.org 下载的 OpenCV Android sdk( 3 )
  2. File -> Import Module中,选择sdk/java解压缩的 opencv 存档中的文件夹。
  3. build.gradle在导入的 OpenCV 模块下更新以更新 4 个字段以匹配您项目的a 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 上,请使用apk下载的 OpenCV sdk archive 下的文件夹中存在的适当 OpenCV 管理器 apk。

优点

  • Apk 大小减少了大约 40 MB(也考虑升级)。
  • OpenCV 管理器为您的硬件安装优化的二进制文件,这有助于提高速度。
  • 升级到 OpenCV 管理器可能会使您的应用免于 OpenCV 中的错误。
  • 不同的应用程序可以共享相同的 OpenCV 库。

缺点

  • 最终用户体验 - 可能不喜欢来自您的应用程序的安装提示。
于 2014-12-08T11:07:24.690 回答
9

如果您不想使用 JavaCV,这对我有用...

第 1 步 - 下载资源

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

第 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 文件夹并将该压缩文件重命名为whatever-v7a.jar。

复制此 .jar 文件并将其放置在您的项目中

Project Root -> Your Project -> libs

将此行添加到您的项目 build.gradle 的依赖项部分

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

当您现在编译时,您可能会看到您的 .apk 大约大 4mb。

(如果您也想支持 ARMv6,请重复“armeabi”,可能不再需要了。)

第 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']
        }
    }
}

在您的 Project Root 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()) {}

我知道这是否有点骇人听闻,但我想我还是会发布它。

于 2013-12-15T22:29:00.040 回答
7

我发布了一篇关于如何使用 Android Studio 和 Gradle 构建包含 OpenCV 的 Android NDK 应用程序的新文章。更多信息可以看这里,我总结了两种方法:

(1)ndk-build在 Gradle 任务内运行

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

更多信息可以在这里看到

于 2014-10-22T14:24:02.727 回答
7
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
    }
}

这对我有用:)

于 2013-07-22T00:48:12.727 回答
5

它也适用于 Android Studio 1.2 + OpenCV-2.4.11-android-sdk (.zip)。

只需执行以下操作:

1)按照以“您可以在 Android Studio 中非常轻松地完成此操作。按照以下步骤将 OpenCV 作为库添加到您的项目中”开头的答案。由 TGMCians 提供。

2)在<yourAppDir>\libraries\opencv您新创建的文件夹中修改build.gradle(TGMCians'答案中的第4步,适应 OpenCV2.4.11-android-sdk 并使用 gradle 1.1.0):

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(TGMCians 回答中的第 9 步)。

享受,如果这有帮助,请给予积极的声誉。我需要 50 来直接回答答案(左 19):)

于 2015-05-13T12:28:15.607 回答
4

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 {
}
于 2018-03-06T08:40:08.200 回答
3

以下是在 Android Studio 1.2 中使用 OpenCV 所需的步骤:

  • 下载OpenCV并解压存档
  • 在 Android Studio 中打开您的应用项目
  • 转到文件 -> 新建 -> 导入模块...
  • sdk/java在之前解压的目录中选择
  • 模块名称设置为opencv
  • 下一步然后完成
  • 在导入的 OpenCV 模块下打开 build.gradle 并更新compileSdkVersionbuildToolsVersion您机器上的版本
  • 添加compile project(':opencv')到您的应用程序 build.gradle

    dependencies {
        ...
        compile project(':opencv')
    }
    
  • 使用 Gradle 文件按同步项目

于 2015-05-11T08:26:43.343 回答
2

我已将 Java 项目从 OpenCV SDK 导入到 Android Studio gradle 项目中,并在https://github.com/ctodobom/OpenCV-3.1.0-Android上提供

build.gradle借助 jitpack.io 服务,您可以将其包含在您的项目中,只需将两行添加到文件中。

于 2016-02-20T03:12:38.667 回答
1

OpenCV,Android Studio 1.4.1,gradle-experimental 插件 0.2.1

其他答案都没有帮助我。这对我有用。我正在使用 opencv 中的 tutorial-1 示例,但我将在我的项目中使用 NDK,因此我使用的是gradle-experimental插件,它的结构与 gradle 插件不同。

安装Android studio,通过Android SDK Manager安装Android NDK,下载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 Manager 安装其他版本)。如果您没有 23.0.2,请更改 buildToolsVersion。

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 包装器。Gradle 需要一个干净的目录来执行此操作。

pushd $(mktemp -d)

gradle wrapper --gradle-version 2.5

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

你现在应该准备好了。您现在可以使用 Android Studio 浏览到此目录并打开项目。

使用以下命令在命令行上构建教程:

./gradlew assembleDebug

它应该构建您的 apk,将其放入 ./build/outputs/apk

于 2015-11-14T08:24:58.657 回答
1

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"/>
于 2015-07-22T03:18:54.000 回答
0

看这个视频,解决我在 android studio 中实现 opencv 的问题,今天 https://www.youtube.com/watch?v=psoeNfFAKL8

于 2021-11-30T04:15:16.310 回答