海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)

此篇搭建环境的Linux平台为ubuntu18.0.4 64位系统,SDK的目标平台为Hi3516DV300\CV500系列。
成功编译的库在下面有链接
准备工作:
1)安装交叉编译器arm-himix200-linux
2)在ubuntu上安装cmake-gui:
命令:
sudo apt-get install cmake
sudo apt-get install cmake-gui #安装
cmake-gui --version # 检查是否安装成功,如下图所示,代表安装成功

3)下载opencv及contrib源代码,注意版本的一致性
OpenCV4.1.2源码下载:OpenCV4源码下载网址
注意下载的是sources
解压opencv 源代码文件,由于我是在window下下载的,在window下解压之后,复制到ubuntu系统下的。

设置cmake
4)进入之前解压的opencv4源码文件下
切换到cd 3rdparty/protobuf/src/google/protobuf/stubs
修改common.cc在头文件下面,添加一行 #define HAVE_PTHREAD
如图所示:
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第1张图片
修改顶层目录的CMakeLists.txt增加以上代码ocv_include_directories(./3rdparty/zlib/)
在这里插入图片描述
6) 进入之前解压的opencv4源码文件下
打开终端,输入命令:
mkdir build
mkdir install-hisi
cd build
cmake-gui //进入cmake-gui界面
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第2张图片
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第3张图片
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第4张图片
分别填上工具链对应位置:
Operating System:arm-hisiv600-linux
compilers c:/opt/hisi-linux/x86-arm/arm-himix200-linux/ bin/arm-himix200-linux-gcc
compilers c++:/opt/hisi-linux/x86-arm/arm-hisiv600-linux /bin/arm-himix200-linux-g++
target root: /opt/hisi-linux/x86-arm/arm-himix200-linux/ bin
include Mode: Search only in Target Root

点击finish,等configure完成(如图所示),后需要修改相应配置:
在这里插入图片描述
配置参数:
设置安装路径
CMAKE_INSTALL_PREFIX=/home/smf/opencourse/opencv4_hisi3516/opencv-4.1.2/install-hisi
#Install-hisi 是刚刚创建的,后面的 make install 会把编译好的opencv libs拷贝到该目录下.。
在这里插入图片描述取消WITH_CUDA
在这里插入图片描述
取消WITH_TIFF
在这里插入图片描述
设置CMAKE_BUILD_TYPE=RELEASE
打勾BUILD_ZLIB
取消WITH_JPEG (这一步很重要,否则一直会报下面的错,问题总结中有)
打勾BUILD_JPEG
CMAKE_FIND_ROOT_PATH = /opt/hisi-linux/x86-arm/arm-himix200-linux/ bin #如果上面操作好了,此步应该默认好了,不需要再操作
可以将BUILD_opencv_XX选项都选择。
勾选advanced选项,给 CMAKE_EXE_LINKER_FLAGS 加上参数 -lpthread -lrt -ldl
#防止后面编译出错
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第5张图片
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第6张图片
修改完成后,点击generate,成功后即可关闭界面,执行make进行编译工作。

编译工作
6)执行make进行编译工作,注意此时在build目录下。
make
漫长等待之后出现如下图所示表明成功编译:
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第7张图片
安装工作
7) 安装opencv,注意依build目录下执行命令:
make install
看到提示之后,安装成功之后在install-hisi目录下就有会以下一些文件
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第8张图片
打开lib文件检查一下
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第9张图片
如果按上面的步骤操作,通常不会出现问题,如果出现,也只可能cmake设置有遗漏或者是安装交叉编译时64位ubuntu不兼容32bit工具问题没有安装对应的依赖库,不过我在安装海思35XX交叉编译工具时会有这步操作。

移植工作
8)将交叉编译的opencv4移植到海思开发板端,并添加opencv4路径
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第10张图片
将install_hisi更名为opencv4.1.2,将这个文件夹移植到开发板mnt/mtd下,这样就不会占据开发板的内存,而是占用的sd卡的存储空间。
此处命令操作是在板端执行的。
通过软链接的方式添加opencv的库,此处可执行文件都存放在mnt/mtd文件夹下
ln -s /mnt/mtd/opencv4.1.2/lib/* /lib
由于我在板端mnt/mtd/nnie下存放的可执行文件,所以用了三个链接:
ln -s /mnt/mtd/opencv4.1.2/lib/* /mnt/lib
ln -s /mnt/lib/* /lib

编译成功的库,可供直接下载使用 适用arm-himix200-linux交叉编译的opencv4
如果存储空间充足,下篇会补充如何将opencv移植到开板lib文件夹下。

问题总结:
问题1
**加粗样式*
原因分析:
64位ubuntu不兼容32bit工具问题
解决方法:
命令:
sudo apt-get update
sudo apt install lib32z1-dev
sudo apt-get install lib32z1 lib32ncurses5
sudo apt-get install lib32stdc++6
sudo apt-get install lib32bz2-1.0
sudo apt-get install gcc-multilib g+±multilib
问题2
make[1]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2
如图所示:
海思AI芯片(Hi35XX): 交叉编译opencv4移植到海思35XX开发板(Ubuntu18.0.4)_第11张图片
在cmake-gui设置界面中,记得取消WITH_JPEG

问题3(海思开发板运行可执行文件报错)
error while loading shared libraries: …/…/lib/libopencv_xxxx.so的解决方法
error while loading shared libraries: lib/libopencv_xxxx.so的解决方法
在这里插入图片描述
查看步骤八,也就是没有配置好opencv路径,可以通过软链接的方式添加路径。

你可能感兴趣的:(海思AI芯片,嵌入式AI)