首页 > 其他分享 >如何使用Yolov8训练使用——智慧煤矿检测井下作业 矿工煤矿工作人员检测 液压支撑防护板检测 大煤块检测 矿工不安全行为检测13万张真实拍摄影像,实现可视化及评估,训练及推理

如何使用Yolov8训练使用——智慧煤矿检测井下作业 矿工煤矿工作人员检测 液压支撑防护板检测 大煤块检测 矿工不安全行为检测13万张真实拍摄影像,实现可视化及评估,训练及推理

时间:2024-12-21 09:58:57浏览次数:5  
标签:conf img 检测 frame mine 煤矿 image 矿工 model

在这里插入图片描述
煤矿井下开采异常检测数据集,用于目标检测
智慧矿井智能分析应用数据集在这里插入图片描述

包含6类目标:
1.煤矿工作人员检测
2.液压支撑防护板检测(液压支撑防护板所有角度如防护板0到30度,30度到60…等多角度检测,防护板异常等)
3.大煤块检测(输送带上的异物,锚杆,煤矸石等类别)
4.采煤机拖揽检测
5.矿工不安全行为检测(行走,站立,坐下,操作,弯腰,依靠,摔倒,爬行)[左]
6.安全帽佩戴检测
数据集共有 在这里插入图片描述

yolo和coco两种标注格式在
完整的项目代码和详细配置说明,用于基于YOLOv8训练煤矿井下开采异常检测数据集。该系统支持Yolo和COCO两种标注格式,并附带数据集处理、评估、可视化推理及训练代码。

完整项目代码

在这里插入图片描述

1. 数据集准备与转换

首先,我们需要将数据集从COCO格式转换为YOLO格式(如果数据集已经是YOLO格式,则跳过此步骤)。

import json
import os
from pathlib import Path

def convert_coco_to_yolo(coco_json_path, output_dir):
    with open(coco_json_path, 'r') as f:
        coco_data = json.load(f)

    categories = {cat['id']: cat['name'] for cat in coco_data['categories']}
    images = {img['id']: img for img in coco_data['images']}
    annotations = {ann['image_id']: [] for ann in coco_data['annotations']}
    
    for ann in coco_data['annotations']:
        annotations[ann['image_id']].append(ann)
    
    for img_id, img_info in images.items():
        img_name = img_info['file_name']
        img_height = img_info['height']
        img_width = img_info['width']
        
        txt_file_path = os.path.join(output_dir, Path(img_name).stem + '.txt')
        with open(txt_file_path, 'w') as txt_file:
            for ann in annotations.get(img_id, []):
                bbox = ann['bbox']
                x_center = (bbox[0] + bbox[2] / 2) / img_width
                y_center = (bbox[1] + bbox[3] / 2) / img_height
                width = bbox[2] / img_width
                height = bbox[3] / img_height
                
                category_id = ann['category_id']
                class_id = list(categories.keys()).index(category_id)
                
                txt_file.write(f"{class_id} {x_center} {y_center} {width} {height}\n")

# 使用示例
convert_coco_to_yolo('datasets/mine_dataset/coco/annotations/train.json', 'datasets/mine_dataset/yolo/train')
convert_coco_to_yolo('datasets/mine_dataset/coco/annotations/val.json', 'datasets/mine_dataset/yolo/val')
2. 训练脚本

接下来是使用YOLOv8进行训练的脚本。

import torch
from ultralytics import YOLO

# 设置随机种子以保证可重复性
torch.manual_seed(42)

# 定义数据集路径
dataset_config = 'data.yaml'

# 加载预训练的YOLOv8n模型
model = YOLO('yolov8n.pt')

# 训练模型
results = model.train(
    data=dataset_config,
    epochs=100,
    imgsz=640,
    batch=16,
    name='mine_anomaly_detection',
    project='runs/train'
)

# 评估模型
metrics = model.val()

# 保存最佳模型权重
best_model_weights = 'runs/train/mine_anomaly_detection/weights/best.pt'
print(f"Best model weights saved to {best_model_weights}")
3. 数据集配置文件 (data.yaml)

