RK3588移植-opencv交叉编译aarch64

news2024/11/30 0:46:20

文章参考:https://blog.csdn.net/KayChanGEEK/article/details/80365320

文章目录

    • 概括
    • 准备资源
    • 交叉编译OPENCV
    • 修改CMakelist文件
    • 将lib库复制到/lib目录

注意:本文中的所有配置相关路径都与当前安装的路径有关,需要根据自己的环境进行自行修改!!!

概括

在做yolov5移植rk3588时,由于RKNPU2的example中opencv库不全,缺少VideoCapture\imshow等函数,所以需要自己重新交叉编译opencv并将编译好的aarch64动态库导入,由于网上资料很多不可用,故记录下来操作流程。

准备资源

1.cmake
2.opencv (官网下载,解压即可)
3.交叉编译器(gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz)注意这个版本适用于linux64位系统->aarch64位开发板。
下载链接:https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/
在这里插入图片描述
下载后进行解压。

交叉编译OPENCV

ps:需要根据你的安装环境来更改具体命令
1、进入opencv源码目录
cd /opt/arm/opencv320_64
2、建立文件夹build和cv_sdk,build用来存放编译时的二进制文件,cv_sdk用来存放编译后的文件
mkdir build cv_sdk
3、进入build目录,运行cmake-gui:
cd build/
sudo cmake-gui
4、设置源码目录和构建目录如下图
在这里插入图片描述
第一个框填入opencv的目录,第二个框填入opencv目录下的build目录
5、点击Add Entry,按照下图添加ar命令配置
在这里插入图片描述

6、点击Configure,选择Specify toolchain for cross-compiling,如下图
在这里插入图片描述

7、点击Next,设置Specify the toolchain file,在opencv源码目录下的platforms/linux/目录选择对应的toolchain file,如下图
在这里插入图片描述
8、点击Finish

9、设置宏CMAKE_INSTALL_PREFIX的值为刚才创建的cv_sdk路径

10、设置宏CMAKE_BUILD_TYPE的值为Release

11、选中宏WITH_GTK_2_X,去掉宏WITH_GTK

12、再次点击Configure,再点击Generate,关掉cmake-gui

13、sudo make -j8 &&make install

14、到此在cv_sdk目录下生成目标平台的库

到这里,opencv的交叉编译(aarch64)就完成了,编译生成的动态库文件位于opencv目录下的cv_sdk文件夹下,可以通过file 文件名查看动态库的平台。通过下图可以看到动态库文件已经被编译为64位aarch64格式。
在这里插入图片描述

修改CMakelist文件

example中的样例使用的是一个简易的opencv库,需要切换到自己编译生成的opencv库,故需要修改example/rknn_yolov5_demo下的CMakeList.txt文件。
将OpenCV_DIR变量修改为opencv目录下的cv_sdk/lib/cmake/opencv4,如下图所示。
注意:这里的路径必须用绝对路径由/开头,不能够识别~/家目录
在这里插入图片描述
进行上序修改之后就可以进行正常编译了,执行sudo ./build-linux_RK3588.sh 即可正确生成可执行文件。

将lib库复制到/lib目录

虽然已经能够正确生成可执行文件,但是如果按照之前的步骤adb push install …一顿操作下,会发现在板子端运行可执行程序仍然会报没有找到xxx.so文件的错误。需要将opencv下所有的.so文件放到install/rknn_yolov5_demo_Linux/lib目录下。

