当前位置: 首页 > article >正文

建筑工地AI安全检测系统:YOLO11数据标注训练与PyQt5界面设计应用开发

“随着建筑行业的快速发展,工地的安全监管显得尤为重要。传统的人工监管方式效率低、成本高,难以及时发现潜在的安全隐患。为了解决这一问题,本项目基于YOLOv11目标检测算法,利用2800多张建筑工地影像数据及其标注数据,构建了一套高效的建筑工地安全检测系统。该系统集成了图像检测、实时预警和人机交互功能,可大幅提高工地的安全监管效率。”

建筑工地AI安全检测YOLO11训练与PyQt5界面应用开发软件视频演示

原文链接,可下载源码

在这里插入图片描述
本项目的数据集包括2800多张真实的建筑工地影像,涵盖了常见的工地安全隐患场景,主要关注是否佩戴了安全头盔和安全背心等关键安全要素。每张图片均经过专业的标注,包含物体类别和边界框信息,确保数据的准确性和完整性。数据集经过清洗、增强和划分,确保模型在训练和测试阶段的稳定性和泛化能力。

01 提供数据集及软件源码(关注免费获取源码)

在这里插入图片描述
在这里插入图片描述

02 数据处理脚本解析

data_safe.yaml:训练数据的配置文件
在这里插入图片描述
train_safe.py:训练的文件及参数配置,运行即可启动训练。
在这里插入图片描述

03 训练结果评估

在这里插入图片描述
混淆矩阵,混淆矩阵以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值。

在这里插入图片描述
F1曲线:查准率和召回率的调和平均数,常常将F1-score作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,其中1是最好,0是最差。置信度阈值较高的时候,置信度高的样本才能被认为是真,类别检测的越准确,即精准率较大。
在这里插入图片描述
单一类准确率:置信度阈值 - 准确率曲线图,准确率precision和置信度confidence的关系图。
在这里插入图片描述
在这里插入图片描述
有关训练结果评估,更多内容,可关注另外一篇文章:
【深度学习】深度学习模型训练结果分析及效果评估以及Yolo训练结果解释

04 推理及软件逻辑处理

在这里插入图片描述
在这里插入图片描述
模型加载及推理源码逻辑:


# 目标检测及结果解析
def detect_draw(self, img):
    results = self.model(img, conf=self.conf, iou=self.iou)
    names = results[0].names
    boxes = results[0].boxes.xyxy.tolist()
    classes = results[0].boxes.cls.tolist()
    confidences = results[0].boxes.conf.tolist()
    array_data = []
    for box, cls, conf in zip(boxes, classes, confidences):
        x1, y1, x2, y2 = box
        tag = names[int(cls)]
        score = int(round(conf,2)*100)
        array_data.append({'x1': int(x1), 'y1': int(y1), 'x2': int(x2), 'y2': int(y2), 'tag': tag, 'score': score})
    return array_data
# 在图片上画识别结果
def draw_rect_msg(sef, img, array_data):
    convert_tag = {
        "Hardhat": "安全帽",
        "NO-Hardhat": "未戴安全帽",
        "Mask": "口罩",
        "NO-Mask": "未戴口罩",
        "Safety Vest": "安全背心",
        "NO-Safety Vest": "没有安全背心",
        "Person": "人",
        "Safety Cone": "安全锥",
        "machinery": "机械",
        "vehicle": "车辆"
    }
    bIsViolation = False
    for data in array_data:
        x1, y1, x2, y2 = map(int, (data['x1'], data['y1'], data['x2'], data['y2']))
        tag = data['tag']
        if tag in ['Person', 'machinery', 'Safety Cone']:
            continue
        cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), thickness=2)  # 画矩形
        bIsViolation = True
    
    # 转换图像为 PIL 格式,添加中文标签
    img_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    draw = ImageDraw.Draw(img_pil)
    
    font_path = "SimHei.ttf"
    font = ImageFont.truetype(font_path, 20)
    
    for data in array_data:
        x1, y1 = int(data['x1']), int(data['y1'])
        tag = data['tag']
        if tag in ['Person', 'machinery', 'Safety Cone']:
            continue
        
        tag_txt = convert_tag.get(tag, "未知")
        # 计算文字的宽高,替换 textsize() 方法
        bbox = draw.textbbox((0, 0), tag_txt, font=font)  # 获取文本边界
        text_width = bbox[2] - bbox[0]  # 宽度 = 右 - 左
        text_height = bbox[3] - bbox[1]  # 高度 = 下 - 上
        
        # 计算文本左上角位置
        text_x = x1  # 与矩形左边对齐
        text_y = max(0, y1 - text_height - 2)  # 保证不超出顶部 (y1 - text_height - 2)
        # 计算文字的背景矩形
        background_top_left = (text_x, text_y)  # 左上角
        background_bottom_right = (text_x + text_width + 4, text_y + text_height + 2)  # 右下角(+4和+2是边距)
        # 画黑底
        draw.rectangle([background_top_left, background_bottom_right], fill=(0, 0, 0))  # 黑色背景
        # 画黄字
        draw.text((text_x + 2, text_y + 1), tag_txt, font=font, fill=(255, 255, 0))  # 黄字,左移 2 像素,向下移动 1 像素
    
    # 转换回 OpenCV 格式
    image1 = cv2.cvtColor(np.array(img_pil), cv2.COLOR_RGB2BGR)
    return image1, bIsViolation

