RK3588移植-opencv交叉编译aarch64

2023-11-10

注意:本文中的所有配置相关路径都与当前安装的路径有关,需要根据自己的环境进行自行修改!!!
OPENCV如果需要ffmpeg视频模块的话,不建议用cmake-gui,有很多bug。建议在ffmpeg相关依赖配置好后使用“问题:”中的cmake命令。

概括

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

准备资源

1.cmake
2.opencv (官网下载,解压即可)
3.已经编译好的ffmpeg模块
4.交叉编译器(这里运行的是ubuntu自带的aarch64-linux-gnu-…)

编译Opencv

下载Opencv源码后,进入Opencv目录创建build文件夹并进入,之后可以根据所需模块运行下面命令。(GTK为imshow函数所需,不需要可以设置为OFF)。

cd Opencv目录
mkdir build
cd build
mkdir install_ffmpeg #编译生成的文件都放到该目录

sudo cmake  -D CMAKE_BUILD_TYPE=RELEASE  -D CMAKE_C_COMPILER=aarch64-linux-gnu-gcc -D CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -D BUILD_SHARED_LIBS=ON -D CMAKE_CXX_FLAGS=-fPIC -D CMAKE_C_FLAGS=-fPIC -D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl -D ENABLE_PIC=ON -D WITH_1394=OFF -D WITH_ARAVIS=OFF -D WITH_ARITH_DEC=ON -D WITH_ARITH_ENC=ON -D WITH_CLP=OFF -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_GSTREAMER_0_10=OFF -D WITH_HALIDE=OFF -D WITH_HPX=OFF -D WITH_IMGCODEC_HDR=ON -D WITH_IMGCODEC_PXM=ON -D WITH_IMGCODEC_SUNRASTER=ON -D WITH_INF_ENGINE=OFF -D WITH_IPP=OFF -D WITH_ITT=OFF -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LAPACK=ON -D WITH_LIBREALSENSE=OFF -D WITH_NVCUVID=OFF -D WITH_OPENCL=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=OFF -D WITH_OPENGL=OFF -D WITH_OPENMP=OFF -D WITH_OPENNNI=OFF -D WITH_OPENNNI2=OFF -D WITH_OPENVX=OFF -D WITH_PNG=OFF -D WITH_PROTOBUF=OFF -D WITH_PTHREADS_PF=ON -D WITH_PVAPI=OFF -D WITH_QT=OFF -D WITH_QUIRC=OFF  -D WITH_TBB=OFF -D WITH_TIFF=ON -D WITH_VULKAN=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF -D CMAKE_INSTALL_PREFIX=./install_ffmpeg  -D WITH_GTK=OFF -D WITH_GTK_2_X=OFF  ..

然后再

sudo make -j8
sudo make install 

编译就成功了。

修改CMakelist文件

example中的样例使用的是一个简易的opencv库,需要切换到自己编译生成的opencv库,故需要修改example/rknn_yolov5_demo下的CMakeList.txt文件。
将OpenCV_DIR变量修改为opencv目录下的install_ffmpeg/lib/cmake/opencv4/,如下图所示。
注意:这里的路径必须用绝对路径由/开头,不能够识别~/家目录