cp ~/Downloads/opencv-4.6.0/cv_sdk/lib/*
rknpu2/…/install/rknn_yolov5_demo_Linux/lib

然后再在进入板子的时候添加LD目录即可正确运行。
在adb shell中的rknn_yolov5_demo_Linux目录下执行
export LD_LIBRARY_PATH=./lib

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/49015.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

『Java课设』JavaSwing+MySQL实现学生成绩管理系统

👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟 🏡个人主页:starry陆离 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 『Java课设』JavaSwingMySQL实现学生成绩管理系统前言1.开…

SparkMlib 之随机森林及其案例

文章目录什么是随机森林?随机森林的优缺点随机森林示例——鸢尾花分类什么是随机森林? 随机森林算法是机器学习、计算机视觉等领域内应用极为广泛的一个算法,它不仅可以用来做分类,也可用来做回归即预测,随机森林机由…

RabbitMQ之可靠性分析

在使用任何消息中间件的过程中,难免会出现消息丢失等异常情况,这个时候就需要有一个良好的机制来跟踪记录消息的过程(轨迹溯源),帮助我们排查问题。在RabbitMQ 中可以使用Firehose 功能来实现消息追踪,Fire…

艾美捷MTT细胞增殖检测试剂盒结果示例引用文献

艾美捷MTT细胞增殖检测试剂盒测定原理: 该试剂盒提供了比色形式测量和监测细胞增殖,含有足够的试剂用于评估在96孔板中进行960次测定或在24孔板中进行192次测定。细胞可以被镀,然后用影响增殖的化合物或药剂。然后用增殖试剂检测细胞&#x…

3.矩阵计算及导数基础

1. 梯度 将导数拓展到向量。 1. 标量对向量求导 x是列向量,y是标量,求导之后变成了行向量 ps: x1^2 2x2^2 这个函数可以画成等高线,对于(x1,x2)这个点,可以做等高线的切线,再做出…

Spark Streaming(二)

声明: 文章中代码及相关语句为自己根据相应理解编写,文章中出现的相关图片为自己实践中的截图和相关技术对应的图片,若有相关异议,请联系删除。感谢。转载请注明出处,感谢。 By luoyepiaoxue2014 B站&#xff…

动态规划算法(2)最长回文子串详解

文章目录最长回文字串动态规划代码示例前篇: (1)初识动态规划 最长回文字串 传送门: https://leetcode.cn/problems/longest-palindromic-substring/description/ 给你一个字符串 s,找到 s 中最长的回文子串。 s &qu…

大数据学习:使用Java API操作HDFS

文章目录一、创建Maven项目二、添加依赖三、创建日志属性文件四、在HDFS上创建文件五、写入HDFS文件1、将数据直接写入HDFS文件2、将本地文件写入HDFS文件六、读取HDFS文件1、读取HDFS文件直接在控制台显示2、读取HDFS文件,保存为本地文件一、创建Maven项目 二、添加…

Spring Security 中重要对象汇总

前言 已经写了好几篇关于 Spring Security 的文章了,相信很多读者还是对 Spring Security 的云里雾里的。这是因为对 Spring Security 中的对象还不了解。本文就来介绍介绍一下常用对象。 认证流程 SecurityContextHolder 用户认证通过后,为了避免用…

【JavaWeb】Servlet系列 --- HttpServlet【底层源码分析】

HttpServlet一、什么是协议?什么是HTTP协议?二、HTTP的请求协议(B -- > S)1. HTTP的请求协议包括4部分(记住)2. HTTP请求协议的具体报文:GET请求3. HTTP请求协议的具体报文:POST请…

生成式模型和判别式模型

决策函数Yf(x)Y f(x)Yf(x)或者条件概率分布 P(Y∣X)P(Y|X)P(Y∣X) 监督学习的任务都是从数据中学习一个模型(也叫做分类器),应用这一模型,对给定的输入xxx预测相应的输出YYY,这个模型的一般形式为:决策函数Yf(x)Y f(x)Yf(x)&…

java 每日一练(6)

java 每日一练(6) 文章目录单选不定项选择题编程题单选 1.关于抽象类与最终类,下列说法错误的是?   A 抽象类能被继承,最终类只能被实例化。   B 抽象类和最终类都可以被声明使用   C 抽象类中可以没有抽象方法,最终类中可以没…

Bean 管理(工厂bean)

IOC操作Bean 管理(FactoryBean) 下面是在Bean 管理(工厂bean)之前的学习,基于xml方式注入集合并实现 基于xml方式注入集合并实现 :http://t.csdn.cn/H0ipR Spring 有两种类型bean,一种普通bean…

第五章. 可视化数据分析分析图表—图表的常用设置2

第五章. 可视化数据分析分析图 5.2 图表的常用设置2 本节主要介绍图表的常用设置,设置标题和图例,添加注释文本,调整图表与画布边缘间距以及其他设置。 7.设置标题(title) 1).语法: matplotlib.pyplot.ti…

iOS15适配 UINavigationBar和UITabBar设置无效,变成黑色

今天更新了xcode13,运行项目发现iOS15以上的手机导航栏和状态栏之前设置的颜色等属性都不起作用了,都变成了黑色,滚动的时候才能变成正常的颜色,经确认得用UINavigationBarAppearance和UITabBarAppearance这两个属性对导航栏和状态…

开发SpringBoot+Jwt+Vue的前后端分离后台管理系统VueAdmin - 前端笔记

一个spring security jwt vue的前后端分离项目!综合运用! 关注公众号 MarkerHub,回复【 VueAdmin 】可以加群讨论学习、另外还会不定时安排B站视频直播答疑! 首发公众号:MarkerHub 作者:吕一明 视频讲解&…

半年卖8万吨辣条,卫龙再闯IPO

“辣条大王”卫龙美味全球控股有限公司(下称“卫龙”)于11月23日重新递表,继续冲刺“辣条第一股”。 作为千禧一代撑起的童年“神话”,卫龙的上市之路却波折重重;它曾于2021年5月、2021年11月及此次重启IPO。 卫龙是…

线程池ThreadPoolExecutor

线程池的生命周期 private final AtomicInteger ctl new AtomicInteger(ctlOf(RUNNING, 0)); ThreadPoolExecutor使用一个ctl变量代表两个信息,线程池的运行状态 (runState) 和 线程池内有效线程的数量 (workerCount),高三位表示状态。 workerCount&am…

MySQL 数据库存储引擎

目录 一、存储引擎简介 二、MyISAM存储引擎 1、MylSAM介绍 2、MyISAM表支持3种不同的存储格式 3、MylSAM的特点 4、MyISAM使用的生产场景 三、InnoDB存储引擎 1、InnoDB介绍 2、InnoDB的特点 3、InnoDB适用生产场景 4、MyISAM和InnoDB的区别 四、查看和修改存储引擎…

CloudAlibaba - Nacos服务注册与配置中心

文章目录一.CloudAlibaba简介1. 介绍2. 依赖3. 主要组件4. 资料文档二.Nacos服务注册与发现1. 简介2. Nacos安装3. Nacos服务注册3.1 注册服务生产者3.2 服务消费者注册和负载4. Nacos服务中心对比三.Nacos配置中心1. 基础配置搭建2. Nacos中添加配置信息2.1 Nacos中的匹配规则…