游乐游手机版
首页/AI教程/文章详情

J6B违规场景样本采集标注完整流程教程

时间:2026-07-03 16:05
1 功能概述 这个 sample 实现了单路、多路 VIO 通路的接入和处理,下面重点介绍 1V、2V、6V 这几种典型的接入场景。无论你是刚接触这套方案,还是想快速验证硬件连接,都可以从这几个场景入手。 1 1 软件架构说明 整个数据通路依赖 VIO API 完成,核心目标就是让多路 came

1. 功能概述

这个 sample 实现了单路、多路 VIO 通路的接入和处理,下面重点介绍 1V、2V、6V 这几种典型的接入场景。无论你是刚接触这套方案,还是想快速验证硬件连接,都可以从这几个场景入手。

1.1. 软件架构说明

整个数据通路依赖 VIO API 完成,核心目标就是让多路 camera 能够顺利地接入并跑起来。同时,每一路数据还支持 dump 图像,方便调试和验证。软件控制关系如下图所示:J6B vio scenario sample

1.2. 硬件数据流说明

每个场景的图中都标注了具体的硬件连接关系,照着接就行。

需要特别留意的是,运行这个 sample 之前,必须保证硬件外设与场景图里的连接关系一致。如果手头的硬件不同,那就得按实际情况修改配置文件 hb_j6dev.json,或者直接更换外设。配置文件怎么改?可以参考“VIN 配置”章节。

1V 场景如下:

2V 场景如下:

6V 场景如下:

1.3. 代码位置及目录结构

sample 代码放在 SDK 工程的 {sdk_dir}/test/samples/platform_samples/source/S83_Sample/S83E04_Module/vio_scenario_sample 目录下。根目录有 Kconfig 和外部接口的 Makefile——Kconfig 控制是否参与整体编译;cfg 目录放 JSON 配置文件;src 目录下的 vio_scenario_sample.c 是 main 入口。

1.4. API 流程说明

API 的调用流程可以参考下面这张图:

主干代码大致是这样:

