在制造设施中,例如检测木托盘的位置,目标检测技术扮演着重要角色。尽管YOLOv5已经被YOLOv8所取代,但它依然拥有一个活跃的社区,并且许多模型仍在生产中部署。建议探索如何使用YOLOv8进行目标检测,但如果仍然需要YOLOv5,也会提供支持。
本指南将带了解如何使用YOLOv5进行目标检测。将上传YOLOv5模型到Roboflow,然后使用Inference在设备上部署模型。将在图像和视频流上部署模型。下图展示了通过Inference获取的模型结果示例:在上述图像中,模型成功地识别了木托盘的位置。
接下来,让开始吧!使用RoboflowInference部署YOLOv5模型进行目标检测。Inference是一个可扩展的推理服务器,可以在自己的硬件上运行计算机视觉模型。Inference被全球企业信赖,用于部署视觉模型。可以将Inference部署为HTTP微服务,或者直接将模型集成到Python代码中,使用Inference SDK。在本指南中,将使用SDK部署Inference。
要开始检测目标,需要一个YOLOv5目标检测模型。可以按照RoboflowYOLOv5训练笔记本进行模型训练。这个笔记本提供了训练模型所需的一切。要使用训练笔记本,并部署模型与Inference,需要在Roboflow中创建一个包含所有用于模型训练的图像的项目。这允许创建数据集版本,这是数据集在特定时刻的状态。创建数据集版本可以让轻松跟踪数据集随时间的变化。
要在Roboflow中创建项目,请创建一个Roboflow账户,然后在Roboflow仪表板上点击“创建新项目”。然后,上传所有的图像。如果项目图像尚未注释,可以使用Roboflow Annotate进行注释。一旦注释了所有图像,转到Roboflow数据集页面的“生成”标签。这将允许生成一个数据集版本。可以从这个快照开始在自己的硬件上训练模型。可以下载YOLOv5格式的数据集,因此不需要对数据集结构进行任何更改即可在模型训练中使用它。
有了Roboflow中准备好的数据集版本,可以开始使用YOLOv5训练笔记本训练YOLOv5模型。接下来,需要将模型上传到Roboflow以供部署使用。要了解如何上传模型,请参考模型权重上传指南。上传到Roboflow的模型可以下载到机器上以运行模型。
一旦在Roboflow上有了一个模型,就可以使用Roboflow Inference部署它。在本指南中,将部署一个能够识别物流设施中木托盘位置的模型。要开始,安装Inference:
pip install inference
然后,创建一个新文件并添加以下代码:
from inference import get_roboflow_model
import supervision as sv
import cv2
image_file = "image.jpeg"
image = cv2.imread(image_file)
model = get_roboflow_model(model_id="pallet-h7lkh/1")
results = model.infer(image)
detections = sv.Detections.from_roboflow(results[0].dict(by_alias=True, exclude_none=True))
bounding_box_annotator = sv.BoundingBoxAnnotator()
label_annotator = sv.LabelAnnotator()
annotated_image = bounding_box_annotator.annotate(
scene=image, detections=detections)
annotated_image = label_annotator.annotate(
scene=annotated_image, detections=detections)
sv.plot_image(annotated_image)
在这段代码中,加载了模型,然后在图像上运行推理。当这段代码首次运行时,模型权重(用于运行模型)将从Roboflow下载到硬件上。这个过程将需要一些时间。下载到计算机上的权重将用于运行模型。
在上面的代码中,将“pallet-h7lkh/1”替换为Roboflow模型ID,或者想要运行的任何Roboflow Universe上的模型ID。了解如何找到Roboflow模型ID。将“API_KEY”替换为Roboflow API密钥。这将用于验证系统与Roboflow,并检索模型权重。了解如何检索Roboflow API密钥。
让在下面的木托盘图像上运行脚本:代码返回:模型成功地在图像中识别了木托盘的位置。
还可以在视频流上运行YOLOv5模型。这对于将模型部署到生产设施中,需要在实时数据上运行模型是非常理想的。可以从网络摄像头或RTSP流中运行模型。
在本指南中,让在网络摄像头馈送上运行推理。为此,创建一个新文件并添加以下代码:
# 导入InferencePipeline对象
from inference import InferencePipeline
# 导入内置的render_boxes接收器,用于可视化结果
from inference.core.interfaces.stream.sinks import render_boxes
# 初始化一个pipeline对象
pipeline = InferencePipeline.init(
model_id="pallet-h7lkh/1", # 使用的Roboflow模型
video_reference=0, # 视频路径,设备ID(通常是内置网络摄像头的0)或RTSP流URL
on_prediction=render_boxes, # 每个预测后运行的函数
)
pipeline.start()
pipeline.join()
这段代码使用Roboflow Inference中的InferencePipeline功能来处理视频。在上面的代码中,将0替换为想要从中检索帧的相机的ID。默认相机ID为0。也可以指定一个RTSP流URL而不是视频ID。render_boxes函数将实时绘制边界框。可以设置自己的回调函数来编写自定义逻辑。supervision Python包有一系列工具,可以使用这些工具来编写自己的逻辑,处理来自模型的预测。例如,可以使用supervision ByteTrack实现来跟踪对象,使用supervision Smoother类在多个帧上平滑预测等。
要了解如何编写自己的回调函数,请参考Inference文档。