YOLOv5工件检测五类工件(螺丝,螺母,六角扳手,铜柱,尼龙柱)有数据集,已打好标签,已训练好,准确度高,可用于机器人抓取物品操作
YOLOv5工件检测系统
项目概述
本项目是一个基于YOLOv5的工件检测系统,专门用于识别五类常见的工业工件:螺丝、螺母、六角扳手、铜柱和尼龙柱。该系统已经使用高质量的数据集进行训练,并达到了较高的准确度。训练好的模型可以应用于机器人抓取物品操作,提高自动化生产线的效率和精度。
项目特点
- 高准确性:经过充分训练的YOLOv5模型,具有较高的检测准确度。
- 实时性:YOLOv5以其高效的速度著称,适用于实时检测任务。
- 多类别检测:能够同时检测五类不同的工件。
- 易于部署:提供预训练模型和详细的部署指南,方便快速应用。
- 适用于机器人抓取:检测结果可以直接用于指导机器人进行精确抓取操作。
数据集介绍
数据集结构
Artifact_Detection_Dataset/
├── images/ # 图像文件夹
│ ├── train/ # 训练集图像
│ ├── val/ # 验证集图像
│ └── test/ # 测试集图像
├── labels/ # 标注文件夹
│ ├── train/ # 训练集标注
│ ├── val/ # 验证集标注
│ └── test/ # 测试集标注
├── README.md # 项目说明文档
└── data.yaml # 数据集配置文件
数据集内容
- 总数据量:具体数量根据实际情况而定,通常包括数千张图像。
- 标注格式:YOLO格式(txt文件)。
- 标注对象:五类工件的位置。
- 类别及数量:
类别名 | 示例图像数量 |
---|---|
螺丝 (Screw) | 具体数量 |
螺母 (Nut) | 具体数量 |
六角扳手 (Hex Wrench) | 具体数量 |
铜柱 (Copper Column) | 具体数量 |
尼龙柱 (Nylon Column) | 具体数量 |
数据集特点
- 高质量标注:每张图像都进行了详细的标注,确保边界框准确无误。
- 多样化场景:包含不同光照条件、背景和角度下的工件图像,增强模型的泛化能力。
- 均衡分布:各类别的样本数量相对均衡,避免了类别不平衡问题。
项目功能
-
读取图像:
- 从指定目录读取图像,并显示图像。
-
模型推理:
- 使用预训练的YOLOv5模型对图像进行推理,检测出五类工件的位置和类别。
-
结果显示:
- 在图像上绘制检测到的边界框,并显示类别标签和置信度分数。
-
性能评估:
- 计算并显示mAP(平均精度均值)、召回率、精确率等指标,评估模型性能。
-
机器人抓取接口:
- 提供API接口,将检测结果传递给机器人控制系统,指导机器人进行抓取操作。
使用说明
-
环境准备:
-
确保安装了Python及其相关库(如
torch
、opencv-python
、matplotlib
等)。 -
下载并解压数据集和项目文件到本地目录。
-
安装YOLOv5所需的依赖项:
git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt
-
-
加载预训练模型:
-
将预训练的YOLOv5模型下载到项目目录中。
-
示例代码如下:
import torch from pathlib import Path from yolov5.models.experimental import attempt_load from yolov5.utils.general import non_max_suppression, scale_coords from yolov5.utils.torch_utils import select_device from yolov5.utils.datasets import letterbox import cv2 import numpy as np # 加载预训练模型 model = attempt_load('path/to/best.pt', map_location=torch.device('cpu')) # 或 'cuda:0' model.eval() # 选择设备 device = select_device('') half = device.type != 'cpu' # 半精度推理仅支持CUDA if half: model.half()
-
-
图像处理与推理:
-
读取图像并进行预处理。
-
使用模型进行推理。
-
示例代码如下:
def detect(image_path): img = cv2.imread(image_path) img_size = 640 img0 = img.copy() img = letterbox(img, new_shape=img_size)[0] img = img[:, :, ::-1].transpose(2, 0, 1) # BGR to RGB, to 3x416x416 img = np.ascontiguousarray(img) img = torch.from_numpy(img).to(device) img = img.half() if half else img.float() # uint8 to fp16/32 img /= 255.0 # 0 - 255 to 0.0 - 1.0 if img.ndimension() == 3: img = img.unsqueeze(0) # 推理 with torch.no_grad(): pred = model(img, augment=False)[0] # NMS pred = non_max_suppression(pred, 0.4, 0.5, classes=None, agnostic=False) for i, det in enumerate(pred): # 每个图像的检测结果 if det is not None and len(det): det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img0.shape).round() for *xyxy, conf, cls in reversed(det): label = f'{model.names[int(cls)]} {conf:.2f}' plot_one_box(xyxy, img0, label=label, color=(0, 255, 0), line_thickness=3) return img0 # 显示检测结果 result_img = detect('path/to/image.jpg') cv2.imshow('Detection Result', result_img) cv2.waitKey(0) cv2.destroyAllWindows()
-
-
性能评估:
-
使用测试集进行性能评估,计算mAP、召回率、精确率等指标。
-
可以使用YOLOv5自带的评估脚本:
python val.py --data data.yaml --weights best.pt --img 640
-
-
机器人抓取接口:
-
提供API接口,将检测结果传递给机器人控制系统。
-
-
示例代码如下:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/detect', methods=['POST']) def detect_api(): file = request.files['image'] file.save('temp.jpg') result_img = detect('temp.jpg') # 进一步处理结果,例如提取边界框坐标 # 返回检测结果 return jsonify({'result': 'success'}) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
-
注意事项
- 数据格式:确保图像文件和标注文件的命名一致,以便正确匹配。
- 硬件要求:建议使用GPU进行推理,以加快处理速度。如果没有足够的计算资源,可以考虑使用云服务提供商的GPU实例。
- 超参数调整:根据实际情况调整网络架构、学习率、批次大小等超参数,以获得更好的性能。
应用场景
- 自动化生产线:在自动化生产线上,通过检测工件的位置和类型,指导机器人进行精确抓取和组装。
- 质量控制:在质量控制过程中,自动检测工件是否存在缺陷或异常。
- 库存管理:在仓库管理系统中,自动识别和分类存储的工件,提高管理效率。
希望这个项目能帮助你更好地理解和应用YOLOv5在工业工件检测中的应用。