发布时间:2026/7/17 5:02:36
[具身智能-566]:RDK RDK X5 mipi_camera.py(FCOS 目标检测 Demo)完整解析
RDK X5 mipi_camera.pyFCOS 目标检测 Demo完整解析运行环境RDK OS3.xX5 平台核心组件hobot_vio(相机 / 显示) hobot_dnn(BPU 推理) libpostprocess.so(C 后处理) 业务流程MIPI 相机采集 NV12 图 → BPU FCOS 推理 → C 库后处理解析检测框 → HDMI 叠加绘制目标框一、整体数据流框图plaintextMIPI Sensor(F37) → hobot_vio.Camera采集 → 裁剪缩放512×512 NV12图像 ↓ models[0].forward() BPU硬件推理 ↓ 推理输出tensor → 多进程调度调用libpostprocess.soFCOS解码 ↓ 解析JSON检测结果 → HDMI图层叠加绘制方框类别文字二、模块逐段解析1. 头文件与兼容导入python运行try: from hobot_vio import libsrcampy as srcampy except ImportError: from hobot_vio_rdkx5 import libsrcampy as srcampy try: from hobot_dnn import pyeasy_dnn as dnn except ImportError: from hobot_dnn_rdkx5 import pyeasy_dnn as dnn作用兼容新旧 SDK 包名srcampy 地平线 VIO 库Camera/Display/Binddnn BPU 推理 Python 接口⚠️ 你之前报错根源此模块预编译依赖 numpy2.02. C 类型结构体定义ctypes 桥接 C 库python运行class hbSysMem_t / hbDNNTensor_t / FcosPostProcessInfo_t ... libpostprocess ctypes.CDLL(/usr/lib/libpostprocess.so)重点Python 通过ctypes直接调用地平线提供的 C 语言后处理动态库libpostprocess.so手动对齐 C 结构体将 BPU 推理输出 tensor 内存地址传递给 C 函数FcosdoProcessget_Postprocess_result返回 JSON 字符串包含所有目标框坐标、置信度、类别 ID优势后处理在 C 中运行性能远高于纯 Python 解析避免占用 CPU3. 显示分辨率自动适配函数get_display_res()python运行disp srcampy.Display() resolution_list disp.get_display_res()逻辑优先尝试1920×1080如果 HDMI 不支持则自动选择小于等于 1080P 的最大分辨率返回disp_w/disp_h后续绘制框时用于坐标缩放4. 多进程并行后处理ParallelExectorpython运行self._pool multiprocessing.Pool(processesself.parallel_num, maxtasksperchild5) self.workers BoundedSemaphore(self.parallel_num)核心设计推理BPU 硬件与后处理CPU解耦主线程持续采集图像 调用 BPU 推理硬件异步子进程池并发运行 FCOS 解析、绘制逻辑BoundedSemaphore信号量限制最大并发数防止进程无限创建、内存暴涨maxtasksperchild5执行若干任务后重建子进程规避长期运行内存泄漏⚠️注意multiprocess 多进程在 RDK 上有坑全局变量跨进程不共享代码中image_counter使用multiprocessing.Value实现跨进程计数。5.run(outputs)单帧后处理核心函数python运行libpostprocess.FcosdoProcess(...) result_str get_Postprocess_result(...) data json.loads(result_str[14:])执行步骤将 BPU 输出 tensor 内存地址绑定到 C 结构体调用 C 库 FCOS 解码5 个 stride 层 8/16/32/64/128 特征图返回 json截取字符串[14:]跳过库内置前缀字符坐标缩放模型输入是512×512输出框坐标映射回 HDMI 显示分辨率disp_w×disp_hpython运行bbox scale_bbox(bbox, 512, 512, disp_w, disp_h)边界截断limit_display_cord防止框超出画面HDMI 叠加绘制python运行disp.set_graph_rect() # 绘制矩形框 disp.set_graph_word() # 绘制类别置信度文字box_color_ARGB转换成 HDMI 接口要求的 ARGB32 颜色格式6. 主程序初始化if __name__ __main__:6.1 加载模型python运行models dnn.load(../models/fcos_512x512_nv12.bin)*.bin地平线经过 HBIR 编译完成、适配 BPU 的模型文件输入格式NV12和相机输出格式一致无需 RGB 转换节省 CPU6.2 FCOS 后处理参数配置python运行fcos_postprocess_info.height 512 # 模型输入尺寸 fcos_postprocess_info.score_threshold 0.5 # 置信度阈值 fcos_postprocess_info.nms_threshold 0.6 # NMS阈值 fcos_postprocess_info.nms_top_k 5 # 单帧最多输出5个目标6.3 MIPI 相机打开python运行cam.open_cam(0, -1, -1, [w, disp_w], [h, disp_h],sensor_height,sensor_width)参数含义RDK 标准 API0camera 通道号[w, disp_w]两路输出分辨率一路512×512→ 送入 BPU 推理一路disp_w×disp_h→ HDMI 原始预览画面VIO 硬件完成图像缩放不需要 CPU 做 resize零拷贝优势6.4 HDMI 显示分层关键python运行disp.display(0, disp_w, disp_h) srcampy.bind(cam, disp) # 图层0原始相机画面 disp.display(3, disp_w, disp_h) # 图层3图形叠加层画框/文字地平线 HDMI 支持多图层叠加Layer0原始摄像头视频流Layer3OSD 图层绘制检测框透明叠加在视频上srcampy.bind(cam, disp)实现相机数据流直接硬件输送到 HDMI主线程不转发原始图像大幅降低 CPU 占用。7. 主循环采集链路python运行img cam.get_img(2, 512, 512) img np.frombuffer(img, dtypenp.uint8) outputs models[0].forward(img) parallel_exe.infer(output_array)cam.get_img(2,512,512)获取缩放后 512×512 NV12 图像参数2代表获取推理支路图像np.frombuffer把 C 内存块封装成 numpy 数组零拷贝不复制像素数据models[0].forward(img)提交任务到 BPU 硬件异步推理将推理输出送入进程池执行后处理主线程立刻继续取下一帧流水线运行8. FPS 统计逻辑python运行if image_counter.value 100: print(ffps: {100/(finish_time - start_time)})每累计 100 帧输出一次平均帧率multiprocessing.Value保证跨进程计数器同步。9. 信号退出处理python运行signal.signal(signal.SIGINT, signal_handler)捕获CtrlC置位is_stop标志退出 while 循环执行python运行cam.close_cam() disp.close()释放相机、HDMI 硬件资源防止硬件句柄泄漏。三、关键技术亮点地平线 RDK 平台特有NV12 原生输入MIPI 相机输出 NV12模型直接接收 NV12省去NV12→BGRCPU 颜色转换降低时延。VIO 硬件多路缩放 硬件 HDMI 图层叠加图像缩放、预览输出、OSD 绘制全部由 VPU 硬件完成CPU 仅负责调度和 AI 业务。零拷贝内存传输frombuffer、ctypes 直接传递物理内存地址像素数据不在用户态来回拷贝。BPU 推理与 CPU 后处理流水线并行多进程分离推理、解码绘制充分利用 X5 的 BPU 多核 CPU。四、结合你遇到问题的重点坑点清单numpy 版本限制hobot_dnn二进制包基于 numpy1.x 编译numpy 2.0 直接触发numpy.core.multiarray failed to import✅修复pip install numpy2.0 --force-reinstalllibpostprocess.so 路径依赖代码硬编码路径/usr/lib/libpostprocess.so升级镜像、容器环境如果缺少该库会直接崩溃。多进程 ctypes 注意事项硬件句柄cam/disp不能放到子进程操作本代码所有采集、硬件 API 全部在主线程子进程仅做解析绘制。分辨率匹配问题模型固定输入 512×512如果你更换其他尺寸模型必须同步修改FcosPostProcessInfo_t宽高参数。MIPI Sensor 适配当前默认 F37 传感器更换其他 MIPI 镜头需要修改设备树 / 相机 yaml 配置否则open_cam失败。五、常见可改造方向保存检测框图片在run()函数内增加 cv2 保存逻辑关闭 HDMI 输出改为 RTSP 网络推流替换 YOLO 系列模型需要更换对应的libpostprocess.so和后处理结构体去掉多进程简化为单线程适合低负载场景调试更简单

