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;加速产…

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

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

多测师肖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;…

汽车智能制造中的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…

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网络编程系列之服务器编…

数字化 | 智能电子日历

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

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

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

代码随想录算法训练营第二十五天丨 回溯算法part03

39. 组合总和 思路 题目中的无限制重复被选取&#xff0c;提示&#xff1a;1 < candidates[i] < 200。 本题和77.组合 (opens new window)&#xff0c;216.组合总和III (opens new window)的区别是&#xff1a;本题没有数量要求&#xff0c;可以无限重复&#xff0c;但…

记录:移动设备软件开发(layout六大布局)

目录 前言layoutLinearLayout线性布局LinearLayout的常用属性Android&#xff1a;orientation属性Android&#xff1a;gravity属性 TableLayout表格布局TableLayout的常用属性collapsecolumns属性shrinkcolums属性stretchcoumns属性 RelativeLayout相对布局Absolute Layout绝对…

构造shiro poc

攻击shiro思路 伪造加密过程 shiro在容器初始化的时候会实例化CookieRememberMeManager对象&#xff0c;并且设置加密解密方式 实例化时调用父类构造方法&#xff0c;设置加密方式为AES&#xff0c;并且设置key 看下调用栈 <init>:109, AbstractRememberMeManager (org…

python数据挖掘从入门到实战

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

电商独立站小程序开发方案

随着移动互联网的迅速发展&#xff0c;电商行业也逐渐向小程序平台转移。开发一款电商小程序对于拓展销售渠道、提高用户体验、增加用户忠诚度等方面都有着重要的意义。本文将围绕电商小程序的开发背景、需求分析、技术选型、开发流程、风险控制、商业模式和市场前景等方面进行…

python代码调用文件或数据库中保存的脚本

这里采用的读取excel 1、先写一个测试方法 def demo5():import xlrdimport randomwb xlrd.open_workbook("code.xls")st wb.sheet_by_index(0)code st.cell_value(0, 0)list ["6666", asd, 1ad23, 1f23, 12g3, 1b3, 12r3]code2 st.cell_value(0, 1)…

JVS规则引擎及智能BI又更新新功能啦!赶紧来试试

规则引擎更新功能 新增: 1.复合变量新增排序、排名功能 可以按照特定的顺序对数据进行排列&#xff0c;确定规则的优先级&#xff0c;可以提高数据处理效率&#xff0c;帮助分析人员更好地了解数据分布和趋势。 2.决策流新增动态日志功能 动态日志可以记录规则执行的过程和…

Jmeter性能测试(压力测试)

1.先保存 2.添加请求&#xff08;即添加一个线程组&#xff09; 3.添加取样器&#xff08;在线程组下面添加一个http请求&#xff09; 场景1&#xff1a;模拟半小时之内1000个用户访问服务器资源&#xff0c;要求平均响应时间在3000毫秒内&#xff0c;且错误率为0&#xff0…

【Linux初阶】多线程4 | POSIX信号量,基于环形队列的生产消费模型,线程池,线程安全的单例模式,STL-智能指针和线程安全

文章目录 ☀️一、POSIX信号量&#x1f33b;1.引入&#x1f33b;2.信号量的概念&#x1f33b;3.信号量函数 ☀️二、基于环形队列的生产消费模型&#x1f33b;1.理解环形队列&#x1f33b;2.代码案例 ☀️三、线程池☀️四、线程安全的单例模式&#x1f33b;1.单例模式与设计模…