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

海思Hi3559AV100 VGS画线实战:从API调用到矩形框绘制的完整代码解析

海思Hi3559AV100 VGS画线实战:从API调用到矩形框绘制的完整代码解析

在视频分析领域,目标检测后的可视化呈现是算法验证的重要环节。海思Hi3559AV100芯片的VGS(Video Graphics Subsystem)模块提供了高效的图形绘制能力,尤其适合在视频流上实时叠加分析结果。本文将深入解析如何利用VGS模块实现精确的矩形框绘制,涵盖从API调用到多路视频处理的完整技术细节。

1. VGS模块基础环境配置

在开始绘制前,需要确保开发环境已正确配置。Hi3559AV100的SDK提供了完整的VGS开发支持,但需要注意几个关键配置项:

# 内核配置需开启VGS驱动支持 CONFIG_HI_VGS=y CONFIG_HI_VGS_MEM_SIZE=32M # 根据实际需求调整内存大小

硬件连接上,建议使用Hi3559AV100的VPSS(Video Process Sub-System)与VGS协同工作。典型的视频处理流水线配置如下:

Camera → VI → VPSS → VGS → VO/编码

开发环境验证可通过以下基础代码测试VGS功能是否正常:

HI_S32 s32Ret = HI_SUCCESS; s32Ret = HI_MPI_VGS_Init(); if (s32Ret != HI_SUCCESS) { printf("VGS init failed: 0x%x\n", s32Ret); return -1; }

2. VGS核心API深度解析

2.1 任务创建与管理

HI_MPI_VGS_BeginJob是VGS绘制的起点,其函数原型如下:

HI_S32 HI_MPI_VGS_BeginJob(VGS_HANDLE *phHandle);

关键参数说明:

  • phHandle: 输出参数,返回任务句柄,后续所有操作都基于此句柄

典型错误处理模式应包含重试机制:

