OpenCV Android以及扩展模块opencv_contrib的编译

OpenCV和OpenCV_contrib模块4.5.x版本的编译

  • 环境准备:

Ubuntu 16.04.1,环境变量:

export ANDROID_HOME=~/work/android-sdk
export ANDROID_NDK_HOME=~/work/android-sdk/ndk/20.0.5594570

export JAVA_HOME=~/software/jdk1.8.0_171

cmake 版本,这里直接使用的是SDK中的cmake:

export PATH=~/work/android-sdk/cmake/3.6.4111459/bin:$JAVA_HOME/bin:$PATH

注意

这里SDK中不能有多个cmake版本,否则可能会出现下面的莫名其妙的错误。原因就是我在SDK目录中下载了一个更新的cmake版本3.18.1,这个问题出现后删掉新版本的cmake就可以了。

SDK initialized in 0 ms

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':face-detection'.
> Invalid revision: 3.18.1-g262b901

* Try:
Run with --stacktrace option to get the stack trace. Run with --debug option to get more log output. Run with --scan to get full insights.

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

在cmake配置完毕时会打印当前的配置信息,注意CMake:后面所示的版本号就是CMake build tool后面的版本。

-- General configuration for OpenCV 4.5.5 =====================================
--   Version control:               4.5.5
-- 
--   Extra modules:
--     Location (extra):            /build/master-contrib_pack-contrib-android/opencv_contrib/modules
--     Version control (extra):     4.5.5
-- 
--   Platform:
--     Timestamp:                   2021-12-25T04:26:00Z
--     Host:                        Linux 4.15.0-58-generic x86_64
--     Target:                      Android 1 armv7-a
--     CMake:                       3.6.0-rc2
--     CMake generator:             Ninja
--     CMake build tool:            /opt/android/android-sdk.gradle/cmake/3.6.4111459/bin/ninja
--     Configuration:               Release

将代码分别拉到opencv和opencv_contrib两个目录里,新建一个build目录作为编译用途。

2022-01-07 12:39:06:~/work/ocv  
$ tree -L 1
.
├── build
├── build.txt
├── opencv
└── opencv_contrib

3 directories, 1 file

$ cmake -version
cmake version 3.6.0-rc2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

跳转到build目录执行配置:

cmake -DOPENCV_ENABLE_NONFREE=ON -DBUILD_DOCS=OFF -DBUILD_TESTS=OFF -DANDROID_TOOLCHAIN_NAME=arm-linux-androideabi-4.9  -DWITH_OPENCL=OFF -DBUILD_PERF_TESTS=OFF  -DCMAKE_TOOLCHAIN_FILE=~/work/android-sdk/ndk/20.0.5594570/build/cmake/android.toolchain.cmake -DWITH_CUDA=OFF -DANDROID_NATIVE_API_LEVEL=21 -DANDROID_TOOLCHAIN=clang -DANDROID_STL=c++_static -DANDROID_ABI=armeabi-v7a -DANDROID_ARM_NEON=ON -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ../opencv

之后执行make -j4就可以了。等完全编译成功后执行make install 可在当前build目录生成一个install目录。

  • 使用现成的发布版本

其实我本来就是想编译opencv_contrib扩展模块的,如果官方有发布带扩展模块的SDK,我也不会尝试着自己编译了。中间各种找,后来从官方编译日志上发现了配置编译方法。同时也发现了未发布的带扩展模块的SDK版本。

这是编译带扩展模块的编译历史列表:

Buildbot: master-contrib_pack-contrib-android

OpenCV编译机器人打包发布目录:

https://pullrequest.opencv.org/buildbot/export/opencv_releases/4_x_pack-android/

我从中发现了4.5.5的配置编译历史记录:Buildbot: master-contrib_pack-contrib-android Build #11369

从中可以找到4.5.5的打包版本(这个链接在发布了更新的版本后可能会失效,但是查找新版本的方法同上):Directory listing for /export/opencv_releases/master-contrib_pack-contrib-android/20211225-042541--11369/

4.5.4的配置编译历史记录:Buildbot: master-contrib_pack-contrib-android Build #11357

