在质量保证流程中,确保产品或产品区域包含特定颜色至关重要。例如,纺织品制造商可以在产品包装、运输和分销前使用颜色检测来确保产品质量。此外,还有其他应用场景。想象一下,正在为服装零售商构建一个搜索引擎,并希望提供按颜色搜索的选项。与其手动为每张图片标记颜色,不如使用计算机视觉自动识别相关颜色。
如何使用计算机视觉分析产品颜色
在本指南中,将讨论如何使用计算机视觉分析产品颜色。将通过一个示例,即拍摄T恤的图片并识别T恤的颜色。要分析图像中的产品颜色,将:
- 使用分割模型确定想要检查颜色的对象的精确位置;
- 使用聚类识别图像中最普遍的颜色。
将通过代码示例来展示这一过程,该代码可以应用于任何对象。如果还没有分割模型,请参考指南,了解如何训练YOLOv8实例分割模型。
步骤1:获取对象的分割掩码
在能够识别产品的颜色之前,需要知道产品在要分析的图像或视频流中的位置。要找到产品的位置,可以使用分割模型。分割模型能够精确识别图像或视频中对象的位置。没有分割,背景颜色(包括灰色和白色)将干扰精确识别图像中颜色的能力。
在本指南中,将使用由Roboflow团队开发的Fashion Assistant模型。该模型能够精确识别服装项目,如T恤。此模型可在Roboflow Universe上使用,这是一个社区,人们在此共享了超过50,000个预训练模型供测试。
以下是将在本指南中使用的图像:
# 请将 "API_KEY" 替换为 Roboflow API 密钥
pip install numpy supervision Pillow roboflow scikit-learn
import numpy as np
import supervision as sv
from PIL import Image
from roboflow import Roboflow
from sklearn.cluster import KMeans
rf = Roboflow(api_key="API_KEY")
project = rf.workspace().project("fashion-assistant-segmentation")
model = project.version(5).model
classes = "baseball cap, hoodie, jacket, pants, shirt, shorts, sneaker, sunglasses, sweatshirt, t-shirt"
inference_results = model.predict("example.jpg").json()
results = sv.Detections.from_inference(inference_results)
在上述代码中,导入了所需的依赖项,通过Roboflow API创建了一个“model”对象,用于运行推理,并在名为“example.jpg”的图像上运行推理。将预测结果加载到一个名为“results”的变量中。
要可视化预测结果,可以使用以下代码:
image = Image.open("example.jpg")
image = np.array(image)
mask_annotator = sv.MaskAnnotator(color=sv.Color(0, 0, 255))
result = mask_annotator.annotate(image, results)
sv.plot_image(result)
在这段代码中,创建了一个MaskAnnotator对象,用于可视化分割掩码。将预测结果设置为蓝色(RGB中的“0, 0, 255”)。
让运行代码并看看会发生什么:
代码对T恤的照片进行了推理,然后用不透明的蓝色突出显示了T恤。蓝色是在上一步创建MaskAnnotator时指定的颜色。
现在已经能够识别对象的位置,可以找到它们的颜色。
步骤2:使用聚类识别最常见的颜色
要识别对象上最常见的颜色,可以使用聚类。在本指南中,将使用k-means聚类,并借助scikit-learn Python包的帮助。请将以下代码添加到正在工作的Python文件的末尾:
image[results.mask[0][0]] = 0
pixels = image.reshape((-1, 3))
clt = KMeans(n_clusters=1)
clt.fit(pixels)
centers = clt.cluster_centers_
rgb = [[int(i) for i in center] for center in centers]
print(rgb)
此代码将采用在上一步配置的分割模型返回的第一个掩码,并移除所有不在掩码中的像素。然后使用单个聚类运行k-means聚类。这将允许识别分割区域(在这个例子中,T恤)中的主要颜色。如果想识别多种颜色,请增加n_clusters变量的值。最后,检索聚类中心并打印值到控制台。
让运行代码!
加载Roboflow工作区... 加载Roboflow项目... 默认的 `n_init` 值将从10更改为'auto',在1.4版本中。显式设置 `n_init` 的值以抑制警告 [[161, 112, 125]]
前三行是函数的消息。可以忽略这些。
代码打印出三个浮点值。小数点前的整数可以用作RGB值。在Google中可视化这些RGB点时,它们显示的颜色类似于图像中的酒红色。请注意,这种分析不会完全准确。
在本指南中,展示了如何分析产品颜色以用于质量保证流程。使用Roboflow运行了一个分割模型。这个模型识别了产品的位置。在本指南中,正在处理的产品是一件T恤。然后,使用k-means聚类来识别图像中最突出的颜色。