华北地区负责人:17340067106(毛经理)
华东地区负责人:17358670739(甘经理)
华南、华西地区负责人:19113907060(耿女士)
软件算法咨询:18982151213(刘先生)

联系我们
产品咨询

BM1684X 边缘计算盒子一键部署 YOLOv8 新手教程(全流程)

作者:万物纵横
发布时间:2026-04-08 13:32
阅读量:

BM1684X 边缘盒部署 YOLOv8 核心是 “模型转换 + 一键推理脚本”,全程无需复杂编译,新手复制命令即可完成。以下是从环境准备到实时检测的完整步骤,适配算能 BM1684X 边缘计算盒子(Ubuntu 系统)。


BM1684X 边缘计算盒子一键部署 YOLOv8 新手教程(全流程)(图1)


一、部署前准备


1. 硬件与系统


- 设备:BM1684X 边缘计算盒子(已刷官方 Ubuntu 20.04 系统)


- 网络:盒子联网(用于安装依赖、下载模型)


- 工具:电脑 SSH 连接盒子(或盒子接显示器/键鼠直接操作)


2. 必备软件(一键安装)


盒子终端执行,安装 YOLOv8 依赖 + Sophon SDK 推理库:


# 1. 更新系统

sudo apt update && sudo apt upgrade -y


# 2. 安装基础依赖

sudo apt install python3-pip python3-dev libopencv-dev git -y


# 3. 安装 YOLOv8 官方库

pip3 install ultralytics==8.0.200 -i https://pypi.tuna.tsinghua.edu.cn/simple


# 4. 安装 BM1684X 推理库(Sophon SAIL)

pip3 install sophon-sail -i https://pypi.tuna.tsinghua.edu.cn/simple


# 5. 验证安装(无报错即成功)

python3 -c "from ultralytics import YOLO; import sophon.sail as sail; print('环境就绪')"


二、核心步骤:YOLOv8 模型转换(ONNX → BModel)


BM1684X 不直接支持 PyTorch 模型,需先转 ONNX,再转芯片专用 BModel 格式。


1. 下载/导出 YOLOv8 ONNX 模型


# 1. 创建工作目录

mkdir -p ~/bm1684x_yolov8 && cd ~/bm1684x_yolov8


# 2. 导出 YOLOv8n 最轻量模型为 ONNX(640×640 输入)

python3 -c "

from ultralytics import YOLO

model = YOLO('yolov8n.pt')  # 自动下载权重

model.export(format='onnx', imgsz=640, batch=1, simplify=True)

"


执行后生成:yolov8n.onnx


2. ONNX 转 BM1684X BModel(FP16 量化,速度更快)


# 模型转换命令(直接复制运行)

bmnet_onnx \

  --model=yolov8n.onnx \

  --target=BM1684X \

  --shapes=[1,3,640,640] \

  --opt=2 \

  --quantize=FP16 \

  --output=yolov8n_bm1684x_fp16.bmodel


- 等待 1–2 分钟,生成:yolov8n_bm1684x_fp16.bmodel(BM1684X 专用模型)


三、一键部署:BM1684X 实时推理脚本(新手直接用)


创建推理脚本 yolov8_bm1684x.py,全程无需改代码,直接运行:


import cv2

import sophon.sail as sail

import numpy as np


# 1. 初始化 BM1684X 引擎

engine = sail.Engine(0)  # 0=设备ID

engine.load_bmodel("yolov8n_bm1684x_fp16.bmodel")

input_name = engine.get_input_names()[0]

output_names = engine.get_output_names()


# 2. 预处理(适配 YOLOv8 640×640)

def preprocess(img):

    img = cv2.resize(img, (640, 640))

    img = img.transpose(2, 0, 1)  # HWC→CHW

    img = img.astype(np.float32) / 255.0

    img = np.expand_dims(img, axis=0)

    return img


# 3. 后处理(解析检测框)

def postprocess(outputs):

    pred = outputs[0][0]

    boxes = []

    scores = []

    classes = []

    for i in range(pred.shape[1]):

        x, y, w, h, conf, cls = pred[:, i]

        if conf > 0.25:  # 置信度阈值

            x1, y1 = int((x-w/2)*640), int((y-h/2)*640)

            x2, y2 = int((x+w/2)*640), int((y+h/2)*640)

            boxes.append([x1, y1, x2, y2])

            scores.append(float(conf))

            classes.append(int(cls))

    return boxes, scores, classes


# 4. 主推理(图片/视频/摄像头)

if __name__ == "__main__":

    # 测试图片(自动下载)

    img = cv2.imread("bus.jpg")

    if img is None:

        import urllib.request

        urllib.request.urlretrieve("https://ultralytics.com/images/bus.jpg", "bus.jpg")

        img = cv2.imread("bus.jpg")


    # 推理

    input_tensor = preprocess(img)

    engine.set_input_tensor(input_name, input_tensor)

    engine.forward()

    outputs = [engine.get_output_tensor(name).asnumpy() for name in output_names]

    boxes, scores, classes = postprocess(outputs)


    # 画框显示

    for box, score, cls in zip(boxes, scores, classes):

        x1, y1, x2, y2 = box

        cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)

        cv2.putText(img, f"cls:{cls} {score:.2f}", (x1, y1-10),

                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

    

    cv2.imwrite("result.jpg", img)

    print("检测完成!结果保存为 result.jpg")


四、一键运行 & 效果验证


1. 执行脚本


cd ~/bm1684x_yolov8

python3 yolov8_bm1684x.py


2. 查看结果


- 终端输出:检测完成!结果保存为 result.jpg


- 目录生成 result.jpg,带目标检测框(人、车、巴士等)


- 速度:BM1684X 跑 YOLOv8n 约 30–50 FPS(实时无压力)


五、进阶:实时摄像头/视频流推理


修改脚本最后部分,替换为摄像头/视频:


# 实时摄像头(USB 摄像头)

cap = cv2.VideoCapture(0)

while cap.isOpened():

    ret, frame = cap.read()

    if not ret: break

    # 推理+画框(同上)

    cv2.imshow("BM1684X YOLOv8", frame)

    if cv2.waitKey(1) & 0xFF == ord('q'): break

cap.release()


# 本地视频

# cap = cv2.VideoCapture("test.mp4")


六、新手常见问题


1. bmnet_onnx 命令找不到


解决:安装完整 Sophon SDK,或用官方 Docker 环境转换模型。


2. 推理速度慢


解决:用 FP16/INT8 量化、选 yolov8n/s 轻量模型、降低分辨率。


3. 检测框不准


解决:调整置信度阈值 conf > 0.25、重新导出 ONNX 并开启 simplify=True。


七、完整部署清单


1. 环境:ultralytics + sophon-sail + OpenCV


2. 模型:yolov8n.onnx → yolov8n_bm1684x_fp16.bmodel


3. 脚本:yolov8_bm1684x.py(一键推理)


4. 验证:图片/摄像头实时检测,30+ FPS

- END -
分享:
留言 留言 试用申请
产品咨询 产品咨询 硬件设备咨询
华北地区负责人:17340067106(毛经理)
华东地区负责人:17358670739(甘经理)
华南、华西地区负责人:19113907060(耿女士)
技术咨询 技术咨询 软件算法咨询
18982151213(刘先生)
微信在线客服 微信在线客服 在线客服
返回官网顶部 返回官网顶部 回到顶部
关闭窗口
产品订购
  • *

  • *

  • *

  • *

  • *