Tina下运行在Ubuntu中交叉编译的Opencv 4.5.1

前言

看到很多人在小哪吒上编译Opencv,自己也尝试过编译了几次,各位开发者在编译的时候都可能会遇到不同的问题,现将其整理出来方便后面新来的开发者查阅。

环境需求

理论上任何版本的Ubuntu都可以,在社区中有hu487364在Ubuntu14 中成功 见帖:编译Tengine D1 出错
aldfaaa的Ubuntu20.04中,见贴:Ubuntu20.04交叉编译OpenCV 4.5.2, 运行在Tina Linux

  • hu487364 在虚拟机中,符合广大开发者开发环境及方法。
  • aldfaaa使用命令行和直接修改CmakeLists.txt 文件来完成编译.
    这里推荐开发者使用第一种方法。在虚拟机中使用cmake-gui进行配置完成编译。

工具安装

sudo apt install cmake-qt-gui

获取opencv源码

(小声bb)opencv的Relase版本更新还是挺快的,当然推荐大家使用最新的版本,这里就先贴上上一个版本了(前两天还是最新版本)
源码下载地址

下载源码后,放到虚拟机目录进行解压。然后进入opencv目录。

编译及编译配置

编译使用cmake-gui 打开cmake配置工具。
source 选择 opencv源码路径 build 选择编译路径(!注意不是安装路径)
Tina下运行在Ubuntu中交叉编译的Opencv 4.5.1_第1张图片
然后点击
Tina下运行在Ubuntu中交叉编译的Opencv 4.5.1_第2张图片
此处务必选择SDK中交叉编译链路径
Tina下运行在Ubuntu中交叉编译的Opencv 4.5.1_第3张图片

# Operating system : Linux
# process : riscv
# C 选择
d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gcc
# C++ 选择
d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gc++
# Target root 选择
d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702

然后点击 FInish

编译配置

打开Advancd选项, 设置了这些选项:

CMAKE_BUILD_TYPE Release
CMAKE_EXE_LINKER_FLAGS -ldl -lpthread -latomic
CMAKE_INSTALL_PREFIX ./install

关闭jpeg 和 openjpeg 选项。

搜索python 和 java --> 关闭所有相关的选项
关于 是否勾选 opencv_word 将其全部链接成一个静态库 此处就仁者见仁智者见智。。。看个人需求  
我自己是勾上的  这样在链接的时候好链接

文件更改

(1)/d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/sysroot/usr/include/features.h 的第364行前 加 上

 #define _FILE_OFFSET_BITS 64

(2) opencv/3rdparty/protobuf/src/google/protobuf/stubs/commen.cc 中增加一行

#define HAVE_PTHREAD

确认都配置好后

点击Configure —> Configuring done
点击Generate----->Generating done
如果两个都没有问题,此时就可以开始编译了

编译

make -j8

这个错误是因为没有关上jpeg 暂时只能将这个包关掉做编译(类型错误,没有修正)

这个错误是没有在上面加 -latomic

如果以上都没有 ,你就可以顺利编译下来

然后你就可以在 install 目录下 看到我们交叉编译后的文件了
Tina下运行在Ubuntu中交叉编译的Opencv 4.5.1_第4张图片
在移动到板子之前,我们需要将atimic (原子操作库) 移动到我们的lib 目录,因为 Tina 默认没有将原子库打包进固件内。

cd 到lib目录
# -d 和 * 可以保证其全部链接拿出来
cp -d  ~/d1-tina-open/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/riscv64-unknown-linux-gnu/lib64/lp64d/libatomic.so* .

移动完成后 lib 中就有 如下 静态库。
Tina下运行在Ubuntu中交叉编译的Opencv 4.5.1_第5张图片

然后就可以使用adb 将其 发送至开发板中。:face_with_cowboy_hat: :face_with_cowboy_hat: :face_with_cowboy_hat: :face_with_cowboy_hat: :face_with_cowboy_hat: 即将完成!!

adb push lib\libopencv_world.so /lib
adb push lib\libatomic.so /lib
adb push lib\libatomic.so.1.2.0 /lib
adb push lib\libatomic.so.1 /lib

然后我们再将 bin 送入开发板

adb push bin /root
root@TinaLinux:~/bin# chmod +x *
root@TinaLinux:~/bin# ls
opencv_annotation               opencv_visualisation
opencv_interactive-calibration  setup_vars_opencv4.sh
opencv_version
root@TinaLinux:~/bin# ./opencv_version
4.5.1

可以看到我们的开发板已经打印了 opencv的版本号 :face_with_cowboy_hat: :face_with_cowboy_hat: 即将起飞。芜湖

注意

我们在编译的过程中 关掉了 jpeg 的相关包,所以在 imwrite 等操作时 ,无法解析 jpg 文件会出现这样的报错:

terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.5.1) /home/jie/下载/opencv-4.5.1/modules/imgcodecs/src/loadsave.cpp:682: error: (-2:Unspecified error) could not find a writer for the specified extension in function 'imwrite_'

原贴链接:https://bbs.aw-ol.com/topic/227/
全志在线开发者交流企鹅群(客服机器人24小时在线解答):498263967
资源获取、问题讨论可以到全志在线开发者社区进行:https://www.aw-ol.com/
全志及开发者最新动态可以关注全志在线微信公众号

你可能感兴趣的:(全志-Tina,opencv,ubuntu,计算机视觉,全志,嵌入式)