征程 6E/M 快速上手实战 Sample-PYM

01 IPC模块简述

1.1 硬件数据流

PYM(Pyramid)作为一个硬件加速模块(图像缩小及 ROI 提取),对输入的图像按照金字塔图层的方式处理,并输出到 DDR:

PYM 模块在 Camsys 子系统的数量和位置如下,总共 3 个 PYM 硬件,PYM0、PYM1、PYM4(只支持 offline)。

1.2 PYM-Sample 软件架构

本文的 demo sample 采用回灌流程,即从系统存储中读取文件,作为 PYM 的输入图像。调用 VIO API 实现整个数据通路初始化并完成 PYM 处理。

1.3 PYM-Sample

#Sample源码路径/test/samples/platform_samples/source/S83_Sample/S83E04_Module/pym_sample#cfg中包含了VPM配置文件,res包含了YUV图像资源文件#src下pym_sample.c为sample源代码

*1.3.1 API 调用流程*

1.3.2 Sample 源码解析

get_opts_for_pym():配置参数

配置 pym 设备参数,下面是具体参数说明:

int32_t hb_vio_init(const char *cfg_file):*本 Sample 中为单进程模式

读取:"/sys/module/hobot_vio_common/parameters/vio_mp_en" 判断是否多进程模式。

单进程:根据 VPM 配置文件(-v)初始化每个 VIO 管道。对于初始化错误的管道回滚进行反初始化。

多进程:根据 VPM 配置文件(-v)初始化每个 VIO 管道。创建套接字并根据"/var/vio_service.unix"连接服务器并向 server 发送初始化的 VIO 管道。

int32_t hb_vio_start_pipeline(uint32_t pipeline_id):

单进程:根据 id 启动 VIO 管道中的实体并激活每个 VFlow 流程中的所有节点(vnode)。

多进程:发送启动命令给 server 以启动 VIO 管道,接受 server 返回的信息。

pym_feedback_worker_func:

int32_t hb_vio_get_data(uint32_t pipeline_id, VIO_DATA_TYPE_E data_type, void *data):

单进程:根据管道句柄和类型获取信息;

多进程:发送获取数据命令给 server,接受返回的信息。

int read_yuv420_file(const char *filename, char addr0, char** addr1,** uint32_t y_size):

解析 yuv 文件信息。

int32_t hb_vio_run_pym(uint32_t pipeline_id, hb_vio_buffer_t *src_img_info):

单进程:将缓冲区类型从 VIO 缓冲区转换为 VNODE 实体,将图像数据转换为帧描述符格式排入设备队列并轮询以获取结果。

多进程:获取图像缓冲区的地址,向 server 发送空闲 pym 信息,接受 server 返回的信息。

int32_t hb_vio_free_pymbuf(uint32_t pipeline_id, VIO_DATA_TYPE_E data_type, void *img_info):

单进程:根据管道 id 和类型释放内存。

多进程:向 server 发送释放内存命令,接受返回信息。

02 Sample 使用

2.1 编译

获取 AppSDK 包后,进入 appuser 执行:

*其中 hbrootfs-sdk_0.0.1.XXX_all.deb 是地平线自己的库和头文件,rootfs-sdk-focal_0.0.1.XXX_all.deb 是系统库,aarch64-linux-hb-gcc_12.2.0_amd64.deb 是 gcc 12.2.0 工具链,目前在 ubuntu22.04 非 docker 环境下运行正常。其它环境不能保证。

dpkg-deb -x rootfs-sdk*.deb ./sdkdpkg-deb -x hbrootfs-sdk*.deb ./sdk##移动sdk库路径,本文档放入/usr/lib中sudo mv sdk/ /usr/lib

进入 toolchain 执行:

dpkg -x aarch64-linux-hb-gcc_12.2.0_amd64.deb ./arm-gnu-toolchain##移动toolchain库路径,本文档放入/usr/lib中sudo mv arm-gnu-toolchain/ /usr/libnano ~/.bashrc##添加系统路径export PATH="/usr/lib/arm-gnu-toolchain/bin:$PATH"export LD_LIBRARY_PATH="/usr/lib/arm-gnu-toolchain/lib:$LD_LIBRARY_PATH"##source ~/.bashrc

