矿车违规载人AI哨兵:YOLOv5矿区安全检测系统构建实战

发布时间:2026/7/15 4:48:11
矿车违规载人AI哨兵:YOLOv5矿区安全检测系统构建实战
矿车违规载人AI哨兵YOLOv5矿区安全检测系统构建实战矿用卡车违规载人是矿区重大安全隐患传统巡查难以全时段覆盖。本文基于3900张实地标注图像构建了一套可区分“有人/无人/异常”三类状态的矿车检测数据集并公开了从数据预处理、YOLOv5模型训练到边缘部署的完整PyTorch代码为矿区车辆安全监控提供高精度AI解决方案。 数据集核心指标与构成类别图片数量边界框数量说明有人员乘坐344404矿车上有人的载人状态正常情况33357739矿车按预期使用但无人乘坐异常情况272332设备故障或其他非标准操作状态总计39638475总图像数约3900张标注框超8400个数据集特点场景聚焦专为矿区矿车设计包含不同光照、角度下的实拍图像。三类精细标注支持区分“空车”、“合法载人”、“违规/异常载人”状态。格式兼容提供VOC和YOLO格式标注方便直接用于主流目标检测模型训练。️ 项目目录结构建议mine_cart_safety_detection/ ├── data/ # 数据集 │ ├── images/ │ │ ├── train/ (训练集图片) │ │ └── val/ (验证集图片) │ └── labels/ │ ├── train/ (训练集YOLO标注 .txt) │ └── val/ (验证集YOLO标注) ├── src/ │ ├── dataset.py # 自定义数据集加载类 │ ├── train.py # 训练脚本 │ ├── detect.py # 推理脚本 │ └── utils.py # 工具函数 (可视化等) ├── models/ │ └── mine_cart_detection.pth # 训练好的模型权重 ├── data.yaml # 数据集配置文件 (用于YOLOv5) └── requirements.txt # 项目依赖 核心代码实现与场景注释1. 自定义数据集加载类# 对应主题场景加载矿车图像与YOLO格式标签并进行预处理importosimportcv2importtorchfromtorch.utils.dataimportDatasetclassMineCartDataset(Dataset):矿车检测数据集支持训练集和验证集def__init__(self,root,splittrain,transformNone):self.rootroot self.splitsplit self.transformtransform# 图像与标签路径 (假设图片为.jpg, 标签为.txt)self.images_diros.path.join(root,images,split)self.labels_diros.path.join(root,labels,split)self.image_pathssorted([fforfinos.listdir(self.images_dir)iff.endswith(.jpg)])def__len__(self):returnlen(self.image_paths)def__getitem__(self,idx):img_nameself.image_paths[idx]img_pathos.path.join(self.images_dir,img_name)label_pathos.path.join(self.labels_dir,img_name.replace(.jpg,.txt))# 读取图像并转为RGBimagecv2.imread(img_path)imagecv2.cvtColor(image,cv2.COLOR_BGR2RGB)height,widthimage.shape[:2]# 解析YOLO格式标签: class_id x_center y_center width height (归一化)boxes[]withopen(label_path,r)asf:forlineinf.readlines():partsline.strip().split()iflen(parts)!5:continueclass_id,x_c,y_c,w,hmap(float,parts)# 转换为(xmin, ymin, xmax, ymax) 用于可视化或某些模型需求xminint((x_c-w/2)*width)yminint((y_c-h/2)*height)xmaxint((x_cw/2)*width)ymaxint((y_ch/2)*height)boxes.append([xmin,ymin,xmax,ymax,int(class_id)])# 返回格式(图像, 目标框列表)targettorch.tensor(boxes,dtypetorch.float32)# [N, 5]ifself.transform:image,targetself.transform(image,target)returnimage,target2. 数据增强与配置# 对应主题场景提升模型泛化能力模拟不同天气、光照下的矿场环境importalbumentationsasAfromalbumentations.pytorchimportToTensorV2defget_transform(trainTrue):定义训练/验证时的数据增强策略iftrain:returnA.Compose([A.HorizontalFlip(p0.5),# 水平翻转增强方向鲁棒性A.RandomBrightnessContrast(p0.2),# 调整亮度对比度模拟不同光照A.Resize(height640,width640),# YOLOv5标准输入尺寸A.Normalize(mean[0,0,0],std[1,1,1]),# 归一化 (可选)ToTensorV2()# 转为PyTorch张量])else:returnA.Compose([A.Resize(height640,width640),A.Normalize(mean[0,0,0],std[1,1,1]),ToTensorV2()])3. YOLOv5模型训练入口# 对应主题场景集成YOLOv5框架加载预训练权重进行迁移学习importtorchfromyolov5.models.commonimportDetectMultiBackendfromyolov5.utils.generalimportnon_max_suppressionfromyolov5.utils.torch_utilsimportselect_devicefromtorch.utils.dataimportDataLoaderimportyamldeftrain_yolov5(data_yaml_path,weights_pathyolov5s.pt,epochs50,batch_size8):使用YOLOv5官方train.py进行训练 (推荐通过命令行)# 实际项目中更推荐直接调用YOLOv5的train.py:# !python yolov5/train.py --img 640 --batch {batch_size} --epochs {epochs} \# --data {data_yaml_path} --weights {weights_path} --project mine_cart_exp# 以下展示核心训练循环示意 (简化版)deviceselect_device(0iftorch.cuda.is_available()elsecpu)modelDetectMultiBackend(weights_path,devicedevice)model.nc3# 类别数: 有人员、正常、异常model.class_names[with_people,normal,abnormal]model.to(device)# 数据加载 (使用自定义Dataset)train_datasetMineCartDataset(data,splittrain,transformget_transform(trainTrue))val_datasetMineCartDataset(data,splitval,transformget_transform(trainFalse))train_loaderDataLoader(train_dataset,batch_sizebatch_size,shuffleTrue,num_workers4)val_loaderDataLoader(val_dataset,batch_sizebatch_size,shuffleFalse,num_workers4)optimizertorch.optim.SGD(model.parameters(),lr0.01,momentum0.937,weight_decay0.0005)# ... 完整训练循环 (前向传播、损失计算、反向传播、评估)# 此处省略具体迭代细节可参照YOLOv5官方源码returnmodel4. 推理与可视化脚本# 对应主题场景加载训练好的模型对新矿车图像进行实时检测importcv2importtorchimportnumpyasnpfromyolov5.utils.generalimportnon_max_suppression,scale_coordsdefload_model(model_path,devicecpu):加载训练好的PyTorch模型权重modeltorch.load(model_path,map_locationdevice)model.eval()returnmodeldefdetect_people_in_cart(image_path,model,conf_thres0.5,iou_thres0.45):检测矿车中的人员返回标注后的图像和检测结果# 读取并预处理图像img0cv2.imread(image_path)# BGRimgcv2.cvtColor(img0,cv2.COLOR_BGR2RGB)imgcv2.resize(img,(640,640))img_tensortorch.from_numpy(img).permute(2,0,1).float().div(255.0).unsqueeze(0)# 推理withtorch.no_grad():predmodel(img_tensor)# NMS处理detectionsnon_max_suppression(pred,conf_thres,iou_thres)[0]# 可视化结果ifdetectionsisnotNoneandlen(detections):detections[:,:4]scale_coords(img_tensor.shape[2:],detections[:,:4],img0.shape).round()for*xyxy,conf,clsinreversed(detections):labelf{model.class_names[int(cls)]}{conf:.2f}plot_one_box(xyxy,img0,labellabel,color[0,255,0],line_thickness2)returnimg0defplot_one_box(xyxy,img,color,label,line_thickness2):在图像上绘制边界框和标签 (cv2)c1,c2(int(xyxy[0]),int(xyxy[1])),(int(xyxy[2]),int(xyxy[3]))cv2.rectangle(img,c1,c2,color,thicknessline_thickness,lineTypecv2.LINE_AA)iflabel:tfmax(line_thickness-1,1)t_sizecv2.getTextSize(label,0,fontScaleline_thickness/3,thicknesstf)[0]c2c1[0]t_size[0],c1[1]-t_size[1]-3cv2.rectangle(img,c1,c2,color,-1,cv2.LINE_AA)cv2.putText(img,label,(c1[0],c1[1]-2),0,line_thickness/3,[225,255,255],thicknesstf,lineTypecv2.LINE_AA) 模型训练与部署流程1. 环境准备# 创建虚拟环境并安装依赖conda create-nmine_detpython3.8conda activate mine_det pipinstalltorch torchvision opencv-python numpygitclone https://github.com/ultralytics/yolov5cdyolov5pipinstall-rrequirements.txt2. 准备数据配置文件data.yamltrain:./data/images/trainval:./data/images/valnc:3# 类别数names:[with_people,normal,abnormal]# 类别名称3. 启动训练python yolov5/train.py--img640--batch16--epochs100\--datadata.yaml\--weightsyolov5s.pt\--projectmine_cart_results\--cache4. 模型评估python yolov5/val.py--datadata.yaml\--weightsmine_cart_results/exp/weights/best.pt\--tasktest5. 边缘端部署优化 (可选)将PyTorch模型导出为ONNX或TensorRT格式以在NVIDIA Jetson或树莓派等边缘设备上实现低延迟推理。python yolov5/export.py--weightsmine_cart_results/exp/weights/best.pt--includeonnx engine 项目价值与扩展方向核心创新点场景专用数据集构建了首个公开的矿区矿车载人状态检测数据集填补细分领域空白。三类状态识别不仅检测有无人员更能区分“正常无人”与“异常状态”减少误报。全流程代码开源提供从数据加载、训练到推理的PyTorch/YOLOv5完整代码具备高复用性。应用场景矿区安全监控自动识别矿车违规载人实时触发告警。智慧矿山管理统计矿车利用率分析人员运输规范度。设备状态监测结合“异常情况”标注辅助判断设备故障。可扩展方向多目标追踪结合DeepSORT等算法追踪特定人员及矿车轨迹。语音告警联动检测到违规载人时自动通过广播系统发出语音警告。大数据分析统计各时段、各区域违规载人频率辅助安全决策。️ 技术标签#智慧矿区#矿车安全#违规载人检测#YOLOv5#目标检测#PyTorch#工业安全#深度学习#计算机视觉#AI巡检