相关新闻

C++静态成员变量:从内存模型到实战应用全解析
2026/7/17 5:02:36

C++静态成员变量:从内存模型到实战应用全解析

1. 静态成员变量:从“独一份”到“全局管家”的蜕变在C的面向对象世界里,我们习惯了每个对象都拥有自己独立的一份数据成员。比如,你创建了10个Student对象,每个对象都有自己的name和score。但有没有一种场景,你需要一…

阅读更多
Spring Boot+Vue登录模块国密改造实战:SM2/SM3算法集成与避坑指南
2026/7/17 5:02:36

Spring Boot+Vue登录模块国密改造实战:SM2/SM3算法集成与避坑指南

1. 项目概述:为什么要在登录场景拥抱国密?最近在重构一个老项目的登录模块,客户明确要求对传输的密码进行国密算法改造。这已经不是第一次遇到类似需求了,随着数据安全合规性要求越来越高,尤其是在一些对数据主权有明确…

阅读更多
Windows后渗透与提权实战:从信息收集到权限维持的完整路径
2026/7/17 4:02:36

Windows后渗透与提权实战:从信息收集到权限维持的完整路径

1. 项目概述:从“进入”到“掌控”的质变在渗透测试的实战中,拿到一个Windows系统的初始立足点(比如一个Web Shell、一个反弹的Meterpreter会话)往往只是万里长征的第一步。很多新手朋友会在这里卡住,感觉“进去了&…

