分类梳理:地平线自研 / 第三方、开源 / 闭源

运行平台:地平线 RDK(X3/X5);模型:fcos_512x512_nv12.bin

先给核心结论:

  1. 地平线闭源组件(官方提供,无源码):底层 SDK、BPU 模型、libpostprocess.so;
  2. 地平线开源代码:这份 Python demo 源码(示例应用,Apache2.0);
  3. 第三方开源组件:Python 标准库、OpenCV、NumPy 等;
  4. 无第三方闭源商业库

一、地平线官方提供模块拆分

1)闭源(二进制分发,不开放源码)【地平线自研】

  1. hobot_dnn (pyeasy_dnn)
    • 提供方:地平线
    • 性质:闭源 SDK
    • 作用:加载.bin离线模型、调用 BPU 硬件推理
    • 来源RDK 固件内置,仅能在旭日 BPU 平台运行
  2. hobot_vio (libsrcampy)
    • 提供方:地平线
    • 性质:闭源 SDK
    • 作用:HDMI 硬件输出、显示管理
  3. /usr/lib/libpostprocess.so
    • 提供方:地平线
    • 性质:闭源动态库
    • 作用:FCOS 后处理(解码网络输出、NMS)

    重点:

    你看不到 FcosdoProcess / FcosPostProcess C 源码;只能通过 ctypes 调用接口。

  4. fcos_512x512_nv12.bin
    • 提供方:地平线 ModelZoo
    • 性质:闭源编译后 BPU 模型
    • 说明:由 ONNX 经过地平线 OX 工具编译生成,是 BPU 专属机器码,无法直接还原网络权重。
  5. 平台底层固件、BPU 驱动
    • 提供方:地平线,闭源。

2)开源(地平线发布示例源码,Apache 2.0 协议)

贴出来的这份完整 python 脚本本身

  • 归属:地平线官方示例 Demo
  • 许可证:文件头部 Apache License 2.0(开源)
  • 实现内容:
    • ctypes 结构体封装(适配 libpostprocess.so)
    • BGR2NV12 转换函数
    • 摄像头采集、画框、坐标映射、HDMI 调度、FPS 统计

注意:

开源的只是上层业务胶水代码,上面依赖的底层 SDK、后处理 so 仍然是闭源二进制

二、第三方开源组件(不属于地平线,通用开源生态)

全部都是开源软件,可以自由获取源码:

  1. Python 标准库 sys / signal / os / time / ctypes / json
  2. OpenCV import cv2 开源(Apache2),第三方,用于图像采集、resize、色彩空间转换
  3. NumPy import numpy as np 开源 BSD 协议,数组运算
  4. colorsys Python 内置库

不存在第三方闭源库。

三、表格汇总一目了然

表格

模块 提供者 开源 / 闭源 备注
hobot_dnn pyeasy_dnn 地平线 闭源(二进制 SDK) BPU 模型推理核心
hobot_vio libsrcampy 地平线 闭源(二进制 SDK) HDMI 显示驱动封装
libpostprocess.so 地平线 闭源动态库 FCOS 后处理 C 实现
fcos_512x512_nv12.bin 地平线 ModelZoo 闭源编译模型 BPU 离线模型文件
当前整套.py 源码 地平线 开源 Apache2.0 应用层 demo 胶水代码
cv2 (OpenCV) 开源社区 开源 第三方图像处理
numpy 开源社区 开源 第三方数值计算
sys/ctypes/json/time 等 python 内置库 Python 官方 开源 标准库

四、几个极易混淆的关键点(实战重点)

  1. “Demo 代码开源 ≠ 底层 SDK 开源” 你能修改这份 py 脚本,但是不能修改 libpostprocess.so 内部的 FCOS 解码逻辑无法调试后处理底层;如果想自定义 FCOS 解码,只能自己用 Python 重写后处理,抛弃 libpostprocess.so。

  2. NV12 转换函数归属 bgr2nv12_opencv() 是地平线 demo 里自己写的开源代码;不属于 OpenCV 内置函数。

  3. ctypes 一大段 class 结构体是什么? 属于地平线开源 demo 代码。目的:在 Python 层模拟 C 结构体内存布局,用来和闭源libpostprocess.so互通参数,没有这部分代码就传不了张量指针。

  4. 模型.bin 文件不能逆向 它不是通用 ONNX/PyTorch 权重,是地平线 OX 编译器针对 BPU 架构生成的二进制指令,闭源格式。

五、延伸建议

如果你有二次开发 / 商用交付场景:

  • 可以自由修改这份 python 源码(遵守 Apache2.0);
  • 底层 hobot 系列 SDK、libpostprocess.so 分发必须遵循地平线 RDK 平台最终用户协议;
  • 如果不想依赖闭源libpostprocess.so,方案:移除所有 ctypes 代码,纯 Python 实现 FCOS 后处理(代价:CPU 占用上升、帧率下降)。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