提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
一、工具界面展示
二、代码展示
1.模型加载
2.图片分割预测
3.掩码叠加显示
三、工具运行步骤
1.安装环境依赖
2.准备模型和数据
3.启动工具
四、总结
前言
在钢材制造行业,表面缺陷检测是一项极为重要的任务。为了提升检测效率,我开发了一款基于Python的图形用户界面(GUI)工具,能够实现对钢材表面缺陷的语义分割和可视化。
本工具支持以下特性:
单张图片检测:用户可以选择一张图片,查看其缺陷分割结果。批量图片检测:可处理文件夹中的多张图片,并选择是否保存检测结果。分割可视化:支持对缺陷区域进行分类显示,类别不同,颜色标注不同。检测结果描述:将检测到的缺陷类型显示在文本区域,帮助用户快速了解检测内容。
一、工具界面展示
工具界面设计如下:
左侧区域:包括单张图片检测和批量检测的操作按钮以及文本框用于展示检测到的缺陷类型。右侧区域:图片展示区域,分为原图和分割结果的可视化。
单步检测工具界面截图效果如下:
原图和分割结果叠加显示。文本区域展示缺陷类别描述。
连续检测工具界面截屏效果如下:
原图和分割结果叠加显示。文本区域展示各个图片的缺陷类别描述。
二、代码展示
以下是实现钢材表面缺陷语义分割工具的代码:
1.模型加载
为了实现语义分割,我们首先需要加载预训练好的模型::
def load_model(model_path, device):
"""加载预训练模型"""
net = self_net() # 替换为自定义的分割模型
state_dict = torch.load(model_path, map_location=device)
net.load_state_dict(state_dict)
net.to(device=device)
return net
2.图片分割预测
分割图片的核心是将输入图片通过模型处理后生成语义掩码,并通过颜色叠加展示缺陷区域:
def predict_img(net, full_img, device, out_threshold=0.5):
"""对输入图片进行预测"""
net.eval()
img = torch.from_numpy(BasicDataset.preprocess(None, full_img, is_mask=False))
img = img.unsqueeze(0).to(device=device, dtype=torch.float32)
with torch.no_grad():
output = net(img).cpu()
mask = output.argmax(dim=1) # 多分类任务
return mask[0].long().squeeze().numpy()
3.掩码叠加显示
将分割掩码与原图叠加展示,便于用户直观地查看分割结果:
def mask_to_overlay(image, mask):
"""将分割掩码映射到原图"""
overlay = np.array(image).copy()
for cls, color in class_to_color.items():
if cls == 0: # 跳过背景
continue
overlay[mask == cls] = np.array(color, dtype=np.uint8)
return Image.fromarray(overlay)
三、工具运行步骤
1.安装环境依赖
请确保安装以下Python依赖库:
torch:用于深度学习模型tkinter:用于GUI界面Pillow:用于图片处理numpy:用于数组操作
2.准备模型和数据
模型路径:将训练好的模型权重文件放置到指定路径,例如:
DEFAULT_MODEL_PATH = r"C:\Users\compelling\Desktop\model.pth"
输入图片:支持.png、.jpg、.jpeg格式的图片。
3.启动工具
直接运行脚本,打开GUI界面后即可开始图片检测。
python predict_gui.py
四、总结
通过本工具,您可以快速完成钢材表面缺陷的语义分割,生成直观的分割结果并对缺陷类型进行分类描述。希望这篇文章能为您的研究和实际应用提供帮助。如果您对工具的实现或优化有任何问题,欢迎在评论区讨论!
友情链接:
©Copyright © 2022 2006年世界杯歌曲_冰岛世界杯排名 - guoyunzhan.com All Rights Reserved.