在零售行业中,确保货架上的产品摆放正确是至关重要的。通过图像识别技术,可以自动化这一过程,提高效率并减少错误。本文将介绍如何使用Roboflow产品识别API来检测零售货架上的产品位置,并讨论如何将此系统用于验证产品是否正确放置。
Roboflow产品识别API能够返回货架上产品的坐标。这个API可以检测两类对象:产品和空位。这样,就可以使用API来检测产品的存在和缺失。
要使用Roboflow产品识别API,需要一个免费的Roboflow账户。这个账户将允许获取一个API密钥,用于访问API。创建账户后,就可以开始运行产品识别API了。
本指南将展示如何在自己的硬件上部署模型。首先,需要安装Roboflow Inference,这是一个用于运行计算机视觉模型的系统。安装Inference,运行以下命令:
pip install inference inference-sdk
接下来,需要设置API密钥。参考Roboflow文档了解如何获取API密钥。一旦有了API密钥,将其设置在一个名为ROBOFLOW_API_KEY的环境变量中:
export ROBOFLOW_API_KEY=""
设置好API密钥后,就可以运行产品识别API了。创建一个新的Python文件,并添加以下代码:
from inference import get_roboflow_model
import supervision as sv
import cv2
# 定义用于推理的图像URL
image_file = "image.jpeg"
image = cv2.imread(image_file)
# 加载预训练的yolov8n模型
model = get_roboflow_model(model_id="/empty-spaces-in-a-supermarket-hanger-1upsp/16")
# 在选择的图像上运行推理,图像可以是URL、NumPy数组、PIL图像等。
results = model.infer(image)
detections = sv.Detections.from_roboflow(results[0].dict(by_alias=True, exclude_none=True))
# 创建监督注释器
bounding_box_annotator = sv.BoundingBoxAnnotator()
# 使用推理结果注释图像
annotated_image = bounding_box_annotator.annotate(
scene=image, detections=detections)
#label_annotator = sv.LabelAnnotator()
#annotated_image = label_annotator.annotate(
# scene=annotated_image, detections=detections)
# 显示图像
sv.plot_image(annotated_image)
在上述代码中,使用Inference SDK向产品识别API发送请求。然后,将结果绘制在图像上。在代码中,将“image.jpg”替换为想要通过产品识别API运行的图像的名称。然后,运行代码。
模型成功识别了货架上的产品和空位。蓝色框表示产品的存在,黄色框表示空货架位置。
有了识别产品的位置的系统后,可以开始构建更复杂的逻辑。例如,可以构建一个自动化系统,将识别出的产品与商店某个部分的布局图进行比较。这将允许验证产品是否根据与供应商达成的协议正确地放置在货架上。
要构建这个自动化系统,可以使用上述API来识别产品的位置。需要一张足够高清晰度的货架图像,比上面的图像更近。然后,可以运行一个零样本分类模型,根据拥有的每个产品的参考图像来验证产品。
这将如下工作:创建一个与布局图配对的参考图像数据库。拍摄一张货架的照片。将货架与该货架的布局图匹配。将货架上识别出的每个产品与布局图中的参考图像进行比较。如果货架上的产品与参考图像足够不相似,系统可以要求人工检查货架。
CLIP是用于零样本分类的有效模型。CLIP能够接收两张图像并测量它们的语义相似性。CLIP在测量相似性时还能从图像中的文本推断信息,给模型更多的能力来确定两个项目之间的相似性。
要了解如何使用CLIP来测量两张图像之间的相似性,请参考Roboflow CLIP相似性指南。
Roboflow产品识别API允许识别零售货架上产品的位置,或产品缺失的位置。可以使用这个API来确保货架完全库存。可以将产品识别API的检测能力与CLIP等零样本分类模型结合起来,验证产品是否与货架的布局图正确放置。