标题:RDK S100缺少hobot_dnn
[图像算法][RDK S100],烧录的最新的系统,在我自己主机上转换的yolov8n.pt到.hbm模型,在RDK S100板卡端进行推理时出现导入hobot_dnn错误,也apt也找不到源安装不上,然后在系统镜像下载目录找到/RDK_LNX_SDK/fimwares/deb_rootfs_packages.zip里看到有hobot_dnn的deb包,然后也安装失败,Error: Library file libhbtl_ext_dnn.so not found in /usr/hobot/lib. Aborting installation.
下面是系统刚烧录好的信息
sunrise@ubuntu:~$ cat /etc/version
sunrise@ubuntu:~$ python3 -c “from hobot_dnn import DNN; print(‘hobot_dnn true’)”
Traceback (most recent call last):
File “”, line 1, in
ModuleNotFoundError: No module named ‘hobot_dnn’
[问题分类]:[图像算法][语音算法][算法工具链][Linux开发][RDK Studio][RDK Model Zoo][GitHub][… 其他 …]
[板卡类型]:[RDK S100]
求助应该怎么解决,或者是我推理代码写的有问题,是官方的rdk_model_zoo_s里的代码我进行的简单修改,还是我的流程操作有问题?
你好 @fengyuriluo ,
核心结论:你找错库了。RDK S100 平台不使用 hobot_dnn,而是使用 hbm_runtime。
hobot_dnn 是 RDK X3/X5 平台的 Python 推理库,而 RDK S100 使用的是全新的工具链,对应的 Python 包是 hbm_runtime (或者在部分新版系统中叫 hobot_hbm)。你尝试安装 hobot_dnn 的 deb 包失败,是因为它依赖的底层库(如 libhbtl_ext_dnn.so)在 S100 的系统架构中不存在或不兼容。
解决方案步骤
1. 确认系统环境与预装库
S100 的最新系统镜像通常预装 了推理运行时,不需要手动 apt install。请先检查是否已存在 hbm_runtime。
在板端终端执行:
# 检查 python3 是否已包含 hbm_runtime
python3 -c "import hbm_runtime; print('hbm_runtime found')"
# 如果上面报错,尝试另一个可能的包名(新版 SDK)
python3 -c "import hobot_hbm; print('hobot_hbm found')"
# 查看已安装的 horizon 相关包
dpkg -l | grep hobot
2. 正确的 S100 推理代码示例
既然你已经有了 .hbm 模型,请使用以下基于 hbm_runtime 的标准代码进行推理,而不是 hobot_dnn。
Python 推理示例 (infer_s100.py):
import hbm_runtime
import numpy as np
import cv2
# 1. 加载 HBM 模型
# 注意:S100 模型通常是多输入/多输出,需根据 model_info 确认
model_path = "your_model.hbm"
runtime = hbm_runtime.Runtime()
runtime.load_model(model_path)
# 2. 准备输入数据
# S100 YOLO 模型通常要求 NV12 格式输入,尺寸需与转换时一致(如 640x640)
img = cv2.imread("test.jpg")
h, w = img.shape[:2]
# 转换为 NV12 (YUV420SP)
yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV_I420)
y_plane = yuv[:h, :]
uv_plane = yuv[h:, :]
# 构造输入 Tensor (具体 shape 需参考 hb_model_info 输出)
# 假设输入是 [1, 3, 640, 640] 的 RGB 或者 NV12 双平面,这里以 NV12 双输入为例
# 注意:不同模型输入定义不同,请务必运行 hb_model_info 查看
input_data = [y_plane, uv_plane]
# 3. 推理
# 输入通常需要封装成特定的 Tensor 格式,参考 Model Zoo 示例
# 简化版调用(具体 API 以你板子上的版本为准)
outputs = runtime.inference(input_data)
# 4. 处理输出
print("Inference done, outputs:", len(outputs))
# YOLO 通常有 6 个输出 Tensor,需要做 NMS 后处理
重要提示 :S100 的输入数据处理比 X3/X5 更严格。强烈建议直接参考板子上自带的 Model Zoo 示例代码,不要自己从头写数据预处理。
3. 获取官方示例代码 (最稳妥)
如果你的板子是最新系统,应该自带了 rdk_model_zoo_s 或类似目录。
# 查找示例代码
find / -name "*hbm*" -type f | grep -i sample
# 或者查看是否有 model_zoo 目录
ls /opt/rdk_model_zoo_s/samples/Vision/ultralytics_yolo/source/python/
如果没有找到,请去 GitHub 下载对应的 S100 Model Zoo 代码:
仓库:D-Robotics/rdk_model_zoo_s (注意是 _s 后缀,代表 S100)
路径:samples/Vision/ultralytics_yolo/source/python/
4. 关于手动安装 deb 包
如果确实缺失库(极少见),不要 安装 X3/X5 的 hobot_dnn 包。
检查你的系统源:cat /etc/apt/sources.list
确保执行过:sudo apt update
尝试搜索 S100 专用包:apt search hbm 或 apt search runtime
如果必须手动安装,请从 S100 对应的 SDK 压缩包 (RDK_LNX_SDK_..._s100.zip) 中的 deb_rootfs_packages.zip 寻找带 hbm 或 runtime 字样的包,而不是 dnn。
排查清单
为了更精准帮你,请补充以下信息:
系统版本号 :请运行 cat /etc/version 并贴出结果(这决定了 API 的具体写法)。
模型信息 :请运行 hb_model_info your_model.hbm (如果命令存在) 或告诉我你是用哪个版本的工具链 (hb_mapper 版本) 转换的模型。
报错截图 :如果运行 import hbm_runtime 也报错,请贴出具体的 Error Message。
推荐资源
总结 :放弃 hobot_dnn,转向 hbm_runtime,并直接使用 Model Zoo 中的 Python 示例代码加载你的 .hbm 模型。
瓜仔
(瓜仔)
2026 年10 月 9 日 02:19
3
补充一轮 S100 板卡实测,纠正前面回复中未经验证的 API 示例。
验证环境:RDK S100 V1P0,系统 4.0.5-Beta,Ubuntu 22.04.5,Python 3.10.12,hbm-runtime 0.1.0.post1。
在这套环境中,下面这句复现了原帖错误:
python3 -c 'from hobot_dnn import DNN'
# ModuleNotFoundError: No module named 'hobot_dnn'
实际可用的入口是:
python3 - <<'PY'
import hbm_runtime
from hbm_runtime import HB_HBMRuntime
print('模块路径:', hbm_runtime.__file__)
print('HB_HBMRuntime 导入成功')
PY
加载 .hbm 的写法是 HB_HBMRuntime("你的模型.hbm")。前面回复里的 hbm_runtime.Runtime()、load_model()、inference() 示例不应作为这套版本的可运行代码,请不要继续照抄;hobot_hbm 这个候选包名在本镜像上也没有验证成功。
这次还用板端预装的 /opt/hobot/model/s100/basic/mobilenetv2_224x224_nv12.hbm 跑了实际推理,得到 prob 输出,形状为 (1, 1000, 1, 1)、类型为 float32,证明运行时不只是能导入。
另外,apt 包名与 Python 导入名不是一回事 :本板安装了 hobot-dnn 系统包,但 from hobot_dnn import DNN 依然报错,所以不能仅凭这个 Python 报错就反复安装同名 deb。也不能只根据你遇到的缺库报错判断那个 deb 一定属于哪款板卡,需要核对其来源和 SDK 版本。
建议先完成上面的导入检查;若仍失败,请提供 cat /etc/version、python3 --version、python3 -m pip show hbm-runtime 及完整错误。导入成功后,再根据你的模型输入定义接入 HB_HBMRuntime,不能把其他模型的 NV12 输入形状直接套过去。
本轮没有你的 yolov8n.hbm、输入图片和修改后的推理代码,因此尚未验证你的 YOLO 完整推理及后处理 。以上结论仅针对列出的实测环境与预装模型。