【工业树莓派 CM0 NANO 单板计算机】YOLO26 部署方案

【工业树莓派 CM0 NANO 单板计算机】YOLO26 部署方案

本文介绍了工业树莓派 CM0 NANO 单板计算机结合 OpenCV 和 Ultralytics 库实现 YOLO26 板端部署,并实现目标识别、姿态估计、图像分割、图像分类、旋转框检测的项目设计,包括环境部署、模型获取、关键代码、效果演示等。

项目介绍

  • 准备工作:OpenCV 安装、Ultralytics 软件包安装、预训练模型下载等;
  • YOLO26:目标检测、实例分割、图像分类、姿态估计、旋转框检测等;

为了快速实现图像分类,需完成 OpenCV 部署和 Ultralytics 软件包的安装等操作。

准备工作

包括硬件连接、OpenCV 安装、Ultralytics 库部署、YOLO26 模型下载等。

硬件连接

  • 连接 WiFi 实现无线网络通信;
  • 使用 Type-C 数据线实现设备供电;

OpenCV 安装

OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理、视频分析和机器学习等领域。

为了避免影响系统 Python,采用虚拟环境的方案。

  • 创建并激活虚拟环境
bash 复制代码
python3 -m venv venv     # 创建虚拟环境 venv
source venv/bin/activate # 激活虚拟环境 venv
  • 安装 opencv
bash 复制代码
pip install opencv-python opencv-contrib-python
  • 验证安装
bash 复制代码
python3 -c "import cv2,sys,numpy;print('OpenCV:',cv2.__version__,'NumPy:',numpy.__version__)"
  • 输出版本号

详见:OpenCV .

Ultralytics 部署

Ultralytics 基于多年在计算机视觉和人工智能领域的基础研究,打造出尖端、先进的 YOLO 模型;具有 速度快精度高操作简便 等特点。

目标检测跟踪实例分割图像分类姿态估计 等任务中表现出色。

  • 安装 ultralytics 软件包(虚拟环境下)
bash 复制代码
pip install --no-cache-dir --no-deps torch # 省内存
pip install ultralytics
  • 验证安装
bash 复制代码
python3 -c "import ultralytics, sys, torch; print('ultralytics', ultralytics.__version__, '| torch', torch.__version__, '| Python', sys.version.split()[0])"
  • 输出相应版本号

详见:ultralytics .

YOLO26

Ultralytics YOLO26 是 YOLO 系列实时对象检测器的最新演进,从头开始专为边缘和低功耗设备而设计。它引入了简化的设计,消除了不必要的复杂性,同时集成了有针对性的创新,以实现更快、更轻、更易于访问的部署。

YOLO26 的架构遵循三个核心原则:

  • 简洁性: YOLO26是 端到端 模型,直接生成预测结果,无需非极大值抑制(NMS)。通过消除这一后处理步骤,推理变得更快、更轻量。
  • 部署效率: 端到端设计消除了管道的整个阶段,从而大大简化了集成,减少了延迟。
  • 训练创新: YOLO26 引入了 MuSGD 优化器,带来了增强的稳定性和更快的收敛,将语言模型中的优化进展转移到计算机视觉领域。
  • 任务特定优化: YOLO26 针对专业任务引入了有针对性的改进,包括用于 Segmentation 的语义分割损失和多尺度原型模块,用于高精度 姿势估计 的残差对数似然估计 (RLE),以及通过角度损失优化解码以解决 旋转框检测 中的边界问题。

这些创新共同提供了一个模型系列,该模型系列在小对象上实现了更高的精度,提供了无缝部署,并且在 CPU 上的运行速度提高了 43%,使其更适合资源受限环境。

详见:YOLO26 | Ultralytics .

模型获取

下载所需模型文件;

bash 复制代码
wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n.pt
wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n-seg.pt
wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n-cls.pt
wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n-pose.pt
wget https://github.com/ultralytics/assets/releases/download/v8.4.0/yolo26n-obb.pt

将文件存放在 ./model 路径。

流程图

开始
载入模型
载入图片
YOLO检测/识别
绘制标签
弹窗显示
退出

目标检测

目标检测是一项涉及识别图像或视频流中目标的位置和类别的任务。

目标检测器的输出是一组边界框,这些边界框包围了图像中的目标,以及每个框的类别标签和置信度分数。

详见:Object Detection .

代码

终端执行 touch or.py 新建程序文件,并添加如下代码

python 复制代码
import cv2
from ultralytics import YOLO

model = YOLO('./model/yolo26n.pt')      # 加载模型
img = cv2.imread('./img/road.jpg')      # 加载图片

results = model(img, imgsz=640, conf=0.25)   # 返回 Boxes
annotated = results[0].plot()                # 画框和标签

cv2.imshow("YOLO Detection", annotated)   # 弹窗显示
cv2.waitKey(0)
cv2.destroyAllWindows()

保存代码。

效果

  • 终端执行 python or.py 指令,对图片进行物体识别
  • 终端打印识别到的物体、置信度、耗时等信息
  • 弹窗显示识别结果

实例分割

实例分割是识别图像中的各个对象,并将它们与图像的其余部分分割开来。

实例分割模型的输出是一组掩码或轮廓,它们勾勒出图像中每个对象,以及每个对象的类别标签和置信度分数。