创建一个 data.yaml 文件来配置数据集路径和类别信息。

4. 推理脚本

以下是一个简单的Streamlit应用,用于实时推理和显示结果。

import streamlit as st
from ultralytics import YOLO
import cv2
import numpy as np
from PIL import Image
import tempfile

# 加载模型
@st.cache_resource
def load_model(weights_path):
    model = YOLO(weights_path)
    return model

# 图片检测函数
def detect_image(model, image, conf_threshold):
    results = model.predict(image, conf=conf_threshold)[0]
    annotated_frame = annotate_image(image, results, model)
    return annotated_frame

# 视频检测函数
def detect_video(model, video_path, conf_threshold):
    cap = cv2.VideoCapture(video_path)
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        results = model.predict(frame, conf=conf_threshold)[0]
        annotated_frame = annotate_image(frame, results, model)
        yield annotated_frame
    cap.release()

# 摄像头检测函数
def detect_camera(model, conf_threshold):
    cap = cv2.VideoCapture(0)
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        results = model.predict(frame, conf=conf_threshold)[0]
        annotated_frame = annotate_image(frame, results, model)
        yield annotated_frame
    cap.release()

# 标注图像函数
def annotate_image(image, results, model):
    for result in results.boxes.cpu().numpy():
        r = result.xyxy[0].astype(int)
        cls = int(result.cls[0])
        conf = result.conf[0]
        
        label = f"{model.names[cls]} {conf:.2f}"
        color = (0, 255, 0)
        cv2.rectangle(image, (r[0], r[1]), (r[2], r[3]), color, 2)
        cv2.putText(image, label, (r[0], r[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2)
    return image

# Streamlit 主界面
def main():
    st.title("Mine Anomaly Detection System")
    
    # 动态加载模型
    weights_options = ['best_mine_anomaly_yolov8.pt']  # 添加更多权重文件路径
    selected_weights = st.sidebar.selectbox("Select Model Weights", weights_options)
    model = load_model(selected_weights)
    
    # 动态调整置信度阈值
    conf_threshold = st.sidebar.slider("Confidence Threshold", min_value=0.0, max_value=1.0, value=0.5, step=0.01)
    
    # 输入方式选择
    input_type = st.sidebar.radio("Input Type", ["Image", "Video", "Camera"])
    
    if input_type == "Image":
        uploaded_file = st.file_uploader("Upload an image...", type=["jpg", "jpeg", "png"])
        if uploaded_file is not None:
            image = Image.open(uploaded_file)
            image_np = np.array(image)
            annotated_image = detect_image(model, image_np, conf_threshold)
            st.image(annotated_image, channels="BGR", caption="Detected Image")
            
            # 统计检测到的物体数量
            results = model.predict(image_np, conf=conf_threshold)[0]
            class_counts = {}
            for result in results.boxes.cpu().numpy():
                cls = int(result.cls[0])
                class_name = model.names[cls]
                if class_name in class_counts:
                    class_counts[class_name] += 1
                else:
                    class_counts[class_name] = 1
            
            st.subheader("Detection Summary:")
            for class_name, count in class_counts.items():
                st.write(f"{class_name}: {count}")
    
    elif input_type == "Video":
        uploaded_file = st.file_uploader("Upload a video...", type=["mp4", "avi"])
        if uploaded_file is not None:
            tfile = tempfile.NamedTemporaryFile(delete=False) 
            tfile.write(uploaded_file.read())
            tfpath = tfile.name
            cap = cv2.VideoCapture(tfpath)
            frame_placeholder = st.empty()
            for annotated_frame in detect_video(model, tfpath, conf_threshold):
                frame_placeholder.image(annotated_frame, channels="BGR", use_column_width=True)
            cap.release()
            os.remove(tfpath)
    
    elif input_type == "Camera":
        frame_placeholder = st.empty()
        for annotated_frame in detect_camera(model, conf_threshold):
            frame_placeholder.image(annotated_frame, channels="BGR", use_column_width=True)

if __name__ == "__main__":
    main()

文件结构

mine_anomaly_detection/
├── main.py
├── datasets/
│   └── mine_dataset/
│       ├── coco/
│       │   ├── annotations/
│       │   │   ├── train.json
│       │   │   └── val.json
│       │   └── images/
│       │       ├── train/
│       │       │   ├── image1.jpg
│       │       │   ├── image2.jpg
│       │       │   └── ...
│       │       └── val/
│       │           ├── image1.jpg
│       │           ├── image2.jpg
│       │           └── ...
│       └── yolo/
│           ├── train/
│           │   ├── images/
│           │   │   ├── image1.jpg
│           │   │   ├── image2.jpg
│           │   │   └── ...
│           │   └── labels/
│           │       ├── image1.txt
│           │       ├── image2.txt
│           │       └── ...
│           └── val/
│               ├── images/
│               │   ├── image1.jpg
│               │   ├── image2.jpg
│               │   └── ...
│               └── labels/
│                   ├── image1.txt
│                   ├── image2.txt
│                   └── ...
├── best_mine_anomaly_yolov8.pt
└── requirements.txt

安装依赖项

首先,确保你已经安装了所有必要的依赖项。你可以通过以下命令安装:

pip install -r requirements.txt

requirements.txt 内容如下:

streamlit==1.25.0
opencv-python
torch==2.0
ultralytics

数据集格式

假设你的数据集已经按照YOLOv5/YOLOv8的格式进行了标注。每个图像文件对应一个文本文件,其中包含边界框信息。例如:

image1.jpg

0 0.5 0.5 0.2 0.2
1 0.7 0.7 0.1 0.1

这表示图像中有两个对象,第一个对象的类别是0(人),第二个对象的类别是1(液压支撑防护板)。

配置说明

数据集目录结构
  • datasets/mine_dataset/coco/annotations: 存放COCO格式的标注文件。
  • datasets/mine_dataset/coco/images: 存放所有的图片文件。
  • datasets/mine_dataset/yolo/train/images: 存放训练集图片文件。
  • datasets/mine_dataset/yolo/train/labels: 存放训练集标签文件。
  • datasets/mine_dataset/yolo/val/images: 存放验证集图片文件。
  • datasets/mine_dataset/yolo/val/labels: 存放验证集标签文件。
训练好的权重文件 (best_mine_anomaly_yolov8.pt)

你需要有一个训练好的YOLOv8模型权重文件。这个文件可以从你的训练过程中获得,或者从其他来源获取。

数据集配置文件 (data.yaml)

创建一个 data.yaml 文件来配置数据集路径和类别信息。

运行步骤总结

  1. 克隆项目仓库(如果有的话):

    git clone https://github.com/yourusername/mine_anomaly_detection.git
    cd mine_anomaly_detection
    
  2. 安装依赖项

    pip install -r requirements.txt
    
  3. 数据集准备

    • 如果数据集是COCO格式,请运行数据集转换脚本。
      python convert_coco_to_yolo.py
      
    • 确保数据集目录结构正确。
  4. 训练模型

    python train.py
    

总结

以上是完整的基于YOLOv8的煤矿井下开采异常检测系统的项目介绍和代码实现。该项目支持图片、文件夹、视频等多种输入方式,并且可以实时检测煤矿井下的各种异常情况。希望这些详细的信息和代码能够帮助你顺利实施和优化你的煤矿井下开采异常检测系统。

标签:conf,img,检测,frame,mine,煤矿,image,矿工,model
From: https://blog.csdn.net/QQ_1309399183/article/details/144624215

相关文章

  • 网络超时检测
    利用socket属性实现应用场景在网络通信中,很多操作会使得进程阻塞:TCP套接字中的recv/acceptUDP套接字中的recvfrom超时检测的必要性避免进程在没有数据时无限制地阻塞实现某些特定协议要求,比如某些设备规定,发送请求数据后,如果多长时间后没有收到来自设备的回......
  • YOLOv5裂缝检测系统,YOLOv5裂缝识别检测,YOLOv5训练自己的裂缝数据集,深度学习裂缝识别
    项目源码+数据集(订阅2024年深度学习专栏获取源码,订阅后私信订阅截图+项目名+邮箱):请订阅下方专栏获取源码https://blog.csdn.net/m0_68036862/category_12294299.html?spm=1001.2014.3001.5482摘要裂缝是结构安全中常见的损伤形式,尤其在道路、桥梁、建筑物等基础设施中,裂......
  • 深度学习YOLOv5驾驶疲劳检测,YOLOv5训练自己的驾驶疲劳数据集,yolov5安全驾驶检测
     项目源码+数据集(订阅2024年深度学习专栏获取源码,订阅后私信订阅截图+项目名+邮箱):请订阅下方专栏获取源码https://blog.csdn.net/m0_68036862/category_12294299.html?spm=1001.2014.3001.5482背景1.交通安全的迫切需求疲劳驾驶是全球范围内交通事故的重要诱因之一。据......
  • 调用摄像头检测人脸
    引言:机器视觉在近些年来很热门,比如自动驾驶、人脸识别等领域都有很大的作用,所以也有很多人愿意去学习相关内容,本文将初步探索人脸识别领域中检测人脸的模块。正文:  如果真的要自己从底层开发识别人脸的程序,那么难度还是很大的。  其实还是站在巨人的肩膀上看世界,权当......
  • 工具分享 | TPscan - 一键ThinkPHP漏洞检测getshell
    0x00工具介绍TPscan是一款基于Python3的ThinkPHP漏洞检测工具。0x01下载链接TPscan下载链接:Tpscan下载0x02功能介绍thinkphp_checkcode_time_sqli_verifythinkphp_construct_code_exec_verifythinkphp_construct_debug_rce_verifythinkphp_debug_index_ids_sqli_v......
  • 《数字图像处理》课程设计——路面裂缝检测系统
    本文使用MATLAB实现了路面裂缝检测系统,部分代码如下。预处理函数:functionResult=Process_Main(I)ifndims(I)==3I1=rgb2gray(I);elseI1=I;endI2=hist_con(I1);I3=med_process(I2);I4=adjgamma(I3,2);[bw,th]=IterProcess(I4);bw=~bw;......
  • 基于yolov8的小麦麦穗检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源
       更多目标检测、图像分类识别、目标追踪等项目可看我主页其他文章功能演示:基于yolov8的小麦麦穗检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili(一)简介基于yolov8的小麦麦穗检测系统在pytorch框架下实现的,这是一个完整的项目,包括......
  • 人员检测视频分析服务器安装网络监控系统时有哪些常见的技术挑战?
    在构建一个高效、可靠的网络监控系统时,技术人员需要面对一系列技术挑战,这些挑战覆盖了从系统集成到信息安全的各个环节。随着技术的不断进步,尤其是在人工智能和物联网技术的推动下,安防监控系统变得更加复杂和强大。以下是在安装网络监控系统时可能遇到的一些常见技术挑战,以及智能......
  • YOLOv10改进,YOLOv10添加BiLevelRoutingAttention双层路由注意机制、CSPStage广义特征
    摘要新型的BGF-YOLO模型,在YOLOv8的基础上进行优化,用于准确检测MRI中的脑肿瘤。作者证明,BGF-YOLO模型通过优化GFPN特征融合结构、引入BRA注意力机制以及增加检测头,显著提升了YOLOv8的物体检测能力。理论介绍BiLevelRoutingAttention(简称BRA)是一种动态、查询感知的稀......
  • 论文速读,YOLOX:anchor free的单阶段目标检测模型
    原文标题:YOLOX:ExceedingYOLOSeriesin2021中文标题:YOLOX:2021年超越YOLO系列代码地址:https://github.com/Megvii-BaseDetection/YOLOXAbstract在本报告中,旷视团队介绍了对YOLO系列的一些经验丰富的改进,形成了一种新的高性能检测器——YOLOX。我们将YOLO检测器切......