Sample 代码路径:

#Sample源码路径/test/samples/platform_samples/source/S83_Sample/S83E04_Module/pym_sample

复制/src 源码到新建文件夹 pym 并构建新 Makefile:

*cfg 和 res 也拷贝到该目录

pym├── cfg│   └── 1v_cpe0_ddr_pym0_4k│       └── vpm_config.json├── Makefile├── res│   └── 4k.yuv└── src    └── pym_sample.c

Makefile:

CROSS_COMPILE = aarch64-none-linux-gnu-OUTPUT_HBROOTFS_DIR = /usr/lib/sdkCXX := ${CROSS_COMPILE}gccINC_DIR := ${OUTPUT_HBROOTFS_DIR}/usr/hobot/includeLIB_DIR := ${OUTPUT_HBROOTFS_DIR}/usr/hobot/lib LIB_DIR += ${OUTPUT_HBROOTFS_DIR}/usr/lib/aarch64-linux-gnuLIBS := -lvio -lpthread -lalog -lhbmem -lvpf -lgdcbin -lcam -lcjsonCXXFLAGS := -Wall -O2 -I$(INC_DIR)LDFLAGS := $(addprefix -L, $(LIB_DIR)) $(LIBS)SRC_DIR := srcTARGET := programSRCS := $(wildcard $(SRC_DIR)/*.c)OBJS := $(SRCS:.c=.o)$(TARGET): $(OBJS)    $(CXX) $(CXXFLAGS) $(LDFLAGS) $^ -o $@%.o: %.c    $(CXX) $(CXXFLAGS) -c $< -o $@clean:    rm -f $(OBJS) $(TARGET)

执行 make 完成编译,生成的文件为。/programD

2.2 文件传输

使用 WinScp 将 vpm_config.json、4k.yuv 和 program 传输到单板上。

*WinScp 使用方法请参考征程 6E/M 底软开发 Sample-IPC 2.1.2

2.3 运行

通过 ssh 或串口进入/home/hobot/执行:

./program -v vpm_config.json -y 4k.yuv -l 10 -s 1 -m 1

Sample 运行时日志:

[DBG] pym: pipe(0)Test pym work thread---running.[DBG] pym: pipe(0) pym feedback worker_thread Ready ![DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: filedump(3840x2160_pipe0_pym_ds0_f0_roi_1.yuv, size(8294400) is successed[DBG] pym: ds0 w3840xh2160 3840x2160_pipe0_pym_ds0_f0_roi_1.yuv[DBG] pym: filedump(1920x1080_pipe0_pym_ds1_f0_roi_1.yuv, size(2073600) is successed[DBG] pym: ds1 w1920xh1080 1920x1080_pipe0_pym_ds1_f0_roi_1.yuv[DBG] pym: filedump(960x540_pipe0_pym_ds2_f0_roi_1.yuv, size(518400) is successed[DBG] pym: ds2 w960xh540 960x540_pipe0_pym_ds2_f0_roi_1.yuv[DBG] pym: filedump(480x270_pipe0_pym_ds3_f0_roi_1.yuv, size(129600) is successed[DBG] pym: ds3 w480xh270 480x270_pipe0_pym_ds3_f0_roi_1.yuv[DBG] pym: filedump(240x134_pipe0_pym_ds4_f0_roi_1.yuv, size(32160) is successed[DBG] pym: ds4 w240xh134 240x134_pipe0_pym_ds4_f0_roi_1.yuv[DBG] pym: filedump(112x66_pipe0_pym_ds5_f0_roi_1.yuv, size(7392) is successed[DBG] pym: ds5 w112xh66 112x66_pipe0_pym_ds5_f0_roi_1.yuv[DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: (read_yuv420_file):file read(/4k.yuv), size(8294400)[DBG] pym: pipe(0) pym feedback worker thread quit ![DBG] pym: pipe(0)Test pym work thread---try stop.[DBG] pym: pipe(0)Test pym work thread---join done.

生成的缩放 yuv 文件存放在程序执行目录下。

检查生成的 yuv 文件,本文档使用 YUView:*请用户自行下载

将生成的文件传输给 window

使用 YUView 打开:

*请配置色度分量水平偏移量为 1/2:

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

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

相关文章

#CAMA | 以视觉为中心的静态地图元素标注方法

01 现有标注方法的局限性 在自动驾驶领域,静态地图元素的精确标注是实现高精度环境感知的关键。然而,现有的公共数据集在一致性和准确性方面存在局限,无法满足日益增长的高精度训练数据需求。图一展示了 nuScenes 数据集中的默认高清地图无法在一致性和准确性两个方面提供准…

巧手打字通-在线打字练习网站功能大全

巧手打字通 Hello,大家好,今天来给大家介绍一个实用的在线打字练习网站。就是我们看到的“巧手打字通”。一个专为打字初学者,特别是中小学生量身设计的专业性平台。 打开网站,我们可以看到,整个网站的课程设计主要分为:入门课程,学拼音,说英语,读诗词,弹钢琴,玩游戏…

大模型API实战-console.bce.baidu.com/qianfan/

百度千帆大模型平台API调用实战 需要注册并实名制,然后到模型服务-->模型推理,选择可以免费开通的模型开通(其他都是收费的有坑)ACCESS_KEY、SECRET_KEY 和 AK、SK的获取 ACCESS_KEY、SECRET_KEYpython调用 # 安装包(Python >= 3.7):pip install qianfan import os …

main() 方法

根据 Java 语言规范,main() 方法必须被申明为 public。在 Java 1.4 及之后的版本中,Java 解释器强制要求 main() 方法必须是 public。 Java 语言规范(Java Language and Virtual Machine Specifications) public:被 JVM 调用,访问权限足够大。 static:被 JVM 调用,不用…

敏捷开发中的类型关系

​​ 欢迎来到我的博客:计算机软件技术总结 ‍

Linux(centos)安装安全狗

Step1:下载linux安全狗 在安全狗官网直接下载软件安装包(.tar.gz 格式:safedog_linux64.tar.gz)使用finalshell将文件发送到centos指定文件夹 [root@localhost ~]# ls anaconda-ks.cfg original-ks.cfg safedog_linux64.tar.gz vulhubStep2:解压并安装 解压缩safedog_lin…

小程序授权登录前后端对接及用户信息完善

对接后台登录流程 微信官方早都已经禁止开发者直接通过 api 获取用户信息数据了,大家拿个用户的 openid 注册好,剩下的让用户填写就行了。 先上官方的经典登录流程图:步骤拆分解析:前端通过 调用官方 API wx.login,将回调中的 code 临时登陆凭证传递给(请求)后台 后台去…

Zabbix03 Zabbix自动化运维和性能优化高可性, Zabbix用Grafana图形展示

Zabbix 网络发现 专门有个进程扫描机器,比较耗资源,不太好(除非公司不大,添加的主机不多)Zabbix 自动注册 资源消耗少。agent必须是主动模式Zabbix API 实现自动化运维 先登录获取token,再携带token获取其他资源Zabbix 优化可以查看队列了解 Zabbix 性能状态 #web网页左侧…

第十四讲:答疑文章(一):日志和索引相关问题

第十四讲:答疑文章(一):日志和索引相关问题 简概:​ 到目前为止,我已经收集了 47 个问题,很难通过今天这一篇文章全部展开。所以,我就先从中找了几个联系非常紧密的问题,串了起来,希望可以帮你解决关于日志和索引的一些疑惑。而其他问题,我们就留着后面慢慢展开吧。…

大模型api实战-open.bigmodel.cn

注册登录后在个人中心的API keys中找到并复制推荐使用SDK,在虚拟环境安装 pip install zhipuai编辑python代码访问API获取响应 from zhipuai import ZhipuAI client = ZhipuAI(api_key="0c6df39e71b0a7340f221fddc1ddb711.au66Z02fXWc7SJBB") response = client.cha…

焦煤

这种走势概率大 目前在走3-5的跌势

linux虚拟机(centos)搭建sqli-labs

1.开启小皮2.查看文件位置 配置文件路径为/usr/local/phpstudy/soft [root@localhost soft]# cd /www/admin/localhost_80 [root@localhost soft]# pwd /usr/local/phpstudy/soft网站根目录为/www/admin/localhost_80/wwwroot [root@localhost localhost_80]# cd wwwroot [root…