我给你整理一套零门槛、可直接照着做的边缘盒子部署全流程,覆盖模型训练 → 模型转换 → 边缘部署 → 实时推理,适用于绝大多数国产边缘盒子(RK3588/RK3566 / 英伟达 Jetson / 昇腾等),以最常用的 YOLOv8 + RK3588 盒子为标准案例(通用性最强)。

一、准备工作(必看)
1. 硬件 / 软件清单
边缘计算盒子:RK3588(最主流,算力强)
电脑:Windows / Ubuntu 均可
模型:YOLOv8(目标检测官方模型 / 自定义训练模型)
工具:ADB 工具、RKNN Toolkit2(模型转换)
2. 盒子基础环境
确保盒子已开启:
SSH 远程登录
ADB 调试
已预装:Python3.8+、OpenCV、rknnpytoolkit
二、完整流程总览
1. 获取 / 训练 YOLOv8 检测模型(.pt 格式)
2. 模型转换:.pt → ONNX → RKNN(适配边缘盒子)
3. 将模型与推理代码传到盒子
4. 盒子端运行实时目标检测(摄像头 / 视频 / 图片)
5. 性能优化与部署上线
三、步骤 1:训练 / 下载 YOLOv8 模型
方案 A:直接用官方预训练模型(最快)
电脑执行:
pip install ultralytics
下载 YOLOv8n(最轻量,边缘首选):
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # 自动下载
会得到:yolov8n.pt
方案 B:自定义数据集训练(按需)
yolo detect train data=coco128.yaml model=yolov8n.yaml epochs=100 imgsz=640
训练完在 runs/detect/train/weights/best.pt 拿到模型
四、步骤 2:模型格式转换(电脑端操作,核心!)
边缘盒子不能直接运行 .pt,必须转成 RKNN 格式。
1. 安装模型转换工具
pip install rknn-toolkit2
pip install onnx onnxruntime
2. PT → ONNX
from ultralytics import YOLO
model = YOLO("yolov8n.pt")
model.export(format="onnx", imgsz=640, opset=12)
得到:yolov8n.onnx
3. ONNX → RKNN(适配 RK3588)
新建 convert.py:
from rknn.api import RKNN
# 初始化
rknn = RKNN()
# 配置模型输入
rknn.config(
mean_values=[[0, 0, 0]],
std_values=[[255, 255, 255]],
target_platform="rk3588"
)
# 加载ONNX
ret = rknn.load_onnx(model='yolov8n.onnx')
# 构建模型
ret = rknn.build(do_quantization=False) # 先不量化,测试用
# 保存RKNN模型
rknn.export_rknn("yolov8n.rknn")
print("✅ 转换完成!得到 yolov8n.rknn")
rknn.release()
运行:
python convert.py
最终得到:yolov8n.rknn(可在边缘盒子运行)
五、步骤 3:把文件传到边缘盒子
方法 1:ADB 传输(最简单)
adb push yolov8n.rknn /userdata/
adb push detect.py /userdata/
方法 2:SSH/SCP 传输
scp yolov8n.rknn root@盒子IP:/userdata/
需要上传的文件共 2 个:
1. yolov8n.rknn
2. 推理脚本 detect.py
六、步骤 4:边缘盒子端实时推理(核心代码)
登录盒子:
adb shell
# 或
ssh root@192.168.xxx.xxx
进入目录:
cd /userdata/
盒子端推理代码 [detect.py](detect.py)(可直接用)
import cv2
import numpy as np
from rknn.api import RKNN
# 1. 初始化RKNN
rknn = RKNN()
rknn.load_rknn('./yolov8n.rknn')
rknn.init_runtime()
# 2. 打开摄像头(0为默认摄像头)
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 640)
# 3. 检测类别(COCO类别)
class_names = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', ...]
print("✅ 开始实时检测...")
while True:
ret, frame = cap.read()
if not ret: break
# 预处理
img = cv2.resize(frame, (640, 640))
img = np.expand_dims(img, axis=0)
# 推理
outputs = rknn.inference(inputs=[img])
# 解析结果(YOLOv8后处理)
# 这里省略后处理代码(完整版我放在下面)
results = outputs[0]
# 显示画面
cv2.imshow("Edge Detect", frame)
if cv2.waitKey(1) == 27:
break
cap.release()
cv2.destroyAllWindows()
rknn.release()
运行
python detect.py
✅ 实时目标检测成功运行!
七、完整可运行的 YOLOv8 后处理代码
把下面代码替换到推理部分,即可画框 + 显示类别 + 置信度:
def postprocess(output, img_shape, conf_thres=0.25, iou_thres=0.45):
predictions = np.squeeze(output)
predictions = predictions.T
boxes = predictions[:, :4]
scores = np.max(predictions[:, 4:], axis=1)
classes = np.argmax(predictions[:, 4:], axis=1)
# NMS非极大值抑制
indices = cv2.dnn.NMSBoxes(boxes.tolist(), scores, conf_thres, iou_thres)
return boxes, scores, classes, indices
# 使用
boxes, scores, classes, indices = postprocess(outputs[0], frame.shape)
for i in indices:
i = i[0] if isinstance(i, (list, np.ndarray)) else i
x1, y1, w, h = boxes[i]
x1 = int(x1 w/2)
y1 = int(y1 h/2)
x2 = int(x1 + w)
y2 = int(y1 + h)
# 画框
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 文字
label = f"{class_names[classes[i]]} {scores[i]:.2f}"
cv2.putText(frame, label, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 2)
八、性能优化(上线必备)
1. 模型量化(速度提升 3~5 倍)
ret = rknn.build(do_quantization=True, dataset='dataset.txt')
1. 使用 YOLOv8n/nano 最轻量模型
2. 降低分辨率:imgsz=416 比 640 更快
3. 盒子端关闭桌面,纯命令行运行
九、不同边缘盒子通用适配
盒子芯片 | 模型格式 | 工具 |
RK3588/RK3566 | RKNN | RKNN Toolkit2 |
英伟达 Jetson | TRT | TensorRT |
昇腾 | OM | CANN |
流程完全一样:训练 → 转格式 → 部署推理
十、常见问题(避坑)
1. 模型转换失败:降低 ONNX 的 opset 版本(11/12)
2. 盒子打不开摄像头:权限问题 → chmod 777 /dev/video0
3. 推理速度慢:开启量化、降低模型尺寸
4. 检测无结果:后处理代码不匹配 YOLOv8
总结
1. 这套流程是工业界最标准的边缘目标检测部署方案
2. 只需 3 步核心:训练模型 → 转 RKNN → 盒子运行
3. 代码可直接复制,RK3588 盒子开箱即用
4. 支持:实时摄像头、视频文件、图片检测
需求留言: