智慧电力设备-电力巡线安全帽数据集,共约3437张张,标注格式为xml,本人用ylov5跑过,训练完检测效果可商用,电力安全帽检测数据集
智慧电力设备-电力巡线安全帽数据集,共约3437张张,标注格式为xml,本人用ylov5跑过,训练完检测效果可商用,
1
1
电力巡线安全帽检测项目(3437张|XML标注|完整流程代码)
一、数据集信息表格
| 项目 | 详细内容 |
|---|---|
| 数据集名称 | 电力巡线安全帽检测数据集 |
| 数据总量 | 3437张 |
| 应用场景 | 电力巡检、工地安全、智能监控 |
| 标注格式 | XML (VOC格式) |
| 任务类型 | 目标检测 |
| 检测类别 | 佩戴安全帽、未佩戴安全帽 |
| 适配框架 | YOLOv8 / YOLOv5 |
二、环境准备
conda create-nhatpython=3.9conda activate hat pipinstalltorch==1.9.0torchvision==0.10.0 pipinstallultralytics opencv-python pillow三、数据集准备(标准YOLO目录)
datasets/ ├── Annotations/ # XML标注文件 ├── JPEGImages/ # 原始图片 ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/四、XML → YOLO TXT 格式转换代码
importosimportxml.etree.ElementTreeasETimportcv2# 类别必须与训练一致classes=["hat","person"]# 安全帽、未戴安全帽defxml2yolo(xml_path,img_w,img_h):tree=ET.parse(xml_path)root=tree.getroot()label=[]forobjinroot.iter("object"):cls=obj.find("name").textifclsnotinclasses:continuecls_id=classes.index(cls)xmlbox=obj.find("bndbox")x1=float(xmlbox.find("xmin").text)y1=float(xmlbox.find("ymin").text)x2=float(xmlbox.find("xmax").text)y2=float(xmlbox.find("ymax").text)cx=(x1+x2)/2.0/img_w cy=(y1+y2)/2.0/img_h w=(x2-x1)/img_w h=(y2-y1)/img_h label.append(f"{cls_id}{cx:.6f}{cy:.6f}{w:.6f}{h:.6f}")returnlabelif__name__=="__main__":xml_dir="./datasets/Annotations"img_dir="./datasets/JPEGImages"save_dir="./datasets/labels/train"os.makedirs(save_dir,exist_ok=True)forxmlinos.listdir(xml_dir):ifxml.endswith(".xml"):img=cv2.imread(os.path.join(img_dir,xml[:-4]+".jpg"))h,w=img.shape[:2]label=xml2yolo(os.path.join(xml_dir,xml),w,h)withopen(os.path.join(save_dir,xml[:-4]+".txt"),"w")asf:f.write("\n".join(label))print("✅ XML转YOLO完成!")五、数据集配置文件hat.yaml
train:./datasets/images/trainval:./datasets/images/valnc:2names:0:hat1:person六、模型训练代码train.py
fromultralyticsimportYOLO model=YOLO("yolov8s.pt")model.train(data="hat.yaml",epochs=100,batch=16,imgsz=640,patience=10,device=0,project="hat_result",name="hat_detect")七、推理测试代码detect.py
fromultralyticsimportYOLOimportcv2 model=YOLO("hat_result/hat_detect/weights/best.pt")img=cv2.imread("test.jpg")results=model(img)cv2.imwrite("result.jpg",results[0].plot())print("✅ 检测完成!")八、模型评估代码val.py
fromultralyticsimportYOLO model=YOLO("hat_result/hat_detect/weights/best.pt")metrics=model.val(data="hat.yaml",imgsz=640)print(f"mAP@0.5:{metrics.box.map50:.4f}")print(f"精确率:{metrics.box.precision.mean():.4f}")print(f"召回率:{metrics.box.recall.mean():.4f}")