前言:
因工作需要,要测试openCV在android的拉流,笔者记录下本次编译过程
以编译arm64-v8a库为例,同时增加附加库
本次假设读者已经正常安装Qt
1.安装git
这方便教程很多,不再重复。笔者使用的是git2.33
2.安装cmake
这个教程也很多,但笔者没有安装,使用的是Qt安装时,下载的
3.android NDK
下载地址:不受支持的 NDK 下载 | Android NDK | Android Developers
笔者没有单独下载,因为在配置Qt for android时,已经自动下载完成了
1.下载opencv4.5.5源码
https://github.com/opencv/opencv/archive/refs/tags/4.5.5.zip
2下载opencv_contrib-4.5.5源码
https://github.com/opencv/opencv_contrib/archive/refs/tags/4.5.5.zip
detect.caffemodel
detect.prototxt
sr.caffemodel
sr.prototxt
boostdesc_bgm.i
boostdesc_bgm_bi.i
boostdesc_bgm_hd.i
boostdesc_binboost_064.i
boostdesc_binboost_128.i
boostdesc_binboost_256.i
boostdesc_lbgm.i
vgg_generated_48.i
vgg_generated_64.i
vgg_generated_80.i
vgg_generated_120.i
注:笔者尝试使用中国源,发现这些库仍然无法正常下载
环境变量设置方法很多,可以直接设置系统的环境变量,笔者使用的是在一个cmd窗口中临时设置环境变量
执行如下命令
//设置环境变量
set path=D:\Qt\Tools\mingw1120_64\bin;D:\Qt\Tools\CMake_64\bin;%path%
//设置android NDK目录
SET ANDROID_NDK=E:\software\android\sdk-tools-windows-4333796\ndk\22.1.7171670
若是查看环境变量执行如下
echo %path%
注:笔者安装的Qt6.3,若读者使用较低版本,不保证能正常编译
在设置好环境变量的cmd中执行(请按实际目录执行)
D:\Qt\Tools\CMake_64\bin\cmake-gui.exe
打开如下窗口
在cmake-gui中,点击Add Entry,
增加ANDROID_ABI,值为arm64-v8a
增加ANDROID_PLATFORM,值为24
注:按谷歌文件,使用本地摄像头,android版本必须不小于24,否则无法使用
点击configure,弹出如下窗口
以上是笔者的设置,点击Next,
设置工具链文件,以下是笔者的设置
PS. 记得,要设置NDK目录下的,不是源码目录下的,笔者的泪啊!
之后就是等待完成,第一次时间会有点长
configure完成后,修改配置选项
以下是笔者感兴趣的选项
安装目录(生成的静态库的目录)
是否生成动态库
是否生成付费相关的部分
添加贡献库,注意要具体到modules目录
是否将所有库编译到一个文件中,建议新手前期勾选,以降低开发难度
是否可以调用本地摄像头
以下参数根据需求调整
BUILD_ANDROID_PROJECTS
不需要示例项目可直接取消勾选
BUILD_ANDROID_EXAMPLES
= OFF
BUILD_PERF_TESTS
= OFF
BUILD_TESTS
= OFF
BUILD_opencv_world
= OFF (生成 .so 库 libopencv_world.so,这是一个集合,不清楚和默认编译的 libopencv_java4.so 有什么区别,默认不开启,如果开启的话不会复制 java 层函数,也就是 cmake 的 gui 界面会显示 Java wrappers: NO)
BUILD_SHARED_LIBS
= OFF (如果 On 则只编译 so 库)
WITH_CUDA
= OFF (CUDA 是 NVidia 推出的并行计算架构,编译非安卓 SDK 时建议添加)
WITH_OPENCL
= ON (因为我们编译的是 android sdk,所以建议添加移动端的并行架构支持)
WITH_OPENCL_SVM
= ON (建议开启共享虚拟内存)
调整完后再次点击Configure,完成后点击Generate。
部分选项可能需要多点几次才能出现
继续点击configure(可以多点几次,有时多点几次就可以下载成功),
若输出中仍然存在红色的文字,打开编译目录,找到日志文件CMakeDownloadLog.txt,查看缺少或下载失败的文件,下载完成后,按日志文件的提示,放入指定目录即可
笔者已下载下载缺少的文件,处理方法如下
1.把downloads,直接放在编译目录(笔者已整理好内部目录)
2.把testdata两个目录,放在编译目录下的sdk/etc目录(笔者已整理好内部目录)
再次点击configure,此时应该不会有红色的文字了(若存在,请自主解决)
点击generate,生成makefile文件
设置好环境变量的cmd中,切换目录到编译目录(请按实际目录执行)
执行mingw32-make -j6 开始编译
(6代表同时开6个线程编译,请读者按照自己机器的配置设置,以加快编译速度)
些过程耗时较长,笔者等待了20分钟左右
编译完成后,执行mingw32-make install
过会就可以在安装目录找到生成的静态库了,笔者是在编译目录下的install
打开cmake-gui,修改以下选项
修改完成后,再次点击configure,此时应该不会有红色的文字(若存在,请自主解决)
点击generate,生成makefile文件
设置好环境变量的cmd中,切换目录到编译目录(请按实际目录执行)
执行mingw32-make -j6 开始编译
(6代表同时开6个线程编译,请读者按照自己机器的配置设置,以加快编译速度)
些过程耗时较长,笔者等待了20分钟左右
编译完成后,执行mingw32-make install
过会就可以在安装目录找到生成的动态库了,笔者是在编译目录下的install
前目录为止,已经编译完成arm64-v8a的动态库和静态库
因时间关系,笔者本次就不添加测试程序了
1.cmake时,遇到如下错误
解决方法:
修改如下配置选项
然后重新configure
已生成的动态库和静态库(arm64-v8a)
2022.6.18
笔者编译openCV4.6.0生成的动态库和静态库(arm64-v8a)
后记:
1.笔者同时也编译了armeabi-v7a的库,发现勾选本地摄像头时,无法正常编译静态库
笔者也共享出已编译的库,供小伙伴测试使用
动态库和静态库(armeabi-v7a 无本地camera调用)下载
动态库(armeabi-v7a)下载
2.因为没勾选"BUILD_opencv_world",所以生成了多个库文件,方便打包时缩小体积。
3.关于测试,笔者在下一篇简单介绍下