VGS_HANDLE hHandle; int retry = 0; while (retry++ < 3) { s32Ret = HI_MPI_VGS_BeginJob(&hHandle); if (s32Ret == HI_SUCCESS) break; usleep(100000); // 100ms延迟后重试 }

2.2 画线任务参数配置

HI_MPI_VGS_AddDrawLineTaskArray是矩形框绘制的核心API,其参数结构体需要特别注意:

typedef struct { HI_U32 u32LineWidth; HI_U32 u32Color; HI_U32 u32LineNum; VGS_LINE_S *pastLine; } VGS_DRAW_LINE_S;

参数优化建议:

  • 对于4K视频,u32LineWidth建议设置为3-5像素
  • 颜色值采用ARGB格式,0xFF0000表示纯红色
  • 预分配pastLine内存时考虑最大检测目标数

3. 矩形框绘制实战代码

完整的矩形框绘制函数实现如下,包含详细的错误处理和资源管理:

HI_S32 PLATFORM_VGS_RectLine(VGS_HANDLE hHandle, HI_U32 u32X, HI_U32 u32Y, HI_U32 u32Width, HI_U32 u32Height, HI_U32 u32Color, HI_U32 u32LineWidth) { VGS_LINE_S astLines[4] = {0}; VGS_DRAW_LINE_S stDrawLine = {0}; // 定义矩形四条边 astLines[0].u32StartX = u32X; // 上边 astLines[0].u32StartY = u32Y; astLines[0].u32EndX = u32X + u32Width; astLines[0].u32EndY = u32Y; astLines[1].u32StartX = u32X + u32Width; // 右边 astLines[1].u32StartY = u32Y; astLines[1].u32EndX = u32X + u32Width; astLines[1].u32EndY = u32Y + u32Height; astLines[2].u32StartX = u32X; // 下边 astLines[2].u32StartY = u32Y + u32Height; astLines[2].u32EndX = u32X + u32Width; astLines[2].u32EndY = u32Y + u32Height; astLines[3].u32StartX = u32X; // 左边 astLines[3].u32StartY = u32Y; astLines[3].u32EndX = u32X; astLines[3].u32EndY = u32Y + u32Height; stDrawLine.u32LineNum = 4; stDrawLine.pastLine = astLines; stDrawLine.u32Color = u32Color; stDrawLine.u32LineWidth = u32LineWidth; return HI_MPI_VGS_AddDrawLineTaskArray(hHandle, &stDrawLine); }

4. 多路视频处理实战技巧

当处理多路视频(如可见光+红外)时,需要特别注意以下要点:

  1. 资源分配策略

    • 为每路视频创建独立的VGS任务
    • 根据视频分辨率动态调整线宽
    • 建立颜色编码规范(如红色表示红外检测结果)
  2. 性能优化表格

优化项单路1080P双路1080P4K视频
建议最大框数量503020
帧率损耗<5%8-12%15-20%
内存占用(MB)122235
  1. 同步处理示例代码
// 可见光通道处理 HI_MPI_VGS_BeginJob(&hHandleVisible); PLATFORM_VGS_RectLine(hHandleVisible, x1, y1, w1, h1, 0xFF0000, 3); HI_MPI_VGS_EndJob(hHandleVisible); // 红外通道处理(延迟1帧避免资源冲突) usleep(16666); // 60fps对应的帧间隔 HI_MPI_VGS_BeginJob(&hHandleIR); PLATFORM_VGS_RectLine(hHandleIR, x2, y2, w2, h2, 0x00FF00, 3); HI_MPI_VGS_EndJob(hHandleIR);

5. 高级调试技巧与性能分析

在实际项目中,我们经常会遇到绘制异常的情况。以下是一些实用的调试方法:

  • 内存越界检查:使用HI_MPI_VGS_GetJobStatus获取任务状态

  • 性能分析工具

    # 查看VGS模块CPU占用 top -H -p `pidof sample_vgs` # 监控内存使用 cat /proc/vgs-mem
  • 常见错误代码速查表

错误码含义解决方案
0xA001无效句柄检查BeginJob返回值
0xA004内存不足增加VGS内存配置
0xA00B参数越界验证坐标是否超出画布范围

在长时间运行的系统中,建议添加以下健壮性处理:

// 定期重置VGS模块 if (frameCount % 1000 == 0) { HI_MPI_VGS_Exit(); HI_MPI_VGS_Init(); }
http://www.jsqmd.com/news/909962/

相关文章:

  • 2026荆门市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一休咨询
  • 2026晋州市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一休咨询
  • 从‘龟速’到‘起飞’:手把手教你用艾特肯(Δ²)方法加速你的MATLAB迭代程序
  • 知识图谱如何解决AI编程助手上下文丢失问题
  • 2026云端多人协同的国产 PCB 设计软件推荐,办公协作更高效 - 品牌2025
  • 你的公司是否“为了自动化而自动化”?极客老王深度解析Agent落地破局之道
  • Keep实战指南:5步构建企业级智能告警管理平台
  • 别再复制粘贴了!手把手教你用Angular+SpringBoot打造个性化电子病历模板(附汉密尔顿量表实战)
  • Qt多线程避坑指南:moveToThread后对象生命周期与内存管理的5个关键点
  • 纳米砂磨机厂家怎么选——从技术硬实力到服务体系的全方位评估框架 - 上海奎特机电
  • 2026晋江市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一休咨询
  • 朱雀AI检测工具原理详解与企业级落地实战指南
  • 2026 国产 PCB 信号仿真设计软件推荐:自主可控 EDA 工具选型参考 - 品牌2025
  • 告别底噪!用Python+Librosa复现维纳滤波语音降噪(附完整代码与音频对比)
  • 在Ubuntu 20.04上从零搭建ucore Lab 2环境:手把手解决make报错与依赖问题
  • 从玩具到利器:低成本改造特斯拉线圈,实现厘米级电弧与高效能量转换
  • Taotoken的审计日志功能为企业API安全管理提供了便利
  • 如何快速备份微博内容:Speechless工具5分钟实现PDF导出的完整指南
  • 2026年4月防水卷材企业推荐,非固化防水涂料/SBS防水卷材/橡胶沥青防水涂料/防水卷材,防水卷材厂商口碑推荐 - 品牌推荐师
  • 从Kaggle竞赛到业务上线:手把手教你用Python和Scikit-learn在实战中权衡Precision与Recall
  • 2026全国一线二线三线城市CPPM报名十大核心问题全流程答疑 - 企业推荐官【官方】
  • 2026佳木斯市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一休咨询
  • AI灵性伴侣:技术如何重塑精神慰藉与伦理边界
  • AI应用的部署策略:从开发到生产的完整流程
  • 基于LM2576的3A大电流太阳能充电器DIY:从开关电源原理到户外能源站实践
  • DistroAV:让OBS视频制作像搭积木一样简单的NDI插件指南 [特殊字符]
  • 哈尔滨企业搬迁必看:3步筛选靠谱服务机构 - 幸福生活序曲
  • HackerBox MCU Lab 2025:一站式嵌入式开发平台实战与四大主流MCU深度解析
  • 别再只把BART当生成模型了:用Transformers库5行代码,解锁它的文本修复超能力
  • NLP模型可解释性实战:使用LIT工具进行模型调试与归因分析