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。

最后贴个图吧。

OpenCV Android以及扩展模块opencv_contrib的编译_第1张图片

你可能感兴趣的:(opencv,android,人工智能)