标题: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 模型。