在现代生产线上,确保食品和饮料产品的包装中物品数量正确至关重要。例如,可以实施检查以确保在密封并准备分发之前,一个盒子里确实装有12瓶产品。如果盒子里的物品数量不正确,可以将其发送进行额外处理。
本指南将展示如何构建一个缺失物品检测系统,该系统可以部署在任何可以连接到计算机的摄像头上,而不需要专门的硬件来专门进行缺失物品检测。
将通过一个例子来说明如何确保包装中存在正确数量的瓶子。构建这样的系统,需要:
通过本指南的学习,将能够构建一个能够识别瓶子顶部并确保存在正确数量的系统。以下是系统在图像中识别所有瓶盖顶部的一个示例:
该系统设计在瓶盖存在检查之后运行。这是因为瓶盖存在检查通常从侧面进行,这允许识别出是否缺少瓶盖以及瓶盖是否正确地固定在瓶子上。
首先,创建一个Roboflow账户。然后,在Roboflow仪表板上点击“创建项目”。将被带到一个页面,在那里可以创建项目。
填写页面上的所有表单。当被要求选择项目类型时,选择“对象检测”。这是因为将训练一个对象检测模型来识别物品。
点击“创建项目”以创建项目。
创建项目后,将被要求上传图像。应该收集代表模型将被部署的环境的图像或视频。对于这个用例,将收集从顶部视角显示瓶子的图像。然后,将标记瓶盖顶部,以便可以计算瓶子的数量。
如果正在识别一个对象,建议从25-50张图像开始。一旦有了图像,可以通过将它们拖放到上传数据页面上来上传到Roboflow,该页面是在创建项目后带去的。
当图像被处理后,点击“保存并继续”。图像将被上传到Roboflow,用于标记和训练模型。
接下来,需要标记图像。这涉及到在感兴趣的对象周围绘制边界框。对于本指南,将标记瓶盖顶部。如果模型能够识别瓶盖顶部,可以在系统中添加一个检查,即如果识别出的瓶盖顶部数量不等于特定数量——例如12——那么一个包装应该被退回进行进一步处理。
可能能够根据想要识别的对象自动标记图像。要了解有关自动图像标记的更多信息,请参考Roboflow自动标记指南。
要开始标记图像,请点击左侧边栏中的“注释”。然后,选择一个图像开始标记。将被带到Roboflow注释工具,可以在其中标记图像。
将使用边界框工具来标记图像。要开始使用此工具,请按键盘上的“b”。然后,点击想要开始绘制框的位置。围绕想要标记的区域拖动。当标记了瓶盖时停止拖动光标。
重复此过程,为数据集中的所有图像进行标记。
标记完图像后,可以生成一个数据集。数据集是对标记图像的快照,可以在其中训练模型。可以对数据集应用预处理和增强步骤。预处理步骤为训练准备数据,而正确使用的增强步骤可以提高模型性能。
要生成数据集,请单击Roboflow边栏中的“生成”。对于第一个模型版本,建议将所有预处理和增强步骤保留为默认设置。这使能够使用标记的数据了解模型的工作方式。如果模型有问题,可以在不禁用增强的情况下回到数据,再次尝试,并最终发现数据质量是问题所在。
当在完善模型性能时,预处理和增强可以帮助。请参阅关于预处理和增强的最佳实践指南。
滚动到页面底部并点击“生成”以生成数据集。生成数据集所需的时间将取决于数据集中有多少图像以及应用了哪些预处理步骤和增强。
一旦数据集生成,可以训练一个模型。要开始训练作业,请在数据集页面上点击“使用Roboflow训练”。当被询问时,选择“快速”训练,并从Microsoft COCO检查点进行训练。使用预训练权重进行迁移学习有助于模型性能。
配置好训练作业后,模型训练将被分配到一个服务器。将看到一个估计,反映了认为模型训练作业将需要多长时间。
可以从数据集页面实时查看模型训练作业的性能。当训练过程完成后,将收到一封电子邮件。
一旦模型准备好,可以从左侧边栏可访问的“可视化”标签中测试它。要测试模型,可以使用页面上的选择器从测试集中选择一个图像。也可以将图像拖放到页面上以测试模型。
让测试模型:模型成功地计算了12个瓶盖。在下一步中,将构建一个在瓶盖数量不等于12时报告错误的检查。
可以使用Roboflow推理在自己的硬件上运行模型。推理针对高性能进行了优化,使能够在设备上充分利用模型。
有几个实用工具可以帮助快速部署模型。例如,推理具有在摄像头或RTSP流上运行模型的工具。实际上,可以使用任何可以连接到计算机的摄像头来运行模型。
首先,需要安装推理和监督。将使用监督来处理模型预测。要安装这些依赖项,请运行:
pip install inference supervision
然后,创建一个新的Python文件并添加以下代码:
from inference import get_roboflow_model
import supervision as sv
import cv2
image = cv2.imread("bottles.jpg")
model = get_roboflow_model(model_id="bottle-top-detection/1")
results = model.infer(image)
labels = [i.class_name for i in results[0].predictions]
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, labels=labels)
sv.plot_image(annotated_image)
print("Number of bottles detected: ", len(detections))
此代码在图像上运行推理。然后,计算图像中瓶盖的数量。可视化预测,然后将瓶盖数量输出到控制台。
以下是通过模型运行的图像上的预测:
脚本将以下内容打印到控制台:
Number of bottles detected: 12
系统成功识别了图像中存在的瓶子数量。可以将此模型连接到业务逻辑。例如,如果检测到的瓶子数量少于特定数量,可以拒绝盒子,以便它们可以按需进行补救。可以构建一个在缺失瓶子的发生率高于正常水平时发出警报的系统。
可以使用计算机视觉来识别食品和饮料产品中缺失的物品。在本指南中,展示了如何训练一个计算机视觉模型来识别瓶子。收集了图像数据,标记了感兴趣的对象(瓶盖),训练了模型,在Roboflow中测试了模型,然后使用Roboflow推理部署了模型。
编写了自定义逻辑来计算模型识别出的瓶子数量。如果识别出的瓶盖数量少于12个,系统会打印出错误,通知有缺失的产品。检测到瓶子数量错误的包装可以被退回进行进一步处理,以确保包装中有正确数量的瓶子。