当前位置: 首页 > news >正文

DSP 的 CV 算子调用

01 前言

 

DSP 是 征程 5 上的数字信号处理器,专用于处理视觉、图像等信息。在 OE 包的 ddk/samples/vdsp_rpc_sample 路径下,提供了 DSP 使用示例,包括 nn 和 CV 两部分。

 

nn 示例涵盖了深度学习模型的相关算子,包括量化、反量化、Softmax 和雷达点云预处理;CV 示例展示了如何调用地平线基于 DSP 封装的图像处理算子,目前已支持 25 个,并且仍在持续扩充当中。

 

 

在正式阅读前,希望您已经对 DSP 的软硬件特点、编程思路和板端运行方法有基本的了解,关于这方面的内容可以阅读原文跳转社区搜索文章《DSP 开发快速上手》。

 

 

02 CV 算子支持列表

 

截止 J5 OE v1.1.62,DSP 已经支持了 25 个 CV 算子:

 

图片

 

CV 算子相关的数据类型、数据结构、配置参数、图片约束等信息,可以查看 征程 5 工具链手册的《DSP 运行时 API 手册》。我们正在持续扩充 DSP 支持的 CV 算子数量,同时也在让已有的 CV 算子能支持更多的输入数据类型。

 

 

03 CV 示例文件介绍

 

OE 包的 ddk/samples/vdsp_rpc_sample 目录包含了大量的 CV 示例,文件结构如下:

 

+---vdsp_rpc_sample
│── arm                                          # arm侧
│   ├── cv
│   │   ├── build_arm.sh                         # arm侧构建脚本
│   │   ├── CMakeLists.txt
│   │   ├── main.cc                              # main函数
│   │   └── src                                  # cv算子示例源文件目录
│   └── nn
├── dsp
│   ├── build_dsp.sh                             # dsp侧构建脚本
│   ├── CMakeLists.txt
│   ├── src                                      # dsp算子实现目录
│   └── main.cc                                  # 编译dsp镜像的源码
├── script
│   ├── cv
│   │   ├── run_cv_test.sh                       # 运行示例脚本
│   │   ├── bin                                  # 可执行程序目录
│   │   └── data                                 # 图像目录
│   ├── nn
│   ├── image
│   └── lib
├── deps
└── README.md

 

  • arm:arm 侧示例,封装了常用 api,主要负责发起 RPC 调用,接收 dsp 处理结果。

    • cv:cv 示例,包含了图片处理的 cv 算子示例。

    • nn:nn 示例,包含 quantize 和 dequantize api,自定义算子 softmax 以及 pointpillar 前处理。

  • dsp:dsp 侧示例,实现了 dsp 算子功能,主要负责接收 arm 侧发来的任务,完成 softmax 等算子的计算,将结果发送给 arm。

    • src:包含 quantize 和 dequantize api,以及自定义算子 softmax 以及 pointpillar 前处理的 dsp 侧实现。

  • script:示例的生成文件及脚本目录。

    • cv:包含 cv 示例的可执行文件、输入数据及执行脚本。

    • nn:包含 nn 示例的可执行文件、输入数据、模型及执行脚本。

    • image: DSP 镜像目录。

    • lib: 可执行程序的依赖库目录。

  • deps:所有示例的依赖文件目录。

    • aarch64:arm 侧的依赖目录。

    • vdsp:dsp 侧的依赖目录。

       

+---arm/cv├── CMakeLists.txt├── build_arm.sh├── main.cc└── src├── common.h├── img_util.cc├── img_util.h├── test_bilateral_filter.cc├── test_box_filter.cc├── test_canny.cc├── test_corner_harris.cc├── test_cvt_color.cc├── test_dilate.cc├── test_equalize_hist.cc├── test_erode.cc├── test_filter2D.cc├── test_flip.cc├── test_gaussian_blur.cc├── test_integral.cc├── test_median_blur.cc├── test_pyr_down.cc├── test_pyr_up.cc├── test_remap.cc├── test_resize.cc├── test_roi_resize.cc├── test_rotate.cc├── test_sep_filter2D.cc├── test_sobel.cc├── test_threshold.cc├── test_transpose.cc├── test_warp_affine.cc└── test_warp_perspective.cc

 

在 arm/cv/src 文件夹内,包含了当前的 25 个 CV 算子在 ARM 侧调用的示例,这些示例以 test_开头,其余的 common.h、img_util.cc、img_util.h 是示例运行的必备组件。

 