CMakeList.txt:
set(OpenCV_DIR  /home/yi/Downloads/opencv-4.6.0/build/install_ffmpeg/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/build/install_ffmpeg/lib/*
rknpu2/…/install/rknn_yolov5_demo_Linux/lib

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

问题:opencv videoCapture无法运行视频

参考资料:https://www.cnblogs.com/tangjunjun/p/16527020.html

原因:交叉编译OPENCV时ffmpeg模块没有正确被编译,cmake时可以看到FFMPEG:NO。需要自行安装ffmpeg的相关依赖,我的依赖全部交叉编译在opencv-depend文件夹下(包括ffmpeg)
在这里插入图片描述

尝试添加目录后进行cmake操作,直到FFMPEG:YES

export LD_LIBRARY_PATH=/ffmpeg_install_path/lib/

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/ffmpeg_install_path/lib/pkgconfig

export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/ffmpeg_install_path/lib/

然后在新建的build目录下重新执行下面编译语句。

sudo cmake  -D CMAKE_BUILD_TYPE=RELEASE  -D CMAKE_C_COMPILER=aarch64-linux-gnu-gcc -D CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -D BUILD_SHARED_LIBS=ON -D CMAKE_CXX_FLAGS=-fPIC -D CMAKE_C_FLAGS=-fPIC -D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl -D ENABLE_PIC=ON -D WITH_1394=OFF -D WITH_ARAVIS=OFF -D WITH_ARITH_DEC=ON -D WITH_ARITH_ENC=ON -D WITH_CLP=OFF -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_GSTREAMER_0_10=OFF -D WITH_HALIDE=OFF -D WITH_HPX=OFF -D WITH_IMGCODEC_HDR=ON -D WITH_IMGCODEC_PXM=ON -D WITH_IMGCODEC_SUNRASTER=ON -D WITH_INF_ENGINE=OFF -D WITH_IPP=OFF -D WITH_ITT=OFF -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LAPACK=ON -D WITH_LIBREALSENSE=OFF -D WITH_NVCUVID=OFF -D WITH_OPENCL=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=OFF -D WITH_OPENGL=OFF -D WITH_OPENMP=OFF -D WITH_OPENNNI=OFF -D WITH_OPENNNI2=OFF -D WITH_OPENVX=OFF -D WITH_PNG=OFF -D WITH_PROTOBUF=OFF -D WITH_PTHREADS_PF=ON -D WITH_PVAPI=OFF -D WITH_QT=OFF -D WITH_QUIRC=OFF  -D WITH_TBB=OFF -D WITH_TIFF=ON -D WITH_VULKAN=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF -D CMAKE_INSTALL_PREFIX=./install_ffmpeg  -D WITH_GTK=OFF  ..

注意:下面的语句需要由自己的编译环境来改变
(CMAKE_C_COMPILER=aarch64-linux-gnu-gcc、CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++、CMAKE_INSTALL_PREFIX=./install_ffmpeg)

然后再

sudo make -j8
sudo make install 

即可正确编译opencv。

安装历程(history)

最后记录一下成功安装的命令行,删除无效的操作历史。
可以看到在2007时,我将build文件夹生成的文件全部删除,相当于什么配置都没有做。
2008-2018中间有多次sudo cmake的操作,但是经过make -j8之后都报错了,所以最后修改为2018所示的命令。不清楚多次cmake是否会有缓存文件保留。

 1991  export LD_LIBRARY_PATH=/home/yi/Downloads/opencv-depend/lib
 1992  export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/yi/Downloads/opencv-depend/lib/pkgconfig
 1993  export PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/home/yi/Downloads/opencv-depend/lib/pkgconfig
 2005  cd ../
 2006  rm -rf build/*
 2007  sudo rm -rf build/*
 2008  cd build/
 2018  sudo cmake  -D CMAKE_BUILD_TYPE=RELEASE  -D CMAKE_C_COMPILER=aarch64-linux-gnu-gcc -D CMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -D BUILD_SHARED_LIBS=ON -D CMAKE_CXX_FLAGS=-fPIC -D CMAKE_C_FLAGS=-fPIC -D CMAKE_EXE_LINKER_FLAGS=-lpthread -ldl -D ENABLE_PIC=ON -D WITH_1394=OFF -D WITH_ARAVIS=OFF -D WITH_ARITH_DEC=ON -D WITH_ARITH_ENC=ON -D WITH_CLP=OFF -D WITH_CUBLAS=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_FFMPEG=ON -D WITH_GSTREAMER=ON -D WITH_GSTREAMER_0_10=OFF -D WITH_HALIDE=OFF -D WITH_HPX=OFF -D WITH_IMGCODEC_HDR=ON -D WITH_IMGCODEC_PXM=ON -D WITH_IMGCODEC_SUNRASTER=ON -D WITH_INF_ENGINE=OFF -D WITH_IPP=OFF -D WITH_ITT=OFF -D WITH_JASPER=ON -D WITH_JPEG=ON -D WITH_LAPACK=ON -D WITH_LIBREALSENSE=OFF -D WITH_NVCUVID=OFF -D WITH_OPENCL=OFF -D WITH_OPENCLAMDBLAS=OFF -D WITH_OPENCLAMDFFT=OFF -D WITH_OPENCL_SVM=OFF -D WITH_OPENEXR=OFF -D WITH_OPENGL=OFF -D WITH_OPENMP=OFF -D WITH_OPENNNI=OFF -D WITH_OPENNNI2=OFF -D WITH_OPENVX=OFF -D WITH_PNG=OFF -D WITH_PROTOBUF=OFF -D WITH_PTHREADS_PF=ON -D WITH_PVAPI=OFF -D WITH_QT=OFF -D WITH_QUIRC=OFF  -D WITH_TBB=OFF -D WITH_TIFF=ON -D WITH_VULKAN=OFF -D WITH_WEBP=ON -D WITH_XIMEA=OFF -D CMAKE_INSTALL_PREFIX=./install_ffmpeg  -D WITH_GTK=OFF ..
 2019  sudo make -j8
 2020  ls
 2021  mkdir install_ffmpeg
 2022  sudo make install
 2023  ls install_ffmpeg/
 2024  history 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RK3588移植-opencv交叉编译aarch64 的相关文章

  • 收据褪色部分可以恢复吗?

    我有一些包含一些扫描收据的文件 我需要使用 OCR 从中提取文本 由于收据上打印的文字在一段时间后会褪色 导致收据上的某些文字不清晰 影响OCR结果 褪色单词的一些示例 有什么方法可以恢复褪色的部分 以便提高 OCR 结果吗 我在OpenC
  • 为什么这些双精度数的返回值为-1.#IND?

    I have double score cvMatchContourTrees CT1 CT2 CV CONTOUR TREES MATCH I1 0 0 cout lt
  • brew 链接 jpeg 问题

    我正在尝试安装opencv在 Mac OSX Lion 上 brew install opencv 我收到以下错误 以及其他一些类似的错误 Error The linking step did not complete successful
  • opencv createsamples没有错误,但是没有找到样本

    我在用着this http coding robin de 2013 07 22 train your own opencv haar classifier html教程 我正在根据我的正面图像创建大量样本 我正在使用 Windows 这是
  • 查找彼此接近的对象边界

    我正在研究一个计算机视觉问题 其中问题的第一步是找到物体彼此靠近的位置 例如 在下图中 我感兴趣的是找到灰色标记的区域 Input Output 我目前的方法是首先反转图像 然后通过侵蚀进行形态梯度跟随 然后删除一些不感兴趣的轮廓 脚本如下
  • 相机标定(OpenCV 2.3)-如何使用畸变参数?

    我有一组带有一些附加标记的刚体图像 我在这些标记之一中定义了一个原点坐标系 我想获得该坐标系与在相机原点定义的坐标系之间的旋转和平移 我尝试了一段时间 POSIT 以下this http goo gl cUYYt 但从未获得可接受的结果 直
  • 来自 OpenCV 的外部参数

    我正在使用 OpenCV 来校准立体相机对 我拍摄了各种校准照片 并且使用 cv2 calibrateCamera 对内在参数进行了令人满意的拟合 然而 目前尚不清楚如何获取外部参数 该函数仅返回cameraMatrix 尽管它很有用 但实
  • 我是否必须使用我的数据库训练 Viola-Jones 算法才能获得准确的结果?

    我尝试提取面部数据库的面部特征 但我认识到 Viola Jones 算法在两种情况下效果不佳 当我尝试单独检测眼睛时 当我尝试检测嘴巴时 运作不佳 检测图像的不同部分 例如眼睛或嘴巴 或者有时会检测到其中几个 这是不可能的情况 我使用的图像
  • Python:opencv warpPerspective 既不接受 2 个也不接受 3 个参数

    我发现单应矩阵如下特征匹配 单应性教程 https docs opencv org 3 4 1 d1 de0 tutorial py feature homography html using M mask cv2 findHomograp
  • 如何设置K-means openCV c++的初始中心

    我正在尝试使用 OpenCv 和 Kmeans 对图像进行分割 我刚刚实现的代码如下 include opencv2 objdetect objdetect hpp include opencv2 highgui highgui hpp i
  • 使用Python的工业视觉相机[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 曲线/路径骨架二值图像处理

    我正在尝试开发一个可以处理图像骨架的路径 曲线的代码 我想要一个来自两点之间骨架的点向量 该代码在添加一些点后结束 我没有找到解决方案 include opencv2 highgui highgui hpp include opencv2
  • opencv 2.3.* 读取不工作

    我无法让 imread 工作 与这个人有同样的问题 OpenCV imwrite 2 2 在 Windows 7 上导致异常 并显示消息 OpenCV 错误 未指定错误 无法找到指定扩展名的编写器 https stackoverflow c
  • 检查图像中是否有太薄的区域

    我正在尝试验证雕刻机的黑白图像 更多的是剪贴画图像 不是照片 我需要考虑的主要事情之一是区域的大小 或线条的宽度 因为机器无法处理太细的线条 所以我需要找到比给定阈值更细的区域 以此图为例 竖琴的琴弦可能太细而无法雕刻 我正在阅读有关 Ma
  • 创建 OpenCV 的 mouseCallback 函数的基于类的实现时遇到问题

    正如标题所示 我在基于类的 C 结构中实现 OpenCV 的 mouseCallback 函数时遇到了一些麻烦 请允许我解释一下 我定义了一个名为 BriskMatching 的类 在其中创建了一个名为 mouseCallback 的成员函
  • 如何使用 python、openCV 计算图像中的行数

    我想数纸张 所以我正在考虑使用线条检测 我尝试过一些方法 例如Canny HoughLines and FLD 但我只得到处理过的照片 我不知道如何计算 有一些小线段就是我们想要的线 我用过len lines or len contours
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • cv2.drawContours() - 取消填充字符内的圆圈(Python,OpenCV)

    根据 Silencer的建议 我使用了他发布的代码here https stackoverflow com questions 48244328 copy shape to blank canvas opencv python 482465
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here

随机推荐

  • 用于非线性时间序列预测的稀疏局部线性和邻域嵌入(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 本文提出了一种基于字典的L1范数稀疏编码
  • 基于SpringBoot的特色农产品销售设计与实现

    摘 要 目前市场上众多的特色农产品销售系统存在种种不足 比如系统无需登录即可查看农产品卖家的联系方式 并且交易大多为线下交易 很难实现线上购买 物流配送 线上收货收款的功能 本系统提供线上购买服务 使用数据库进行订单管理 设计优化交互界面
  • 【成电860考研】经验贴汇总(公共课+专业课+复试)-扒遍所有网站:信软群、王道、知乎、csdn等,截止21年7月整理出的所有帖子-共15篇

    单词哥 2020跨考 背景 记得 18 年底的时候 好朋友那年考研 我闲的无事就拿他买的英 语一真题做了下 忘了哪一年的题了 不过结果还可以 这也为后来 辞职考研埋了根 由于长期从事英语相关的工作 而又想要圆自己大 学时学计算机的梦 说到底
  • es 中关于 term,match, text, keyword

    转自 https blog csdn net qq 38043440 article details 101678677 最近项目中使用了ElasticSearch 在使用基本的查询功能的时候 遇到些头疼的事情 有时候数据明明存在 用ter
  • ES命令: “track_total_hits“:true

    搜索type全部数据 GET test movie search 结果 took 2 耗费时间 毫秒 timed out false 是否超时 shards total 5 发送给全部5个分片 successful 5 skipped 0
  • vlc详细使用说明

    vlc的全名是Video Lan Client 是一个开源的 跨平台的视频播放器 VLC支持大量的音视频传输 封装和编码格式 完整的功能特性列表可以在这里获得http www videolan org vlc features html 下
  • 小米蓝牙耳机使用说明_小米真无线蓝牙耳机Air2 SE评测

    很多人都会把 小米Air2 SE 这款耳机 当成是上一代的阉割版本 其实完全没必要这么想 因为他们除了耳机有点像之外 其它几乎全不一样 甚至当两款独立的产品也是没问题的 这款耳机根据我的分析和体验 我觉得它在音质上和小米Air2s 几乎是差
  • React——简介、JSX、组件、传值 React Props、状态 React State

    环境搭建 npm i g create react app create react app myapp cd myapp npm start 一 简介 1 简介 React主要用于构建UI 你可以在React里传递多种类型的参数 如声明代
  • spring boot获取datasource为null_Spring讲解九

    Spring JDBC 数据访问 Spring JDBC是Spring所提供的持久层技术 它的主要目标是降低使用JDBC API的门槛 以一种更直接 更简介 更简单的方式使用JDBC API 在Spring JDBC里 仅需做那些与业务相关
  • Python二叉树的三种深度优先遍历

    Python二叉树的三种深度优先遍历 一 广度优先遍历和深度优先遍历 对二叉树进行遍历 traversal 是指依次对树中每个节点进行访问 在遍历的过程中实现需要的业务 对树的遍历方式有广度优先遍历和深度优先遍历两种方式 广度优先一般用队列
  • 区块链学习(maven)【Day01-Day02】

    学习进度 2023 5 16日 2023 5 17日 maven基础环境配置 maven修改配置文件 idea配置maven环境 创建maven工程 导入maven工程 maven引入依赖 maven排除依赖 maven依赖范围 maven
  • 【机器学习】:特征筛选方法

    一 基于统计值的筛选方法 1 过滤法 选择特征的时候 不管模型如何 首先统计计算该特征和和label的一个相关性 自相关性 发散性等等统计指标 优点 特征选择开销小 有效避免过拟合 缺点 没有考虑后续的学习器来选择特征 减弱了学习器的学习能
  • Code Completion Insight with Oracle SQL Developer

    Code Completion Insight with Oracle SQL Developer NOVEMBER 29 2011 2 MINS READ SHARE Most third generation language 3GL
  • 以太坊(二)——账户

    外部账户 Externally owned account EOA 本地产生一个公私钥对 私钥掌握账户的控制权 外部账户包括账户余额 balance 计数器 nonce 也叫普通账户 有对应的以太币余额 可发送交易 转币或触发合约代码 所有
  • axios的二次封装

    src network request js import axiox from axios import BASE URL TIMEOUT from config const instance axiox create baseURL B
  • Golang Context 详细原理和使用技巧

    文章目录 Golang Context 详细原理和使用技巧 Context 背景 和 适用场景 Context 的背景 Context 的功能和目的 Context 的基本使用 Context 的同步控制设计 Context 的定义和实现
  • LLVM里的寄存器分配 - 准备工作(一)

    1 背景介绍 本文档是基于 LLVM 的寄存器分配系列科研笔记第一篇 以一个 C 语言程序为主干介绍 LLVM 在寄存器分配前做的一些主要工作 分析在寄存器分配前期可能的写操作来源 并记录了我在研究 LLVM 后端中 SSA 形式的中间表示
  • JSP六个动作详解...

    原文地址 http blog sina com cn s blog 6267d71d0100pjdk html JSP中6个动作为 1 Include 2 Forward 3 UseBean 4 GetProperty 5 SetPrope
  • ant打包遇到的问题

    build build xml 350 Problem failed to create task or type foreach Cause The name is undefined Action Check the spelling
  • RK3588移植-opencv交叉编译aarch64

    文章目录 概括 准备资源 编译Opencv 修改CMakelist文件 将lib库复制到 lib目录 问题 opencv videoCapture无法运行视频 安装历程 history 注意 本文中的所有配置相关路径都与当前安装的路径有关