你好 @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。
推荐资源
- RDK S100 Python API 文档 (官方文档,查看
hbm_runtime用法) - RDK S100 Model Zoo 示例 (直接抄作业)
- 社区教程:RDKS100 模型部署万字教程
总结:放弃 hobot_dnn,转向 hbm_runtime,并直接使用 Model Zoo 中的 Python 示例代码加载你的 .hbm 模型。