CV 文件夹的 main.cc 集成了调用 25 个 CV 算子的完整功能,CMakeLists.txt 是编译必备的配置文件,执行 build_arm.sh 后,即可编译出可上板运行的可执行文件即相关依赖,这些生成的文件会自动存放进 script 目录中。我们已提供了编译好的上述文件,无需用户重复编译。

 

├── deps
|   ├── aarch64
|   └── vdsp   
└── dsp├── CMakeLists.txt├── build_dsp.sh├── main.cc└── src

 

CV 算子的 DSP 实现源码是非开源的,地平线封装成了 .a 文件以库的形式提供,存放在 deps/vdsp 相关目录下。dsp 目录下的 src 文件夹只包含 NN 算子的实现源码。main.cc 主要用于注册编写的 DSP 算子,CMakeLists.txt 是编译必备的配置文件,执行 build_dsp.sh 后,即可编译出可以在板端配置的 vdsp0 和 vdsp1 镜像,这两个镜像文件还会自动存放进 script/image 目录中。我们提供了已经编译好的镜像文件,无需用户重复编译。

 

 

04 CV 算子使用说明

 

由于 ARM 侧和 DSP 侧所有需要编译的文件都已经包括在了 OE 包当中,因此用户可以跳过编译这一步,直接将 script 文件夹复制到 征程 5 开发板上的可写路径下,如/userdata 目录。

 

此时我们可以编写一个 deploy.sh 脚本并执行,用于在 征程 5 开发板上部署 DSP 镜像:

echo stop > /sys/class/remoteproc/remoteproc1/state
echo stop > /sys/class/remoteproc/remoteproc2/state
echo -n "/userdata/script/image" > /sys/module/firmware_class/parameters/path
echo vdsp0 > /sys/class/remoteproc/remoteproc1/firmware
echo vdsp1 > /sys/class/remoteproc/remoteproc2/firmware
echo start > /sys/class/remoteproc/remoteproc1/state
echo start > /sys/class/remoteproc/remoteproc2/state

 

之后执行以下命令,给予 dsp_relay_server 和 test_cv 文件可执行权限:

chmod 777 /userdata/script/lib/dsp_relay_server
chmod 777 /userdata/script/cv/bin/test_cv

 

最后进入 script/cv 文件夹,执行以下命令即可运行全部 25 个 CV 算子示例:

sh run_cv_test.sh

用户也可以通过追加参数的形式指定需要执行的算子,如:

sh run_cv_test.sh roiResize

可以通过在脚本中追加参数 help 来显示所有可执行算子。

以 roiResize 为例,该算子的执行结果如下图所示:

 

图片

 

此时,在/userdata/script/cv/目录下会生成一个 output 文件夹,保存了图像处理结果,roiResize 算子的输出文件名为 roi_resize_output.480x380.yuv,原始输入图像为/userdata/script/cv/data/500x480.lena.yuv。

 

我们可以使用 YUV 可视化工具 YUView 查看图片的处理效果,该工具的下载地址为:https://github.com/IENT/YUView/releases

 

原始数据和处理结果的可视化效果图如下所示:

 

图片

 

图片

 

关于 RoiResize 算子的执行过程分析,以及详细的 ARM 侧调用代码解读,可以参考社区文章《在 J5 上使用 DSP 进行 RoiResize》。

相关文章:

DSP 的 CV 算子调用

01 前言 DSP 是 征程 5 上的数字信号处理器,专用于处理视觉、图像等信息。在 OE 包的 ddk/samples/vdsp_rpc_sample 路径下,提供了 DSP 使用示例,包括 nn 和 CV 两部分。 nn 示例涵盖了深度学习模型的相关算子,包括量化、反量化、…...

WMI攻击-基础篇(一)

#WMI攻击-基础篇(一) 这篇文章是关于WMI攻击系列文章的第一部分,面向新手。如果对Powershell有一定了解会对阅读本文有所帮助,但这并不是必需的,我们直接上干货。 #1、概述 为什么是WMI? WMI 是 Microso…...

使用Pygame创建一个简单的消消乐游戏

消消乐游戏是一种经典的益智游戏,玩家通过交换相邻的方块来形成三个或更多相同颜色的连续方块,从而消除它们。本文将介绍如何使用Python的Pygame库来创建一个简单的消消乐游戏。 准备工作 在开始之前,请确保已安装Pygame库。可以通过以下命…...

证明直纹面是可展曲面沿着直母线,曲面的切平面不变

