做个 ROS 2 视觉检测开源库-YOLO介绍与使用

大家好,我是小鱼。

今天给大家分享一个 ROS 2 +视觉开源库。

《做个 ROS 2 视觉检测开源库-YOLO介绍与使用》

在无人驾驶和室内工作场景中,机器人需要进行物体识别,包括路上的车辆和行人,以及室内的餐盘回收等任务。计算机视觉技术在机器人系统中扮演着至关重要的角色。其中,YOLO(You Only Look Once)是一种高速而准确的目标检测算法,能够实时识别图像或视频中的多个对象,而无需多次检测。本章将详细介绍如何将目标检测算法YOLO与ROS 2集成,同时探讨如何创建一个开源库来完成目标检测任务。

YOLO 介绍与安装

目标检测(Object Detection)是计算机视觉领域中的一项重要任务,它的主要作用是识别图像中的物体并确定其位置。比如一张道路图像,通过目标检测不仅要找到道路中的物体,还需要确认物体的位置和类别。在目标检测中物体的位置一般使用边界框(Bounding Box )表示,边界框使用物体的中心位置(x,y)和物体的宽(w)、高(h)四个数据表示,而类别则使用标签表示,一般是字符串,比如货车、轿车和自行车等。YOLO 就是一种基于深度学习的实时目标检测算法,也是本章在开源库中使用的检测算法,所以在开始编写开源库之前,我们先来了解 YOLO 和其使用方法。

目标检测可以分为单一物体检测和多物体检测,YOLO 就是一种高效且准确的多物体检测算法,就像其名字全称 ”You Only Look Once“ 含义一样, “你只需看一眼“ 就可以完成目标检测任务。YOLO 有多个版本,YOLOv1 是最早被提出的,在 YOLOv1 之前的时代,目标检测这活一直由 R-CNN 系列算法主导,尽管R-CNN系列在检测准确度方面表现出色,但因为其结构复杂,导致检测速度无法满足实时要求。于是在 2016 年,YOLOv1 算法由 Joseph Redmon 等人提出,它将目标检测视为一个回归问题,直接在整个图像上使用一个卷积神经网络来预测边界框和类别概率。所以 YOLOv1 算法的特点是速度快,而且能够捕捉到目标的全局信息,减少了背景误检的情况,这一特点也被后续版本的 YOLO 算法所继承。本章的重点是结合 ROS 2 来使用 YOLO,所以对目标检测的基本概念和 YOLO 算法的工作原理不会进行更进一步的介绍。YOLO 有多个版本,本章我们选用安装更为方便和更容易投入生产的 YOLOv5 作为我们学习和使用的版本。要在我们系统上安装 YOLOv5 非常简单,只需要通过 Python 包管理器 pip,一行命令就可以安装,命令如下:

sudo pip3 install yolov5 -i https://pypi.tuna.tsinghua.edu.cn/simple

因为安装 YOLO 需要下载较多功能包,所以上面的命令使用 -i 选项指定了一个国内清华的软件源进行下载。如果对源码感兴趣或者有修改源码需求的小伙伴,可以通过下载源码方式进行安装,下载以及安装命令如下:通过源码安装 YOLOv5

git clone https://github.com/fcakyon/yolov5-pip.git
cd yolov5-pip
sudo python3 setup.py install

安装完成后,就可以使用命令行工具进行训练和检测了,我们并没有训练自己的数据集,所以这里使用 YOLOv5 提供的训练好的常见物体的目标检测模型,新建 chapt8/learn_yolo 目录,然后在终端中进入该目录运行下面的命令,下载模型文件和待检测图片:

wget https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5n.pt
wget https://raw.githubusercontent.com/fcakyon/yolov5-pip/main/tests/data/zidane.jpg

第一行命令中下载的是模型文件 yolov5n.pt ,它的大小不到 5 MB,是非常小的版本,适合要求较快检测速度的场景,除了 yolov5n.pt ,根据模型从小到大还有 yolov5s.pt, yolov5m.pt, yolov5l.pt, yolov5x.pt,体积越大的模型相应检测精度越高,速度越慢。有了模型文件和图片,使用下面的命令就可以使用模型文件对该图片进行目标检测,命令如下:

yolov5 detect --source zidane.jpg --weights yolov5n.pt
---
...
Fusing layers... 
YOLOv5n summary: 270 layers, 1872157 parameters, 0 gradients
image 1/1 /home/fishros/zidane.jpg: 384x640 2 persons, 1 tie, 30.8ms
Speed: 0.4ms pre-process, 30.8ms inference, 1.0ms NMS per image at shape (1, 3, 640, 640)
Results saved to runs/detect/exp2

从结果可以看出,对于图片 zidane.jpg ,一共检测出了三个物体 2 persons, 1 tie 耗时 30.8ms,检测结果图片保存在了 runs/detect/exp2 目录,打开该目录可以看到同名的结果图片,对应的物体位置和类别已经完美的被检测出来。

YOLOv5 预训练模型对图片的检测结果

除了直接检测一个本地图片,也可以直接指定系统视频设备的编号来启动实时的检测,比如指定设备号为 0 的视频设备,指令如下:

yolov5 detect --source 0 --weights yolov5x.pt

感受完 YOLO 的强大,但要想让 YOLO 结合 ROS 2 一起使用,我们还要掌握如何使用 Python 调用 yolov5 模块,完成检测。

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!ROS 2是一个用于构建机器人系统的开源框架,而YOLO(You Only Look Once)是一种流行的实时目标检测算法。如果您想在ROS 2中实现人脸识别的YOLO算法,可以按照以下步骤进行操作: 1. 首先,安装ROS 2并设置工作空间。您可以从ROS 2官方网站获取安装指南和教程。 2. 下载并编译适用于ROS 2的YOLO算法代码。您可以从YOLO的官方GitHub仓中获取代码,并根据ROS 2的要求进行修改和编译。 3. 创建一个ROS 2包来管理您的人脸识别节点。可以使用ROS 2的命令行工具或者使用一个ROS 2包模板来创建新的包。 4. 在您的ROS 2包中创建一个人脸识别节点。这个节点将用于加载和运行YOLO算法,并处理摄像头图像以执行人脸识别。 5. 在人脸识别节点中,订阅来自摄像头的图像数据。您可以使用ROS 2提供的图像传输消息格式来处理图像数据。 6. 在人脸识别节点中,将接收到的图像数据传递给YOLO算法进行目标检测和人脸识别。您可以使用已编译的YOLO算法来执行这些任务。 7. 在人脸识别节点中,将检测到的人脸信息发布为ROS 2的消息。可以创建一个自定义的消息类型来存储人脸的位置、大小和其他相关信息。 8. 在另一个ROS 2节点中,订阅人脸识别节点发布的人脸信息消息,并执行相应的响应操作,比如显示识别结果或者执行其他任务。 这只是一个大致的步骤,具体的实现细节会根据您使用YOLO算法版本和ROS 2的特定要求而有所不同。希望这些信息能对您有所帮助!如果您有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值