详见:Instance Segmentation .

代码

终端执行 touch seg.py 新建程序文件,并添加如下代码

python 复制代码
import cv2
from ultralytics import YOLO

model = YOLO('./model/yolo26n-seg.pt')     # 分割模型
img = cv2.imread('./img/bicycle.jpg')


results = model(img, imgsz=640, conf=0.25)   # 推理分割
annotated = results[0].plot(boxes=False, labels=False)      # mask

cv2.namedWindow("YOLO26-Seg", cv2.WINDOW_NORMAL)
cv2.imshow("YOLO26-Seg", annotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

保存代码。

效果

  • 终端执行 python seg.py 指令,对目标进行图像分割
  • 终端打印识别到的物体、坐标、耗时等信息
  • 弹窗显示图像分割结果

图像分类

图像分类是将整个图像分类到一组预定义的类别中。

图像分类器的输出是单个类别标签和一个置信度分数。

详见:Image Classification .

代码

终端执行 touch cls.py 新建程序文件,并添加如下代码

python 复制代码
import cv2
from ultralytics import YOLO

model = YOLO('./model/yolo26n-cls.pt')      # 加载模型
img = cv2.imread('./img/road.jpg')      # 加载图片

results = model(img, imgsz=640, conf=0.25)   # 返回 Boxes
annotated = results[0].plot()                # 画框和标签

cv2.imshow("YOLO-Classify", annotated)   # 弹窗显示
cv2.waitKey(0)
cv2.destroyAllWindows()

保存代码。

效果

  • 终端执行 python cls.py 指令,对图片目标进行分类;
  • 终端打印识别到的物体、置信度、耗时、坐标等信息
  • 弹窗显示图像分类结果

姿态估计

姿势估计是一项涉及识别图像中特定点的位置的任务,这些点通常称为关键点。关键点可以代表对象的各个部分,例如关节、地标或其他独特特征。

姿势估计模型的输出是一组点,这些点代表图像中对象上的关键点,通常还包括每个点的置信度分数。

详见:Pose Estimation .

代码

终端执行 touch pos.py 新建程序文件,并添加如下代码

python 复制代码
import cv2
from ultralytics import YOLO

model = YOLO('./model/yolo26n-pose.pt')   # 关键点模型
img = cv2.imread('./img/dance.jpg')

results = model(img, imgsz=640, conf=0.25)   # 返回 Keypoints
# annotated = results[0].plot(kpt_radius=4, kpt_line=True)  # 画点+连线
annotated = results[0].plot(
    boxes=False,      # 无外框
    labels=False,     # 无标签
    conf=False,       # 无置信度
    kpt_radius=4,     # 点大小
    kpt_line=True     # 骨架连线
)

cv2.imshow("YOLO-Pose", annotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

保存代码。

效果

  • 终端执行 python pos.py 指令,对人体姿态进行关键点标注;
  • 终端打印识别到的人体数量、推理速度、置信度、耗时等信息
  • 弹窗显示姿态估计结果

旋转框检测

定向对象检测通过引入一个额外的角度来更准确地定位图像中的对象,从而比标准对象检测更进一步。

定向目标检测器的输出是一组旋转的边界框,这些边界框精确地包围了图像中的目标,以及每个框的类别标签和置信度分数。

详见:Oriented Bounding Boxes Object Detection .

代码

终端执行 touch obb.py 新建程序文件,并添加如下代码

python 复制代码
import cv2
from ultralytics import YOLO

model = YOLO('./model/yolo26n-obb.pt')      # 加载模型
img = cv2.imread('./img/parking.jpg')      # 加载图片

results = model(img, imgsz=640, conf=0.25)   # 返回 Boxes
annotated = results[0].plot(labels=False)    # 画框

cv2.imshow("YOLO-obb", annotated)   # 弹窗显示
cv2.waitKey(0)
cv2.destroyAllWindows()

保存代码。

效果

  • 终端执行 python obb.py 指令,对图片进行目标识别和框选;
  • 终端打印识别到的车辆种类、数量、置信度、耗时等信息
  • 弹窗显示旋转框标注结果

总结

本文介绍了工业树莓派 CM0 NANO 单板计算机结合 OpenCV 和 Ultralytics 库实现 YOLO26 板端部署,并实现目标识别、姿态估计、实例分割、图像分类、旋转框检测的项目设计,包括环境部署、模型获取、关键代码、效果演示等,为相关产品在边缘 AI 领域的快速开发和应用设计提供了参考。

相关推荐
Java后端的Ai之路9 小时前
【Python 教程15】-Python和Web
python
Coder个人博客10 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
冬奇Lab11 小时前
一天一个开源项目(第15篇):MapToPoster - 用代码将城市地图转换为精美的海报设计
python·开源
Doro再努力12 小时前
Vim 快速上手实操手册:从入门到生产环境实战
linux·编辑器·vim
wypywyp12 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
二十雨辰13 小时前
[python]-AI大模型
开发语言·人工智能·python
Doro再努力13 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim
senijusene13 小时前
Linux软件编程:IO编程,标准IO(1)
linux·运维·服务器
Yvonne爱编码13 小时前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
忧郁的橙子.13 小时前
02-本地部署Ollama、Python
linux·运维·服务器