目录 证明直纹面是可展曲面的当且仅当沿着直母线,曲面的切平面不变 证明直纹面是可展曲面的当且仅当沿着直母线,曲面的切平面不变 直纹面是可展曲面当且仅当沿着直母线,曲面的切平面不变. 证明:设直纹面 S S S的参数式为 r ( u …...

Chrome控制台 网站性能优化指标一览

打开chrome-》f12/右键查看元素-》NetWrok/网络 ctrlF5 刷新网页,可以看到从输入url到页面资源请求并加载网页,用于查看资源加载,接口请求,评估网页、网站性能等,如下图: request、stransferred、resour…...

Typora创建markdwon文件的基础语法

标题的创建 使用#空格xxx 可使xxx为标题,同时第一标题为#空格标题;第二标题为##空格标题2。以此类推最多可创建六个标题。 同时按住Ctrl1可创建第一标题,同时按住Ctrl2可创建第二标题,以此类推,最多可创建六个标题。也…...

《嵌入式硬件设计》

一、引言 嵌入式系统在现代科技中占据着至关重要的地位,广泛应用于消费电子、工业控制、汽车电子、医疗设备等众多领域。嵌入式硬件设计作为嵌入式系统开发的基础,直接决定了系统的性能、可靠性和成本。本文将深入探讨嵌入式硬件设计的各个方面&#xff…...

【AIGC】大模型面试高频考点-位置编码篇

【AIGC】大模型面试高频考点-位置编码篇 (一)手撕 绝对位置编码 算法(二)手撕 可学习位置编码 算法(三)手撕 相对位置编码 算法(四)手撕 Rope 算法(旋转位置编码&#xf…...

如何使用 SQL 语句创建一个 MySQL 数据库的表,以及对应的 XML 文件和 Mapper 文件

文章目录 1、SQL 脚本语句2、XML 文件3、Mapper 文件4、启动 ServiceInit 文件5、DataService 文件6、ComplianceDBConfig 配置文件 这个方式通常是放在项目代码中,使用配置在项目的启动时创建表格,SQL 语句放到一个 XML 文件中。在Spring 项目启动时&am…...

Unity性能优化---动态网格组合(二)

在上一篇中,组合的是同一个材质球的网格,如果其中有不一样的材质球会发生什么?如下图: 将场景中的一个物体替换为不同的材质球 运行之后,就变成了相同的材质。 要实现组合不同材质的网格步骤如下: 在父物体…...

JVM学习《垃圾回收算法和垃圾回收器》

目录 1.垃圾回收算法 1.1 标记-清除算法 1.2 复制算法 1.3 标记-整理算法 1.4 分代收集算法 2.垃圾回收器 2.1 熟悉一下垃圾回收的一些名词 2.2 垃圾回收器有哪些? 2.3 Serial收集器 2.4 Parallel Scavenge收集器 2.5 ParNew收集器 2.6 CMS收集器 1.垃圾…...

GPS模块/SATES-ST91Z8LR:电路搭建;直接用电脑的USB转串口进行通讯;模组上报定位数据转换地图识别的坐标手动查询地图位置

从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...

什么是TCP的三次握手

TCP(传输控制协议)的三次握手是一个用于在两个网络通信的计算机之间建立连接的过程。这个过程确保了双方都有能力接收和发送数据,并且初始化双方的序列号。以下是三次握手的详细步骤: 第一次握手(SYN)&…...

《Clustering Propagation for Universal Medical Image Segmentation》CVPR2024

摘要 这篇论文介绍了S2VNet,这是一个用于医学图像分割的通用框架,它通过切片到体积的传播(Slice-to-Volume propagation)来统一自动(AMIS)和交互式(IMIS)医学图像分割任务。S2VNet利…...

Linux ifconfig ip 命令详解

简介 ifconfig 和 ip 命令用于配置和显示 Linux 上的网络接口。虽然 ifconfig 是传统工具,但现在已被弃用并被提供更多功能的 ip 命令取代。 ifconfig 安装 sudo apt install net-toolssudo yum install net-tools查看所有活动的网络接口 ifconfig启动/激活网络…...

Vue3 对于echarts使用 v-show,导致显示不全,宽度仅100px,无法重新渲染的问题

参考链接:解决Echarts图表使用v-show,显示不全,宽度仅100px的问题_echarts v-show图表不全-CSDN博客 Vue3 echarts v-show无法重新渲染的问题_v-show echarts不渲染-CSDN博客 原因不多赘述了,大概就是v-show 本身是结构已经存在,当数据发生…...

C++实现俄罗斯方块

俄罗斯方块 还记得俄罗斯方块吗?相信这是小时候我们每个人都喜欢玩的一个小游戏。顾名思义,俄罗斯方块自然是俄罗斯人发明的。这人叫阿列克谢帕基特诺夫。他设置这个游戏的规则是:由小方块组成的不同形状的板块陆续从屏幕上方落下来&#xf…...

鸿蒙分享:添加模块,修改app名称图标

新建公共模块common 在entry的oh-package.json5添加dependencies,引入common模块 "dependencies": {"common": "file:../common" } 修改app名称: common--src--resources--string.json 新增: {"name&q…...

扫描IP段内的使用的IP

扫描IP段内的使用的IP 方法一:命令行 命令行进入 for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.3.%iarp -a方法二:python from scapy.all import ARP, Ether, srp import keyboarddef scan_network(ip_range):# 创建一个ARP请求包arp ARP(pds…...

【专题】虚拟存储器

前文提到的存储器管理方式有一个共同的特点,即它们都要求将一个作业全部装入内存后方能运行。 但有两种特殊情况: 有的作业很大,其所要求的内存空间超过了内存总容量,作业不能全部被装入内存,致使该作业无法运行&#…...

【工业相机】大恒万兆网相机原生RS232串口调试|无需转换板、直连通信、最简接线教程(实测)

【工业相机】大恒万兆网相机原生RS232串口调试|无需转换板、直连通信、最简接线教程(实测)📑 前言一、硬件说明二、最简接线方式(重点)2.1 接线逻辑2.2 实物接线(直接照抄)2.3 通俗口…...

2026年阿里云OpenClaw/Hermes Agent配置Token Plan新手友好流程

2026年阿里云OpenClaw/Hermes Agent配置Token Plan新手友好流程。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

2026年5款专业气象数据可视化软件大盘点

在科技飞速发展的今天,气象可视化作为一种将复杂气象数据转化为直观图像的技术,正发挥着越来越重要的作用。它不仅为气象工作者提供了便捷的数据分析手段,也让普通大众能够轻松理解天气变化。接下来,让我们一起深入了解气象可视化…...

深入CAN总线时序测试:如何用PicoScope精准测量Tbit与Tmess(以CAN ID 0x380为例解析异常)

深入CAN总线时序测试:如何用PicoScope精准测量Tbit与Tmess(以CAN ID 0x380为例解析异常) 在汽车电子和工业控制领域,CAN总线的时序一致性测试是确保通信可靠性的关键环节。当工程师面对Tbit计算结果异常或特殊报文结构时&#xff…...

【网络安全】Web安全防护:从XSS到CSRF的攻防实战

【网络安全】Web安全防护:从XSS到CSRF的攻防实战 引言 Web安全是现代应用开发中不可忽视的重要环节。随着Web应用的普及,各种安全威胁也日益增多。本文将详细介绍常见的Web安全漏洞及其防护方法。 一、XSS攻击与防护 1.1 XSS类型 类型说明攻击方式存储型…...

1951-2025年中国1km月平均气温逐年变化率数据集

摘要本数据集为中国1000米分辨率月平均气温数据集(1951-2025)衍生生成的“1951-2025年中国1千米月平均气温逐年变化率数据集”产品,输出格式为TIF,覆盖中国范围,时间表达为1951-2025年。产品围绕“年际变化率”算法组织…...

COMTool图表插件使用教程:实时数据可视化与曲线绘制完整指南

COMTool图表插件使用教程:实时数据可视化与曲线绘制完整指南 【免费下载链接】COMTool Cross platform communicate assistant(Serial/network/terminal tool)( 跨平台 串口调试助手 网络调试助手 终端工具 linux windows mac Raspberry Pi )…...

告别HDR格式混乱:用Python代码实战HLG与PQ曲线互转(附完整代码)

告别HDR格式混乱:用Python代码实战HLG与PQ曲线互转(附完整代码) 在视频处理领域,HDR(高动态范围)技术已经成为提升视觉体验的关键要素。然而,HLG(Hybrid Log-Gamma)和PQ&…...

【C++】类和对象( 类的定义、实例化、 this指针、 C++和C语言实现Stack对比)

小编主页详情<-请点击 小编gitee代码仓库<-请点击 本文主要介绍了类和对象&#xff08; 类的定义、实例化、 this指针、 C和C语言实现Stack对比&#xff09;&#xff0c;内容全由作者原创&#xff08;无AI&#xff09;&#xff0c;并带有配图帮助博友们更好的理解&#x…...

盒子定位(Mac版)

Mac版写HTML与Windows版不同&#xff0c;但思路不变。首先&#xff0c;创建HTML文件&#xff0c; 通过快捷键commandspace 搜索“文本编辑”App。接下来&#xff0c;点击新建文稿将文稿重命名&#xff0c;改为html后缀结尾&#xff0c;如下图所示通过选择VScode的打开方式&…...