Tengine 边缘AI计算框架移植RV1126(包括opencv的交叉编译)

目录

1.编译opencv

2.拷贝SDK源码到虚拟机

3. 拉取TIM-VX代码

4.拉取Tengine源码并配置


1.编译opencv

编译opencv是为了,在编译Tengine时指定OpenCVConfig.cmake,以便寻找特定的opencv动态库

01.从github拉取opencv源代码

git clone -b 4.5.5 https://github.com/opencv/opencv.git 

02.在虚拟机安装cmake

sudo apt-get update 
sudo apt-get install cmake 

04.解压opencv源码,并进入文件

05.新建文件ax620a.toolchain.cmake配置交叉编译工具链

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)#如果未设置交叉编译器到环境变量,要加入绝对路径,我这里已经加入到环境变量中了
set(CMAKE_C_COMPILER "arm-linux-gnueabihf-gcc")
set(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++")set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)set(CMAKE_C_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon")
set(CMAKE_CXX_FLAGS "-march=armv7-a -mfloat-abi=hard -mfpu=neon")# cache flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")

06.创建build文件夹并配置cmake

mkdir build && cd build 
#sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=./build -D OPENCV_ENABLE_NONFREE=True -DCMAKE_TOOLCHAIN_FILE=../ax620a.toolchain.cmake -D WITH_FFMPEG=ON ../
# -D CMAKE_INSTALL_PREFIX指定编译后的安装路径
# -D CMAKE_BUILD_TYPE=Release优化编译,删除没必要的调试信息等
# -D OPENCV_ENABLE_NONFREE开启了非自由模块的支持
# -DCMAKE_TOOLCHAIN_FILE指定了交叉编译工具链文件的位置
# -D WITH_FFMPEG开启了FFmpeg的支持
cmake -DCMAKE_TOOLCHAIN_FILE=../ax620a.toolchain.cmake -DCMAKE_INSTALL_PREFIX=$(pwd)/_install -DOPENCV_FORCE_3RDPARTY_BUILD=ON ../

07.编译并安装

#sudo make && make install
make -j$(nproc --ignore 1)

查看在build目录下是否存在OpenCVConfig.cmake文件

2.拷贝SDK源码到虚拟机

SDK源码中带有Tengine需要的动态库,所以必须把SDK源码拷贝到虚拟机

3. 拉取TIM-VX代码

git clone https://github.com/VeriSilicon/TIM-VX.git
cd TIM-VX
git checkout 68b5acb

4.拉取Tengine源码并配置

01拉取代码

git clone https://github.com/OAID/Tengine.git tengine-lite
cd tengine-lite

02.将 TIM-VX 的 include 和 src 目录复制到 Tengine-Lite 的 source/device/tim-vx 目录下,以便于 CMake 查找文件完成编译

cd tengine-lite
cp -rf ../TIM-VX/include  ./source/device/tim-vx/
cp -rf ../TIM-VX/src      ./source/device/tim-vx/

03. 准备 x86_64 3rdparty 依赖

准备的 include 目录和 VIM3/VIM3L 本地编译 NPU 最新版本相同,下载一份 perbuild SDK,将其中的 include 文件夹复制到 3rdparty/tim-vx 目录。 依赖的 lib 目录下的文件需要从前面 SDK 中解压出来的 external/rknpu/drivers/linux-armhf-puma/usr/lib 目录提取。将该目录下的文件全部(实际上不需要全部复制,FAQ 有文件列表)复制到 3rdparty/tim-vx/lib/aarch32 文件夹下即可

wget -c https://github.com/VeriSilicon/TIMVX/releases/download/v1.1.28/aarch64_S905D3_D312513_A294074_R311680_T312233_O312045.tgz
tar zxvf aarch64_S905D3_D312513_A294074_R311680_T312233_O312045.tgz
mv aarch64_S905D3_D312513_A294074_R311680_T312233_O312045 prebuild-sdk-s905d3
cd tengine-lite
mkdir -p ./3rdparty/tim-vx/include
mkdir -p ./3rdparty/tim-vx/lib/aarch32
cp -rf ../prebuild-sdk-s905d3/include/*   ./3rdparty/tim-vx/include/
cp -rf <rk_sdk_npu_lib>/*                 ./3rdparty/tim-vx/lib/aarch32/
#<rk_sdk_npu_lib>是external/rknpu/drivers/linux-armhf-puma/usr/lib 

 04.修改cmake文件

cd toolchains
vi arm-linux-gnueabihf.toolchain.cmake 

 修改为绝对路径

05.设置 OpenCV_DIR 环境变量

设置 OpenCV_DIR 环境变量是为了指定OpenCVConfig.cmake文件的路径

exoprt OpenCV_DIR=/home/alientek/opencv-4.x/build

06.编译

cd tengine-lite-root-dir
mkdir build && cd build
export PATH=<cross_tool_chain>/bin:$PATH
ln -s ../3rdparty/tim-vx/lib/aarch32/libOpenVX.so.1.2 ../3rdparty/tim-vx/lib/aarch32/libOpenVX.so
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/arm-linux-gnueabihf.toolchain.cmake  -DTENGINE_ENABLE_TIM_VX=ON -DTENGINE_OPENMP=OFF ..
make -j`nproc` && make install

提取 install 目录下的文件到板子上测试即可。需要注意的是,不设置OpenCV_DIR环境变量部分 OpenCV 依赖的 example 在这个过程中不会编译,需要先准备好交叉编译的OpenCV,并正确设置 OpenCV_DIR 到环境变量中方可打开这部分 example 的编译。(咱们已经设置过了)可以看到,我们把所有组件都编译出来了

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

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

相关文章

【AIFEM案例操作】水轮机转轮强度和模态分析

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…

DICOM图像像素值、灰度值与CT值的解释及关系

​DICOM图像像素值、灰度值与CT值之间的关系可以通过以下方式进行解释&#xff1a; DICOM图像像素值&#xff1a;在DICOM图像中&#xff0c;像素值是用来表示图像信息的基本单位。这些值通常在0-4096的范围内&#xff0c;反映了图像的像素亮度。 DICOM图像灰度值&#xff1a;灰…

H264短期参考帧和长期参考帧

问题引出 最近在做短期参考帧的marking操作时发现一个问题,我的预期是用两个短期参考帧,其中一个短期参考帧为当前帧的前一帧,另一个为距离当前位置较远的一个帧。 在大多数的帧都没有问题,但是在个别帧的位置会发生参考帧列表中帧的顺序和预期不一致的情况,我在第28帧的…

SLAM算法中状态估计的算法有哪些?

状态估计 在SLAM(Simultaneous Localization and Mapping)中,状态估计是核心组件之一,其主要目的是估计机器人的轨迹(或姿态)和地图特征的位置。针对不同的传感器、场景和应用,已经发展出了多种状态估计方法。以下是一些主要的状态估计方法: 扩展卡尔曼滤波(Extended…

多测师肖sir_高级金牌讲师___python之json模块

python之json模块 python标准模块之json 定义&#xff1a;json &#xff08;java script object notation&#xff09;是轻量级的文本数据交换格式 案例json&#xff1a; json和字典 一样 一、json模块可以实现json数据的序列化和反序列化 &#xff08;1&#xff09;序列化…

Linux常用命令——comm命令

在线Linux命令查询工具 comm 两个文件之间的比较 补充说明 comm命令可以用于两个文件之间的比较&#xff0c;它有一些选项可以用来调整输出&#xff0c;以便执行交集、求差、以及差集操作。 交集&#xff1a;打印出两个文件所共有的行。求差&#xff1a;打印出指定文件所包…

django无法导入第三方库

引子 有的人可能会很困惑&#xff0c;为什么自己在pip中安装了某个包&#xff0c;但是在django中死活无法导入。 在cmd中能够导入。 启动django&#xff0c;总是无法导入。 本文将会用一分钟解决你的困惑。 正文 那么本文以上述的第三方库dj_db_conn_pool为例&#xff0c;…

WuThreat身份安全云-TVD每日漏洞情报-2023-10-16

漏洞名称:Apache HTTP/2 安全漏洞 漏洞级别:高危 漏洞编号:CVE-2023-44487,CNVD-2023-75597,CNNVD-202310-667 相关涉及:Google Cloud Platform 漏洞状态:POC 参考链接:https://tvd.wuthreat.com/#/listDetail?TVD_IDTVD-2023-25208 漏洞名称:Adobe Commerce and Magento Ope…

汽车智能制造中的RFID技术在供应链生产管理中的应用

行业背景 汽车零部件工业是汽车工业中至关重要的一部分&#xff0c;对于汽车工业的长期稳定发展起着基础性的作用&#xff0c;近年来&#xff0c;汽车配件配套市场规模达到了2000亿元&#xff0c;维修市场达到了600亿元&#xff0c;随着汽车国产化的推进&#xff0c;汽车零部件…

k8s 暴露pod

kubenretes中暴露Pod及Service的6种方式 &#xff0c;分别为port_forward、hostNetwork、hostPort、nodePort、loadBalancer、Ingress。 下面讲下nodeport nodePort Kubernetes中的service默认情况下都是使用的ClusterIP这种类型&#xff0c;这样的service会产生一个Cluster…

Webpack5 htmlwebpackplugin用法

文章目录 HtmlWebpackPlugin介绍HtmlWebpackPlugin用法1. 安装HtmlWebpackPlugin插件&#xff1a;2. 引入HtmlWebpackPlugin插件&#xff1a;3. 配置HtmlWebpackPlugin&#xff1a;4. 更多HtmlWebpackPlugin配置选项&#xff1a; 总结 HtmlWebpackPlugin介绍 Webpack是一个功能…

Linux命令及命令来源

Linux是一个强大的操作系统&#xff0c;拥有许多内建的命令。以下是常见的Linux命令及其简单的解释和用法&#xff1a; ls&#xff1a;列出目录内容。 来源&#xff1a;list。用法&#xff1a;ls、ls -l、ls -a cd&#xff1a;改变当前目录。 来源&#xff1a;change director…

AMEYA360-罗姆ROHM马来西亚工厂新厂房竣工

全球知名半导体制造商罗姆为了加强模拟IC的产能&#xff0c;在其马来西亚制造子公司ROHM-Wako Electronics (Malaysia) Sdn. Bhd.(以下简称“RWEM”)投建了新厂房&#xff0c;近日新厂房已经竣工&#xff0c;并举行了竣工仪式。 RWEM此前主要生产二极管和LED等小信号产品&#…

Linux网络编程系列之UDP广播

Linux网络编程系列 &#xff08;够吃&#xff0c;管饱&#xff09; 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…

Django ORM查询

Django提供了一套非常方便的类似SqlAlchemy ORM的通过对象调用的方式操作数据库表的ORM框架。 Django ORM操作主要分为以下几类&#xff1a; 增&#xff1a;向表内插入一条数据删&#xff1a;删除表内数据&#xff08;物理删除&#xff09;改&#xff1a;update操作更新某条数…

数字化 | 智能电子日历

想要一款随时随地都能掌握日期的电子日历吗&#xff1f; WiFi通信&#xff0c;实时更新&#xff0c;超低功耗&#xff0c;可充电&#xff0c;超长续航&#xff0c;电子纸&#xff0c;黑白红三色显示的电子日历&#xff0c;就是你的最佳选择&#xff01; 无论是在办公室、家中或…

QCC51XX-QCC30XX系列开发教程(实战篇) 之 12.4-空间音频手机侧和耳机侧接口设计时序图

查看全部教程开发请点击:全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中) ==================================================================== 版权归作者所有,未经允许,请勿转载。 ==========================================

自建应用-企业微信-侧边栏开发配置

企业微信侧边栏开发配置 配置侧边栏配置后效果图js-sdk 配置侧边栏 配置后效果图 js-sdk https://developer.work.weixin.qq.com/document/path/91789

“系统重要性银行”光环下,南京银行的重重忧思

撰稿|行星 来源|贝多财经 南京银行喜忧参半&#xff0c;提名系统重要性银行&#xff0c;还面临信誉老题、业绩新题难解的问题。 近期&#xff0c;中国人民银行、国家金融监督管理总局开展了2023年度我国系统重要性银行评估&#xff0c;认定20家国内系统重要性银行&#xff0…

如何分析K8S中的OOMKilled问题(Exit Code 137)

什么是 OOMKilled Kubernetes 错误&#xff08;Exit Code 137&#xff09; 当 Kubernetes 集群中的容器超过其内存限制时&#xff0c;Kubernetes 系统可能会终止该容器并显示“OOMKilled”错误&#xff0c;这表明该进程由于内存不足而被终止。此错误的退出代码是 137。 如果遇…