无垠的广袤 · 1月1日 · 上海

【“星睿O6”AI PC开发套件评测】图像分割

【“星睿O6”AI PC开发套件评测】图像分割

本文介绍了瑞莎星睿 O6 (Radxa Orion O6) 开发板结合 YOLO 算法模型实现图像分割的项目设计,包括环境搭建、预训练模型、工程代码和效果演示等。

项目介绍

  • 准备工作:OpenCV 安装、Ultralytics 软件包安装、预训练模型下载等;
  • 图像分割:采用 YOLOv8 算法及预训练模型实现图像分割;

准备工作

包括 硬件连接、虚拟环境创建、OpenCV 安装、Ultralytics 库部署等。

硬件连接

  • 使用 HDMI 数据线连接显示屏(也可使用 VNC 或 SSH 远程登录);
  • USB 接口连接鼠标键盘;
  • 网线连接 LAN 接口和路由器(或 WiFi 模块连接无线网);
  • 使用 PD 电源供电(或 ATX 电源供电);

hardware_connection.jpg

OpenCV 安装

为了避免影响系统 Python,这里采用创建虚拟环境的方案

  • 创建并激活虚拟环境
mkdir ~/cv && cd ~/cv    # 创建 cv 文件夹,便于管理
python3 -m venv venv     # 创建虚拟环境 venv
source venv/bin/activate # 激活虚拟环境 venv
  • 升级 pip 并安装 NumPy + OpenCV 全家桶
pip install -U pip numpy                          # 安装 numpy
pip install opencv-python opencv-contrib-python   # opencv 主模块及 contrib
  • 验证安装
python3 -c "import cv2,sys,numpy;print('OpenCV:',cv2.__version__,'NumPy:',numpy.__version__)"
  • 输出版本号

详见:OpenCV .

Ultralytics 部署

Ultralytics 基于多年在计算机视觉和人工智能领域的基础研究,在目标检测跟踪实例分割图像分类姿态估计等任务中表现出色。

  • 使用系统或第三方轮子,安装 ultralytics 软件包
sudo apt update && sudo apt install -y python3-dev python3-pip libopenblas-dev
pip install ultralytics
  • 验证安装
python3 -c "import ultralytics, sys, torch; print('ultralytics', ultralytics.__version__, '| torch', torch.__version__, '| Python', sys.version.split()[0])"
  • 输出相应版本号

详见:ultralytics .

图像分割

图像切割算法是计算机视觉中的核心技术,旨在将图像划分为具有相似特征的区域或对象,以便进一步分析和处理。常见的图像切割方法包括基于阈值、区域、边缘以及深度学习的算法。

image_segmentation_yolo.jpg

模型

获取目标模型(这里使用 YOLO 预训练模型 yolov8n-seg.pt 权重文件);

wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8n-seg.pt

将其放置于 model 文件夹。

代码

终端执行 source ~/cv/venv/bin/activate 激活虚拟环境;

修改蒙版透明度,获得更清晰的图像分割效果,代码如下

import cv2
import numpy as np
from ultralytics import YOLO
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-i', '--image', default='./img/road.jpg')
args = parser.parse_args()
IMG_FILE = args.image

model = YOLO('./model/yolov8n-seg.pt')
img = cv2.imread(IMG_FILE)
h, w = img.shape[:2]

results = model(img, imgsz=640, conf=0.25)

# 复制原图
annotated = img.copy()

# mask 叠加
alpha = 0.6                  # 填充透明度(值越小越透明)
for r in results:
    for mask, cls in zip(r.masks.xy, r.boxes.cls):
        color = (int(cls)*30, 255-int(cls)*30, 255)
        pts = np.int32(mask)

        # 填充内部
        overlay = annotated.copy()
        cv2.fillPoly(overlay, [pts], color=color)
        annotated = cv2.addWeighted(annotated, 1-alpha, overlay, alpha, 0)

        # 加粗轮廓
        cv2.polylines(annotated, [pts], isClosed=True,
                      color=color, thickness=2, lineType=cv2.LINE_AA)

# 画框和标签
annotated = results[0].plot(img=annotated, masks=False)

cv2.namedWindow("Image Segmentation", cv2.WINDOW_NORMAL) # 自定义缩放画面
cv2.imshow("Image Segmentation", annotated)
cv2.waitKey(0)
cv2.destroyAllWindows()

可实现更清晰的图像分割轮廓显示。

效果

  • 终端执行 python seg_yolo.py 指令;
  • 终端打印图像分割结果;

    seg_print.jpg

  • 弹窗显示结果

seg_road.jpg

更多效果演示

seg_cars.jpg

seg_bus.jpg

seg_fruits.jpg

seg_sport.jpg

seg_dinner.jpg

总结

本文介绍了瑞莎星睿 O6 (Radxa Orion O6) 开发板结合 YOLO 算法模型实现图像分割的项目设计,包括环境搭建、预训练模型、工程代码和效果演示等,为相关产品在边缘 AI 视觉领域的开发设计和快速应用提供了参考。

推荐阅读
关注数
4
文章数
25
MCU 开发者和爱好者
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息