阅读更多
HarmonyOS7 多行文本输入页实战:TextArea 不只是会用,还要用得顺手
2026/7/17 6:02:37

HarmonyOS7 多行文本输入页实战:TextArea 不只是会用,还要用得顺手

文章目录评论输入最怕边界没处理addReview 负责把输入变成列表数据页面怎么搭起来这里有个小经验完整代码写在最后TextArea 看起来只是一个多行输入框,但真放进业务里,马上就会遇到几个细节:空内容能不能提交、最多允许多少字、聚焦时边框要不…

阅读更多
HarmonyOS7 图片滤镜工作台实战:Image 滤镜 不只是会用,还要用得顺手
2026/7/17 6:02:37

HarmonyOS7 图片滤镜工作台实战:Image 滤镜 不只是会用,还要用得顺手

文章目录滤镜本质上是状态组合预设要能覆盖自定义参数页面怎么搭起来这里有个小经验完整代码写在最后图片效果页最容易做成参数面板:一堆滑块、一张图片,然后就结束了。这个案例稍微好一点,它把预设滤镜、自定义调参和 ImageFit 填充模式放在…

阅读更多
C++事件驱动编程实战:eventpp库极速集成与核心机制解析
2026/7/17 6:02:37

C++事件驱动编程实战:eventpp库极速集成与核心机制解析

1. 为什么你需要一个C事件处理库?如果你写过C GUI程序、网络服务或者游戏,大概率遇到过这样的场景:用户点击了一个按钮,你需要通知多个模块更新状态;一个网络数据包到达,需要触发一系列的业务逻辑处理&…

阅读更多
C++哈希表冲突处理:开放定址法与链地址法实战对比
2026/7/17 6:02:37

C++哈希表冲突处理:开放定址法与链地址法实战对比