PyQt5界面设计:
在这里插入图片描述
界面CSS:


#Dialog{ background-color:rgb(13,29,53);}
#labelTitle{
  border: none;
  font-size:25px;
  color: white;	
}
#label_alarm_text{
  border: none;
  font-size:18px;
  color: red;
}
#btnOpenImage{ border-image: url(":images/openImg.png"); }
#btnOpenVideo{ border-image: url(":images/openVideo.png"); }
#btnOpenCamera{ border-image: url(":images/openCamera.png"); }
#ImageShow{ border-image: url(":images/introduce.png"); }
QLineEdit{
  border: 1px groove rgb(95,95,103);
  border-radius:5px;
  font-size:20px;
}
#ImageShow{ border: 1px groove rgb(95,95,103); }
#comboBox{
  border:1px groove gray;
  font-size:18px;
  color:rgb(250,226,99);	
  background-color:rgb(95,95,103);
}
#comboBox:drop-down { width: 45px;}
#groupBox{
  border:1px groove rgb(95,95,103);
  border-radius:5px;
  font-size: 22px;
  color: white;
}
#labelConf{
  border: none;
  font-size:15px;
  color:white;
}
#labelModel{
  border: none;
  font-size:20px;
  color:white;
}
#labelLogText{
  border-radius:5px;
  font-size:15px;
  color: yellow;
  background-color:rgb(95,95,103);
}

本项目基于YOLOv11目标检测算法,利用2800多张建筑工地影像数据及其标注数据,构建了一套高效的建筑工地安全检测系统。该系统集成了图像检测、实时预警和人机交互功能,可大幅提高工地的安全监管效率。

原文链接


http://www.kler.cn/a/450444.html

相关文章:

  • Ubuntu22.04 LTS 安装nvidia显卡驱动
  • C#(事件)2
  • pytest自动化测试数据驱动yaml/excel/csv/json
  • 三.统一异常Exception拦截处理
  • 有没有检测吸烟的软件 ai视频检测分析厂区抽烟报警#Python
  • ROS1入门教程6:复杂行为处理
  • 契约锁数智化合同大会全国巡展启动,助力合同管理全程数字化转型
  • 【FAQ】HarmonyOS SDK 闭源开放能力 — Vision Kit(2)
  • 如何打造用户友好的维护页面:6个创意提升WordPress网站体验
  • 一键打断线(根据相交点打断)——CAD c# 二次开发
  • 查询Elasticsearch索引刷新间隔
  • [Unity Shader] 【游戏开发】【图形渲染】Shader数学基础3:矢量与标量的乘法与除法详解
  • IntelliJ IDEA 基本使用教程及Spring Boot项目搭建实战
  • 比亚迪“天神之眼”重磅升级,无图城市领航功能全国开通
  • I.MX6U 启动方式详解
  • mac 使用 launchctl 实现每次登录系统时 frpc 就会自动启动
  • js原型和原型链
  • 实验17 优化算法的比较分析
  • 解决POM依赖与maven仓库关联的问题
  • JAVA HTTP压缩数据
  • 理想很丰满的Ollama-OCR
  • WebSocket | 背景 概念 原理 使用 优缺点及适用场景
  • 单片机:实现动态显示七段数码管(附带源码)
  • ZCC2116TSL 1µA超低静态电流同步升压变换器 替代TLV61070
  • 【优选算法】Pointer-Slice:双指针的算法切片(下)
  • pdf转换文本:基于python的tesseract