建筑工地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 推理及软件逻辑处理


模型加载及推理源码逻辑:

python 复制代码
# 目标检测及结果解析
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:

python 复制代码
#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多张建筑工地影像数据及其标注数据,构建了一套高效的建筑工地安全检测系统。该系统集成了图像检测、实时预警和人机交互功能,可大幅提高工地的安全监管效率。

原文链接

相关推荐
->yjy6 分钟前
jupyter版本所引起的扩展插件问题
人工智能·python·jupyter
电棍2339 分钟前
vscode+WSL2(ubuntu22.04)+pytorch+conda+cuda+cudnn安装系列
人工智能·pytorch·conda
doubt。17 分钟前
【BUUCTF】[GXYCTF2019]BabysqliV3.01
网络·安全·web安全·php·代码复审
kcarly32 分钟前
Microsoft Power BI:融合 AI 的文本分析
人工智能·gpt·microsoft·bi
HMS工业网络43 分钟前
Anybus网关EtherNet/IP扫描器:快速、可靠、易配置的新一代网关
网络·物联网·安全
垚垚 Securify 前沿站1 小时前
Linux Samba 低版本漏洞(远程控制)复现与剖析
linux·运维·网络·安全·web安全·网络安全·系统安全
测试者家园1 小时前
代码审查中的自动化与AI应用
自动化测试·软件测试·人工智能·单元测试·代码审查·ai赋能·质量效能
〖是♂我〗1 小时前
自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测
人工智能·pytorch·逻辑回归
云空1 小时前
《DeepSeek R1:开启AI推理新时代》
人工智能