当前位置: 首页 > 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.rkmt.cn/news/1421268.html

相关文章:

  • 知识图谱如何解决AI编程助手上下文丢失问题
  • 你的公司是否“为了自动化而自动化”?极客老王深度解析Agent落地破局之道
  • 纳米砂磨机厂家怎么选——从技术硬实力到服务体系的全方位评估框架 - 上海奎特机电
  • 从玩具到利器:低成本改造特斯拉线圈,实现厘米级电弧与高效能量转换
  • AI灵性伴侣:技术如何重塑精神慰藉与伦理边界
  • NLP模型可解释性实战:使用LIT工具进行模型调试与归因分析
  • 2026年4月FRPP管厂商推荐,FRPP管选哪家,FRPP管——耐候性强,适应各种气候 - 品牌推荐师
  • 收藏!程序员小白必看:3大AI赛道,教你如何拥抱大模型时代
  • 告别串口!用STM32CubeMX给STM32F103C8T6做个USB升级Bootloader(含DfuSeDemo测试)
  • 南宁黄金上门回收靠谁?福运来黄金回收稳坐口碑头把交椅 - 黄金回收
  • 硬件定时器队列优化:动态更新与混合架构设计
  • 从Ubuntu 18.04到20.04:手把手解决Fast Planner环境迁移的那些坑
  • 011、检测模型精度上不去?先把标注质量查一遍:错标、漏标、框偏移的排查方法
  • 基于LM386的DIY吉他耳机放大器:从电路原理到制作调试全解析
  • 别再傻傻分不清!Playwright启动Chrome、Edge和Firefox的保姆级代码指南(附channel参数详解)
  • AI写专著全攻略:掌握AI工具,20万字专著写作流程全揭秘!
  • 终极Windows风扇控制指南:用FanControl告别高温与噪音烦恼
  • 石家庄黄金上门回收选哪家?福运来黄金回收透明高效口碑佳 - 黄金回收
  • 太原古法金变现怎么选?福运来黄金回收领衔上门回收 - 黄金回收
  • 行业内性价比高的保温隔热涂料厂商口碑 - GrowthUME
  • 用CD4033与CD4060构建101位古戈尔秒计数器:纯硬件计数器的极致探索
  • 北京黄金上门回收,福运来黄金回收透明靠谱首选 - 黄金回收
  • 2026鸡西市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一休咨询
  • 导师严选!2026年刚需首选的专业AI智能降重工具 - 降AI小能手
  • Allegro PCB Designer Quickplace功能避坑指南:从‘放不全元件’到‘一键搞定’的完整配置流程
  • 2026淮南市本地人必选的公共卫生检测专业机构TOP5推荐!美容院、足疗店、酒店宾馆卫生检测、许可证办理,正规CMA资质检测公司排名推荐 (2026年5月商铺卫生办证最新深度调研方案) - 一休咨询
  • 宝安管道疏通|15年本地宋师傅,解决下水道堵塞、马桶反水、地漏返味问题 - GrowthUME
  • SPT-AKI存档编辑器:重新定义你的塔科夫单机版游戏体验
  • 呼和浩特黄金上门回收怎么选?福运来黄金回收稳坐头把交椅 - 黄金回收
  • 乌鲁木齐黄金上门回收横评,福运来黄金回收凭实力领跑 - 黄金回收