在植物病害检测领域,及时准确地识别出病害植株对于农业生产至关重要。本文将探讨如何利用计算机视觉技术,特别是图像分割掩模技术,来提高病害检测的效率和准确性。将通过Roboflow平台来实现这一过程,并详细说明如何将分割掩模集成到工作流程中。
图像分割掩模是一种从图像中隔离出特定部分的技术。通过使用分割掩模,可以复制图像中被计算机视觉模型标记的确切区域。例如,分割掩模可以用来隔离植物上的病叶。
在图像中,如何检测对象(如人、狗、苹果等),并利用这些检测结果?将在图像中识别对象的行为定义为检测。一旦检测到对象并知道其在图像中的位置,就可以将其从图像的其余部分中裁剪出来。这个过程称为创建掩模。
分割掩模在许多场景中都非常有用,例如:
在所有这些情况下,能够隔离图像中的特定项目都是非常有用的。
在本节中,将构建一个模型,该模型能够识别植物上的感染叶片,并根据叶片上病斑的形状对病斑类型进行分类。这是一个现实世界中的问题,可以应用于农场、研究实验室和农业加工设施中,以识别疾病迹象并防止病害作物与健康作物混在一起。
可以使用任何RoboflowUniverse上的分割模型来执行实例分割。如果想了解更多关于如何创建自己的模型的信息,请查看关于创建自定义实例分割模型的指南。但是,对于本教程,将使用一个现有的托管在Universe上的数据集。让开始尝试预训练模型,该模型可以检测植物上的病斑。
# 假设已经有了一个预训练的模型和API密钥
# 将使用Roboflow的API来获取模型的预测结果
import requests
from PIL import Image
def get_prediction(image_path, api_key, model, version):
files = {'image': open(image_path, 'rb')}
params = {'model': model, 'version': version}
headers = {'Authorization': f'Bearer {api_key}'}
response = requests.post('https://api.roboflow.com/predict', files=files, params=params, headers=headers)
return response.json()
使用远程端点时,推理结果将返回一个JSON对象,如下所示:
{
"predictions": [
{
"x": 282.5,
"y": 376.7,
"width": 61,
"height": 58,
"class": "Scab",
"confidence": 0.706,
"points": [
{
"x": 288,
"y": 399
},
{
"x": 270,
"y": 397
},
{
"x": 256,
"y": 387
},
{
"x": 251,
"y": 381
},
...
],
},
...
]
}
这个JSON对象包含了图像中“Scab”的正确认位置的坐标。使用这些坐标,可以裁剪出(创建掩模)病叶。
现在既有Roboflow推理API显示图像上病斑位置的结果,也有显示每个识别出的病斑坐标的元组列表。对于推理结果中的每个预测,希望:
# 使用Python3 Pillow包处理检测
from PIL import Image, ImageDraw
def create_mask(image_path, polygon_points):
image = Image.open(image_path)
draw = ImageDraw.Draw(image)
draw.polygon(polygon_points, fill=(255, 255, 255, 0)) # 创建透明掩模
image.save(f"mask_{index}.png")
在本教程中,讨论了分割掩模以及它们如何使能够裁剪出分割模型返回的正确认位置。使用分割掩模中的内容,可以在图像的特定区域运行额外的模型。这在想要使用一个精细调整的图像分类器时特别有用,如果背景中有很多对象,它可能不会表现得那么好。