1. 项目概述:从“碰撞”到“共存”的哈希艺术在C的世界里,无论是实现一个高速缓存、构建一个自定义的unordered_map,还是设计一个游戏中的物品ID快速查询系统,哈希表都是我们绕不开的核心数据结构。它的理想很美好:通过…

阅读更多
AI时代创作者表达权的技术突围:ArtArch半结构化生成引擎解析
2026/7/17 6:02:37

AI时代创作者表达权的技术突围:ArtArch半结构化生成引擎解析

1. 项目概述:AI时代创作者表达权的技术突围在生成式AI席卷内容创作领域的当下,"一句话生成完整作品"的技术演示正在各大社交平台病毒式传播。ArtArch创始人黄严却选择了一条截然不同的技术路径——他们的AI工具不追求全自动生成,而…

阅读更多
[具身智能-567]:RDK(X3/X5)button_led.py 代码完整详解
2026/7/17 5:02:36

[具身智能-567]:RDK(X3/X5)button_led.py 代码完整详解

RDK(X3/X5)button_led.py 代码完整详解适用平台:地平线 RDK X3、RDK X5;库:Hobot.GPIO(地平线自研 Python GPIO 库,语法高度兼容 RPi.GPIO)功能简述:读取按键输入&#x…

阅读更多
智慧树刷课插件:5分钟实现自动化学习的智能助手
2026/7/16 21:32:43

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

阅读更多
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案
2026/7/16 15:03:34

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

阅读更多
办公自动化实战:5个免费工具构建合同处理流水线
2026/7/16 22:47:50

办公自动化实战:5个免费工具构建合同处理流水线

1. 这不是“又一个工具包”,而是一套经过237次真实场景验证的效率组合拳“2026.04.28实用教程工具分享”这个标题乍看平平无奇,像极了你邮箱里被自动归入“促销/订阅”文件夹的那类通知——但如果你真把它当普通更新忽略,接下来半年里&#x…

阅读更多
2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制
2026/7/17 0:02:36

2026全国外贸独立站搭建公司推荐排行,含零代码SAAS、AI编程、源码定制

2026全国外贸独立站搭建公司推荐排行 外贸工厂、工贸企业建设官网,核心需求与普通展示型网站并不相同。除了页面整洁、多语言适配和海外访问体验,企业还要重点考虑数据能否导出、站点能否迁移、源码是否可控、后续费用是否透明,以及更换服务…

阅读更多
HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第18篇:Grid 布局实战——从功能 5 宫格到练习 2×2 模式

Grid 布局实战——从功能 5 宫格到练习 22 模式引言 Grid 布局是 ArkTS 中最强大的布局容器之一,它通过行列模板系统实现灵活的多列多行布局。在本英语学习 App 中,Grid 布局贯穿了首页的多个核心模块:功能栏 5 宫格、练习模式 22 卡片、以及…

阅读更多
HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析
2026/7/17 0:02:36

HarmonyOS 应用开发《掌上英语》第19篇:3D 翻转动画实现——ArkTS 动画系统全解析

3D 翻转动画实现——ArkTS 动画系统全解析引言 在移动应用中,卡片翻转动画是最受欢迎的交互动效之一,它能给用户带来直观的"物理世界"操作感。在我们的英语学习 App 的单词学习页面(CourseHomePage.ets)中,就…

阅读更多
基于Dify与DeepSeek构建私有知识库问答系统实战指南
2026/7/17 5:10:40

基于Dify与DeepSeek构建私有知识库问答系统实战指南

在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…

阅读更多
FAE放射组学分析工具:医学影像特征探索的完整解决方案
2026/7/17 5:34:11

FAE放射组学分析工具:医学影像特征探索的完整解决方案

FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE 你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…

阅读更多
DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!
2026/7/14 16:39:14

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖!

DesktopNaotu:你的终极离线思维导图解决方案,告别网络依赖! 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址:…

阅读更多