专栏算法工具链J6E/M 多camera场景示例

J6E/M 多camera场景示例

新手村2025-06-29
320
0

1. 功能概述

本sample提供全链路场景1V,4V,7V使用演示,实现单路及多路VIO接入,逐级经过ISP、PYM、BPU、CODEC模块处理。

1.1. 软件架构说明

本sample调用VIO API来实现整个数据通路,实现单路、多路camera接入,并能够dump每一路数据的图像。调用BPU API使用BPU模块,并依赖 libhbucp.so 等库中的算法API实现对视频图像的目标检测与识别。调用MediaCodec API,经过VPU实现对视频图像的编码,保存为本地的H265格式视频。

软件控制图如下:

../../_images/vio_full_link_sample_soft.png

1.2. 硬件数据流说明

每个场景的图中已经标明硬件连接关系。

1V 场景如下:

../../_images/1V.png

4V 场景如下:

../../_images/4V.png

7V 场景如下:

../../_images/7V.png

1.24.1.3. 代码位置及目录结构

sample代码位置在SDK工程目录 {sdk_dir}/test/samples/platform_samples/source/S83_Sample/S83E06_Tros/vio_full_link_sample;

目录结构如下:

根目录包含 Kconfig 和外部接口的 Makefile, Kconfig 用于控制本sample是否加入整体编译; 根目录中的cfg目录包含本sample用到的JSON配置文件; lib目录包含本sample用到的动态库;res目录包含本sample用到的hbm模型文件。
src目录下的 Makefile 用于src目录下的编译; vio_full_link_sample.c 是main入口的所在文件; run_vio_full_link_sample.sh run_vio_full_link_sample_4V.sh run_vio_full_link_sample_7V.sh 是本sample在板端的运行脚本; src目录中的include目录为头文件所在目录;utils目录包含一些功能性代码。

1.4. API流程说明

API流程图如下:

../../_images/api_flow.png

需要注意的是,当将pym数据帧送入VPU编码时,对应buffer会先放入buf_ctl的状态队列中,当该帧编码完成后才会释放。

主干代码:

获取及处理数据的代码:

1.24.2. 编译

1.24.2.1. 编译环境

本sample的编译环境使用SDK中的build工具,请参考: Build环境建立

1.24.2.2. 编译说明

本sample编译依赖VPS系统相关的头文件:

使用BPU时,需要BPU模型处理相关的头文件:

使用VPU时,需要MM&CODEC系统相关的头文件:

使用hbplayer时,需要hbplayer相关的头文件:

sample编译依赖的库:

使能BPU编译依赖的库:

备注

当前本sample中使用的dnn版本: ucp_j6-v3.0.6_daily040101815

使能MM&Codec编译依赖的库:

使能hbplayer编译依赖的库:

编译命令:

3. 运行

3.1. 支持平台

Matrix 6E/M

3.2. 硬件环境搭建

接口连接如下:

../../_images/hardware.png

模组:联创模组OVX8B、OVX3C,SENSING-ISX031。

具体型号:

主前视联创x8b:LCE_M24F121D12_S1ROT8E5;

窄前视联创x8b:LCE_M24F30D12_S1ROT8E5;

后视联创x3c:LCE_GM24F60D12_S2T0E6;

4个周视联创x3c:LCE_GM24F103D12_S2R8T0E6;

4个环视森云isx031c:SENSING_M24F190D4_SOROT7。

连接方式:

一路OVX8B FOV120通过4合1线束的A口连接到板子的DES1;

一路OVX8B FOV30通过4合1线束的C口连接到板子的DES1;

一路OVX3C FOV60通过4合1线束的D口连接到板子的DES1;

四路OVX3C FOV100通过通过4合1线束的ABCD口连接到板子的DES2;

四路ISX031C通过4合1线束的ABCD口连接到板子的DES3。

1.24.3.3. 板端部署及配置

刷写系统软件镜像后,本sample的可执行文件位于板端: /app/sample/S83_Sample/S83E06_Tros/vio_full_link_sample/bin/;

需要用到的资源:

  • 需要用到的配置文件位于板端: /app/sample/S83_Sample/S83E06_Tros/vio_full_link_sample/cfg/;
  • 需要用到的资源文件位于板端: /app/sample/S83_Sample/S83E06_Tros/vio_full_link_sample/res/;
  • 需要用到的第三方库位于板端: /app/sample/S83_Sample/S83E06_Tros/vio_full_link_sample/lib/;

3.4. 运行指南

3.4.1. 运行方法

1V测试命令,可直接执行提供的sample运行脚本:

或使用完整指令:

4V测试命令,可直接执行提供的sample运行脚本:

或使用完整指令:

7V测试命令,可直接执行提供的sample运行脚本:

或使用完整指令:

3.4.2. 运行命令行说明

vio_full_link_sample :应用程序名字。

下面的表格是具体参数的说明:

参数名

用法

是否必需

-v

指定VIO的配置文件

-c

指定camera的配置文件

-O

指定hbm模型文件

使能BPU时必需

-m

pipeline的掩码,bit0代表pipeline0,bit1代表pipeline1,以此类推

-o

进行BPU处理的掩码,bit0代表处理pipeline0,bit1代表处理pipeline1,以此类推

使能BPU时必需

-j

进行CODEC处理的掩码,bit0代表处理pipeline0,bit1代表处理pipeline1,以此类推

使能codec时必需

-l

循环获取数据帧数

-s

开启dump,代表需要保存到当前运行目录下的数据帧数

-f

指定需要进行VPU硬件编码保存的数据帧数

-t

程序运行时间(单位毫秒,不建议与-l参数同时使用,使用其中一个即可)

-e

默认为-1,代表不使用hbplayer;当使能codec或bpu时,代表指定某个PYM DS层作为输入,根据sample默认配置需设置为0

使能BPU或codec时必需

例如上面的1V测试命令:

-v 参数是 /app/sample/S83_Sample/S83E06_Tros/vio_full_link_sample/cfg/Scenario_1V_cpe0_sen_cim0_isp0_pym0_mode2_sample/vpm_config.json,代表VIO配置文件的所在位置,json里面的具体配置可参考VPS配置文件说明。
-c 参数是 /app/sample/S83_Sample/S83E06_Tros/vio_full_link_sample/cfg/case_matrix/1V_OVX8B_RX0/hb_j6dev.json,代表camera的配置文件的所在位置,json里面的具体配置可参考J6X camera配置文件说明。
-O 参数是 /app/sample/S83_Sample/S83E06_Tros/vio_full_link_sample/res/fcos.hbm,代表hbm模型文件的所在位置。
-m 参数是1,表示使能pipe0数据流。
-o 参数是1,表示对pipe0数据流进行BPU处理。
-j 参数是1,表示对pipe0数据流进行VPU硬件编码。
-l 参数是1000,表示获取PYM数据1000帧。
-s 参数是10,表示dump前面10帧的数据。
-f 参数是100,表示编码前面100帧的数据,输出H265视频。
-e 参数是0,表示通过hbplayer工具实时显示PYM DS0层。
可增加 -t 参数,例如 -t 10000 表示程序获取数据的最长运行时间为10000ms。 当 -t 参数与 -l 参数同时使用时,各线程在满足其中任意一个条件,即已获取指定的数据帧数或者已达到指定的运行时间后就会退出,一般情况下不建议同时使用这两个参数。

备注

BPU对于NV12格式图像处理要求Stride 32对齐,通常Pym输出数据作为BPU输入就需要Stride 32对齐,如果不对齐,BPU处理结果会不正确。 如果要强制停止,需要两次ctrl+c操作。原因是hobot player使用了libevent库,第一次ctrl+c操作被它吃掉了。

1.24.3.4.3. 运行结果说明

sample运行时,通过下面的命令可以看到每个IP的帧率:

sample运行时的主要执行日志如下:

  • 成功加载hbm模型:

里面的相应的版本号会变动,仅供参考。

  • Dump、CODEC编码:

../../_images/dump_codec.png
  • 运行结束正常退出:

../../_images/4v_pass.png

查看运行时的帧率如下:

1V场景如下:

../../_images/1v_fps.png

4V场景如下:

../../_images/4v_fps.png

7V场景如下:

../../_images/7v_fps.png
通过 -t 10000 指定运行时间为10000ms。

1.24.3.4.4. 看图结果

本sample支持通过hbplayer工具进行看图。首先在hbplayer中设置平台、IP地址等相关参数:

../../_images/hbplayer_set.png

执行命令后,点击hbplayer左侧栏中的connect即可完成连接并在右侧界面看到实时全链路场景图像:

1V场景如下:

../../_images/hbplayer_show.png

4V场景如下:

../../_images/hbplayer_show4V.png

7V场景如下:

../../_images/hbplayer_show7V.png
当满足 -l 或 -t 参数指定的条件后,sample将自动退出运行,也可通过 Ctrl+C 手动结束运行。

拿1V举例,Dump的YUV图像以及VPU硬件编码输出的H265视频保存在当前目录下:

../../_images/saved_yuv.png

拿1V举例,查看H265视频:

../../_images/saved_codec.png
算法工具链
征程6社区征文技术深度解析官方教程
评论0
0/1000