从上面的编辑记录里也可以看到OpenCV源码库中有一键编译打包Android版本SDK的脚本,具体执行方法:

 python ../opencv/platforms/android/build_sdk.py --ndk_path $ANDROID_NDK_HOME --sdk_path $ANDROID_HOME  --extra_modules_path ../opencv_contrib/modules . ../opencv

Nightly build releases:

https://pullrequest.opencv.org/buildbot/export/opencv_releases/

另外多说一点,在Windows上也可以使用git bash命令行编译,不需要再额外安装MSYS。亲测有效!我的系统是Windows 7。

最后贴个图吧。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要基于 AndroidOpenCV 4.0.1 和 OpenCV Contrib 4.0.1 进行编译,可以按照以下步骤进行: 1. 下载 OpenCV 4.0.1 和 OpenCV Contrib 4.0.1 的源代码: ``` git clone https://github.com/opencv/opencv.git cd opencv git checkout 4.0.1 cd .. git clone https://github.com/opencv/opencv_contrib.git cd opencv_contrib git checkout 4.0.1 ``` 2. 安装 Android NDK 和 Android SDK,并设置相应的环境变量。 3. 在 opencv 目录下创建一个 build 目录,并进入该目录: ``` mkdir build cd build ``` 4. 运行以下命令,生成 OpenCV Android 库: ``` cmake -DANDROID_ABI=armeabi-v7a \ -DANDROID_PLATFORM=android-21 \ -DANDROID_TOOLCHAIN=clang \ -DANDROID_STL=c++_static \ -DWITH_OPENCL=OFF \ -DWITH_IPP=OFF \ -DWITH_TBB=OFF \ -DWITH_MATLAB=OFF \ -DWITH_CUDA=OFF \ -DWITH_GTK=OFF \ -DBUILD_opencv_apps=OFF \ -DBUILD_ANDROID_EXAMPLES=OFF \ -DBUILD_ANDROID_PROJECTS=OFF \ -DBUILD_DOCS=OFF \ -DBUILD_EXAMPLES=OFF \ -DBUILD_PACKAGE=OFF \ -DBUILD_PERF_TESTS=OFF \ -DBUILD_TESTS=OFF \ -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=../../android.toolchain.cmake \ ../ ``` 其中,`ANDROID_ABI` 表示 Android 平台架构,这里设置为 `armeabi-v7a`,表示 ARMv7 架构;`ANDROID_PLATFORM` 表示 Android 平台版本,这里设置为 `android-21`;`ANDROID_TOOLCHAIN` 表示使用的工具链,这里设置为 `clang`;`ANDROID_STL` 表示使用的 C++ 标准库,这里设置为 `c++_static`,表示静态链接;`WITH_OPENCL`、`WITH_IPP`、`WITH_TBB`、`WITH_MATLAB`、`WITH_CUDA`、`WITH_GTK` 分别表示是否启用 OpenCL、IPP、TBB、MATLAB、CUDA、GTK 等功能,这里都设置为 `OFF`;`BUILD_opencv_apps`、`BUILD_ANDROID_EXAMPLES`、`BUILD_ANDROID_PROJECTS`、`BUILD_DOCS`、`BUILD_EXAMPLES`、`BUILD_PACKAGE`、`BUILD_PERF_TESTS`、`BUILD_TESTS` 分别表示是否编译 OpenCV 应用程序、Android 示例、Android 项目、文档、示例、打包、性能测试、测试,这里都设置为 `OFF`;`OPENCV_EXTRA_MODULES_PATH` 表示 OpenCV Contrib 目录的路径;`CMAKE_BUILD_TYPE` 表示编译类型,这里设置为 `Release`;`CMAKE_TOOLCHAIN_FILE` 表示使用的交叉编译工具链文件。 5. 运行以下命令,编译生成 OpenCV Android 库: ``` make -j4 ``` 其中,`-j4` 表示使用 4 个核心进行编译。 6. 在 build 目录下会生成一个 `sdk` 目录,其中包含编译好的 OpenCV Android 库。 可以将该库导入到 Android Studio 中,然后在项目中使用该库提供的函数进行开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值