int main(int argc, char *argv[]){int ret = 0;pthread_t thid[HB_VIO_PIPELINE_MAX];uint32_t pipe_id[HB_VIO_PIPELINE_MAX];signal(SIGINT, get_exit_signal);// get optsret = get_opts_for_vio(argc, argv);

这里有个细节:如果不需要单独控制 sensor 的开关流,代码中的 hb_cam_starthb_cam_stop 其实可以省掉——因为 hb_vio_start_pipelinehb_vio_stop_pipeline 已经包含了 sensor 开关流的功能。其他 sample 文档里涉及这两对 API 的部分,解释也是一样的,具体可以参考“VIO 应用处理接口”。

获取数据和释放数据的代码:

int vio_worker_func(uint32_t pipe_id, int loop_count){int ret = 0, recovery_time = 0;pthread_t recov_thid[HB_VIO_PIPELINE_MAX];pym_buffer_v3_t pym_buf;VIO_DATA_TYPE_E pym_data_type;pym_data_type = HB_VIO_PYM_DATA_V3;struct timeval recovery_start_time, recovery_current_time;#ifdef ENABLE_HBPLAYERPYM_LAYER_TYPE pym_layer_type = (PYM_LAYER_TYPE)g_pym_show_layer;

2. 编译

2.1. 编译环境

本 sample 的编译环境直接用 SDK 自带的 build 工具就行,具体操作参考“Build 环境建立”。

2.2. 编译说明

编译时需要 VPS 系统相关的头文件:

#include "hb_vin_data_info.h"#include "hb_vpm_data_info.h"#include "hb_vio_interface.h"

依赖的库如下:

LIBS += -lvio -lpthread -lalog -lhbmem

编译命令:

# 进入SDK所在目录{sdk_dir},并source构建环境(参见上)。# 编译本sample:bdm libvio-scenario-sample# 输出文件:{sdk_dir}/install/aarch64le/sample/S83_Sample/S83E04_Module/vio_scenario_sample

3. 运行

3.1. 支持平台

J6B Plus Evm

3.2. 硬件环境搭建

接口连接如下:

模组方面:联创模组 OVX8D、IMX623,LONGHORN-ISX031。

连接方式:一路 OVX8D(FOV120)通过 4 合 1 线束的 C 口接到板子的 DES1;一路 IMX623(FOV60)通过 4 合 1 线束的 D 口接到板子的 DES1;四路 ISX031 通过 4 合 1 线束的 ABCD 口接到板子的 DES2。

3.3. 板端部署及配置

刷写好系统软件镜像后,sample 的可执行文件在板端路径:/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/;配置文件在:/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/

3.4. 运行指南

3.4.1. 运行方法

1V 测试命令:

/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_1V_cpe0_sen_cim0_isp0_pym0_mode2_sample/vpm_config.json -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/1V_OVX8D_RX0/hb_j6dev_plus.json -m 1 -l 1000 -s 10

2V 测试命令:

/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_2V_cpe0_sen_x8d_imx623_cim0_isp0_pym0_mode1_sample/vpm_config.json -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/2V_OVX8D_IMX623_RX0/hb_j6dev.json -m 3 -l 1000 -s 10

6V 测试命令:

/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_6V_cpe04_sen_cim04_isp0_pym04_sample/vpm_config.json -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/hb_j6dev.json -m 63 -l 1000 -s 6

3.4.2. 运行命令行说明

vio_scenario_sample 是应用程序名。下面这张表列出了各参数的含义:

以 1V 测试命令为例:

/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_1V_cpe0_sen_cim0_isp0_pym0_mode2_sample/vpm_config.json -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/1V_OVX8D_RX0/hb_j6dev_plus.json -m 1 -l 1000 -s 10

-v 参数指定 VIO 配置文件路径,该 JSON 的具体配置参考“VPM 配置”。

-c 参数指定 camera 配置文件路径,该 JSON 的具体配置参考“J6X Camera 配置说明”。

-m 参数为 1,表示使能 pipe0 数据流。

-l 参数为 1000,表示获取 1000 帧 PYM 数据。

-s 参数为 10,表示 dump 前面 10 帧 PYM 数据。

除了以上参数,还有几个可选项:

  • 增加 -t 参数,例如 -t 50000 表示程序最长运行 50000ms。当 -t-l 同时使用时,各线程只要满足其中一个条件(获取到指定帧数或达到运行时间)就会退出。一般情况下不建议同时使用这两个参数。
  • 增加 -e 参数,例如 -e 2 表示通过 hbplayer 看图工具显示 PYM ds 层第 2 层。
  • 增加 -r 参数,例如 -r 1 表示开启自恢复模式,热拔插后能自动恢复,最长等待 15s,超过 15s 没插上就会报错退出。

1.21.3.4.3. 运行结果说明

程序运行时,可以用下面的命令查看每个 IP 的帧率。如果不开启 dump,帧率符合预期就说明程序跑通了。

cat /sys/class/vps/flow/fps

注意:这个命令每次执行间隔必须大于一秒,否则帧率数据会变成 0。

1V 测试结果:

帧率如下:

2V 测试结果:

帧率如下:

6V 测试结果:

帧率如下:

以 6V 测试为例,加上 -t 5000 指定运行 5000ms,结果如下——5000ms 后线程正常退出。其他场景用 -t 参数的现象类似,不再重复。

如果开启自恢复模式(-r 1),摄像头意外断开后各 pipe 会在报错的同时尝试自恢复。恢复正常连接后,当前 loop 报错结束,下一次 loop 到来时就能正常取流,不再继续报错:

若通过 hbplayer 看图,自恢复成功后画面会继续正常显示实时图像。

其他场景使用 -r 参数的现象类似,不再赘述。

3.4.4. 运行可变更说明

3.4.4.1. 帧率变更

本 sample 中各 pipe 的帧率可以通过修改配置文件来调整。比如想改成 25fps,直接修改所用 vpm_config.json 中各 pipe 指定的 lpwm.json 文件里的 period 参数为 40000(即 40.000ms):

lpwm.json 中其他参数的设置方法参考“LPWM 使用”。

以 6V 测试为例,sample 提供了 LPWM 使用中推荐的 25fps 配置文件:/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/lpwm_25fps.json,以及对应使用该 lpwm.json 的 vpm_config.json/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_6V_cpe04_sen_cim04_isp0_pym04_sample/vpm_config.json,直接拿来用或者参考修改都行。

另外,camera 配置文件 hb_j6dev.json 中各 port 的 fps 参数也要同步改成 25,或者直接用环境变量来选择帧率:

export CAM_CONFIG_SELECT=config_25fps

综上,6V 25fps 场景的完整测试命令如下:

export CAM_CONFIG_SELECT=config_25fps/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_6V_cpe04_sen_cim04_isp0_pym04_sample/vpm_config_25fps.json -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/hb_j6dev.json -m 63 -l 1000 -s 6

运行后查看实时帧率,应该是预期的 25fps:

如果不需要 25fps,执行下面命令取消环境变量,再跑测试命令即可:

unset CAM_CONFIG_SELECT

其他场景修改帧率的方法和过程完全类似,不再赘述。

用户还可以在 camera 配置文件中指定效果库文件(不配置或置空则用默认),例如指定 lib_CW_OX8DGB_AST1_065_L.so

"port_0": {"sensor_name": "ovx8dstd","calib_lname": "lib_CW_OX8DGB_AST1_065_L.so","serial_addr": "0x41","sensor_addr": "0x11","eeprom_addr": "0x51","sensor_mode": 5,"fps": 30,"width": 3840,"height": 2160,

本 sample 提供了这个场景下对应的 hb_j6dev.json,位于:/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/hb_j6dev.json

3.4.5. 看图结果

Dump 出的数据保存在当前目录。例如上面的 6V 测试命令执行后:

960x640_pipe5_pym_ds1_f2_roi_2.yuv 来说,文件名中的含义是:宽 960、高 640,pipe5 的 PYM ds1 层输出图像的第 2 帧(f2),对应 loop 次数为 2(roi_2)。

有一点需要说明:由于收敛时间,各 pipe 的前几帧图像效果可能不太理想,这是正常现象,具体帧数还和实际模组有关。放心,后续的帧都是正常的。

另外,分配 buffer 时内存要求 16 字节对齐。如果配置文件中设置的图像宽度不是 16 的倍数,按分配 buffer 大小 dump 出来的图像右侧就会出现无效数据(看起来像绿边),这也是正常现象。解决方法是把配置文件中的 width 设为 16 的整数倍,或者按图像实际大小保存。

这个 sample 也支持通过 hbplayer 工具看图。先设置平台、IP 地址等参数:

以 6V 测试为例,在命令后加上 -e 2 显示 ds 层第二层:

/app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/bin/vio_scenario_sample -v /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/Scenario_6V_cpe04_sen_cim04_isp0_pym04_sample/vpm_config.json -c /app/sample/S83_Sample/S83E04_Module/vio_scenario_sample/cfg/case_j6evm/6V_1xOVX8D_1xIMX623_RX0_4xISX031_RX4_SYNC/hb_j6dev.json -m 63 -l 1000 -s 6 -e 2

执行后,在 hbplayer 左侧点击 connect 就能看到实时 6V 图像了:

当满足 -l-t 参数指定的条件后,sample 会自动退出;也可以按 Ctrl+C 手动结束。其他测试场景连接 hbplayer 看图的方法和效果完全一样,不再赘述。

来源:https://juejin.cn/post/7657129096331313203
上一篇暖通空调知识图谱与RAG中的本体论设计 下一篇专访GEO落地工程师罗长才:深度拆解Meta标签、Embedding及Milvus/Pinecone底层赋能
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
批处理BAT入门教程第一篇
AI教程 · 2026-07-03

批处理BAT入门教程第一篇

提供13个批处理实战技巧,覆盖全盘查找并删除文件夹或文件、拷贝移动文件、创建畸形文件夹及设置隐藏属性等场景,可一键完成系统维护与文件管理工作,极大提升自动化操作效率和便捷性。

从零开始批处理命令For循环详解与实战案例
AI教程 · 2026-07-03

从零开始批处理命令For循环详解与实战案例

批处理For命令支持 d、 l、 r、 f四个参数。 d仅列出当前目录下的目录名; r递归搜索指定路径及其子目录中的文件; l生成数值序列; f可解析文件、字符串或命令输出,通过delims、tokens、skip、eol等选项灵活处理内容。

批评你的人是你生命中的贵人
AI教程 · 2026-07-03

批评你的人是你生命中的贵人

批评你的人往往最值得珍惜,因为他们关注你、助你成长。面对批评应包容反思,用行动改进而非辩解。接受批评是自我完善的过程,能让人少走弯路,避免重复犯错。这样的人正是生命中的贵人,值得感恩与珍惜。

测试人员角色定位与职责详解
AI教程 · 2026-07-03

测试人员角色定位与职责详解

测试人员角色经历了从找问题、保证质量到分析风险的转变,最终核心职责是提供关键信息,协助团队创造优秀产品。这包括识别问题、评估风险及帮助团队了解项目状态,而非单纯把关或追求完美。

经营成功测试生涯的实用方法与策略
AI教程 · 2026-07-03

经营成功测试生涯的实用方法与策略

一、测试生涯的起点 1989年,我在田纳西大学攻读研究生时,意外地从软件开发人员转行成为一名软件测试工程师。这并非我主动选择,说起来还有些戏剧性——某个早晨,教授质问我为何缺席那么多开发会议,我解释说这些会议总是安排在周末早上,对我这个第一次离家、刚入学的学生来说实在不便。结果呢?等待我的不是解聘通