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

基于YOLO11的电梯电瓶车检测系统:让电梯更安全

📋 项目背景

近年来,电动车进入电梯引发的安全事故频发,给人们的生命财产安全带来严重威胁。传统的电梯监控系统往往只能记录画面,无法主动识别和预警危险行为。

为了解决这一问题,我们开发了一套基于深度学习的电梯电瓶车检测系统,能够:

  • 🔍 实时检测电梯内的人员和车辆
  • 🚨 自动识别电瓶车违规进入电梯
  • 📊 提供详细的检测统计和预警信息
  • 🛡️ 为电梯安全管理提供智能化支持

🎯 技术方案

检测目标

系统能够识别以下三类目标:

  • 👤 person(人): 电梯内的人员
  • 🚲 bicycle(自行车): 普通自行车
  • 🏍️ motorcycle(摩托车): 包括电瓶车在内的摩托车

技术架构

  • 基础模型: YOLO11 nano
  • 训练框架: Ultralytics YOLO
  • 数据处理: VOC格式转YOLO格式
  • 部署方式: 支持GPU加速推理

💻 核心代码实现

1. 数据预处理模块

class VOCToYOLOConverter:"""VOC格式到YOLO格式转换器"""def __init__(self, voc_root: str, yolo_root: str):self.voc_root = Path(voc_root)self.yolo_root = Path(yolo_root)# 电梯电瓶车检测类别:人、自行车、摩托车self.class_names = ['person', 'bicycle', 'motorcycle']self.class2id = {name: i for i, name in enumerate(self.class_names)}def parse_xml(self, xml_path: str) -> Tuple[int, int, List[dict]]:"""解析VOC XML文件,转换为YOLO格式"""tree = ET.parse(xml_path)root = tree.getroot()# 获取图像尺寸size = root.find('size')width = int(size.find('width').text)height = int(size.find('height').text)# 解析目标框并转换为YOLO格式objects = []for obj in root.findall('object'):name = obj.find('name').textif name not in self.class2id:continuecls_id = self.class2id[name]bndbox = obj.find('bndbox')xmin, ymin, xmax, ymax = map(float, [bndbox.find('xmin').text,bndbox.find('ymin').text,bndbox.find('xmax').text,bndbox.find('ymax').text])# 转换为YOLO格式 (归一化的中心点坐标和宽高)x_center = (xmin + xmax) / 2.0 / widthy_center = (ymin + ymax) / 2.0 / heightbbox_width = (xmax - xmin) / widthbbox_height = (ymax - ymin) / heightobjects.append({'class_id': cls_id,'x_center': x_center,'y_center': y_center,'width': bbox_width,'height': bbox_height})return width, height, objects

2. 模型训练配置

def train_motorcycle_detection():"""电梯电瓶车检测训练主函数"""print("🛗 电梯电瓶车检测 - 快速GPU训练")# 加载YOLO11模型model = YOLO("models/yolo11n.pt", task='detect')# 开始训练results = model.train(data='data/data.yaml',           # 数据集配置epochs=100,                      # 训练轮数imgsz=640,                       # 输入图像尺寸batch=16,                        # 批次大小device='cuda',                   # 使用GPUworkers=4,                       # 数据加载线程cache=True,                      # 缓存数据到内存project='motorcycle_results',    # 项目文件夹name='yolo11n_motorcycle',       # 实验名称patience=20,                     # 早停耐心值save=True,                       # 保存最佳模型# 学习率设置lr0=0.01,                        # 初始学习率lrf=0.01,                        # 最终学习率比例momentum=0.937,                  # SGD动量weight_decay=0.0005,             # 权重衰减warmup_epochs=3,                 # 预热轮数# 数据增强 - 适合电梯内电瓶车图像hsv_h=0.015,                     # 色调增强hsv_s=0.7,                       # 饱和度增强  hsv_v=0.4,                       # 明度增强degrees=10.0,                    # 旋转角度translate=0.1,                   # 平移scale=0.5,                       # 缩放fliplr=0.5,                      # 左右翻转mosaic=1.0,                      # 马赛克增强mixup=0.1,                       # 混合增强)return results

3. 实时检测模块

def detect_motorcycle_in_elevator(model, image_path):"""电梯电瓶车实时检测"""# 读取图像img = cv2.imread(image_path)# 进行预测results = model(img, conf=0.25, iou=0.45)result = results[0]boxes = result.boxes# 类别名称和颜色class_names = ['person', 'bicycle', 'motorcycle']colors = [(0, 255, 0), (255, 0, 0), (0, 0, 255)]  # 绿色、蓝色、红色# 检测结果统计detection_count = 0motorcycle_detected = Falseif boxes is not None:for box in boxes:# 获取边界框坐标x1, y1, x2, y2 = box.xyxy[0].cpu().numpy()x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2)# 获取类别和置信度cls = int(box.cls[0].cpu().numpy())conf = float(box.conf[0].cpu().numpy())# 检查是否检测到摩托车/电瓶车if cls == 2:  # motorcycle类别motorcycle_detected = True# 绘制检测框color = colors[cls % len(colors)]cv2.rectangle(img, (x1, y1), (x2, y2), color, 2)# 绘制标签label = f"{class_names[cls]}: {conf:.2f}"cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2)detection_count += 1# 预警信息if motorcycle_detected:cv2.putText(img, "WARNING: Motorcycle Detected!", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)return img, detection_count, motorcycle_detected

📊 训练结果分析

模型性能指标

经过68轮训练,模型在验证集上取得了优异的性能:

  • 🎯 mAP50: 95.09% - 在50%IoU阈值下的平均精度
  • 🎯 mAP50-95: 75.71% - 在多个IoU阈值下的平均精度
  • 🎯 Precision: 90.31% - 精确率
  • 🎯 Recall: 88.44% - 召回率

各类别检测性能

  • 👤 person(人): mAP50 = 96.0%, Precision = 97.7%
  • 🚲 bicycle(自行车): mAP50 = 89.8%, Precision = 73.9%
  • 🏍️ motorcycle(摩托车): mAP50 = 99.5%, Precision = 99.3%

在这里插入图片描述

训练过程可视化

在这里插入图片描述

从训练曲线可以看出:

  • 模型在训练初期快速收敛
  • 验证集性能稳定提升
  • 在第48轮达到最佳性能
  • 早停机制有效防止过拟合

测试

train_batch0:
在这里插入图片描述
val_batch0_labels
在这里插入图片描述
val_batch0_pred
在这里插入图片描述

🚀 部署和使用

环境要求

# 安装依赖
pip install ultralytics opencv-python torch torchvision# 系统要求
- Python 3.8+
- CUDA支持的GPU(推荐)
- 8GB+ 显存

快速开始

# 1. 数据预处理
python prepare_dataset.py# 2. 模型训练
python train_motorcycle_detection.py# 3. 模型测试
python test_saved_model.py

实际应用场景

  1. 🏢 智能楼宇管理: 集成到楼宇监控系统
  2. 🚨 安全预警: 实时检测电瓶车违规进入电梯
  3. 📊 数据统计: 统计电梯使用情况和违规行为
  4. 🔒 门禁控制: 与电梯门禁系统联动

💡 技术亮点

1. 高效的数据处理

  • 自动VOC到YOLO格式转换
  • 智能数据集分割(训练70%/验证20%/测试10%)
  • 针对电梯场景的数据增强

2. 优化的训练策略

  • 使用YOLO11 nano轻量级模型
  • GPU加速训练,支持混合精度
  • 早停机制防止过拟合
  • 自适应学习率调度

3. 实用的检测功能

  • 多类别同时检测
  • 实时预警机制
  • 可视化检测结果
  • 性能统计分析

📝 总结

本项目成功实现了基于YOLO11的电梯电瓶车检测系统,通过深度学习技术为电梯安全管理提供了智能化解决方案。系统具有高精度、高效率、易部署等特点,在实际应用中能够有效识别电梯内的电瓶车违规行为,为保障电梯安全发挥重要作用。

http://www.dtcms.com/a/302205.html

相关文章:

  • Redis反弹Shell
  • 《Java 程序设计》第 8 章 - Java 常用核心类详解
  • 安装研华板卡驱动
  • 重庆地区通信安全员考试题库及答案
  • tsc命令深入全面讲解
  • 零基础学习性能测试第六章:性能难点-Jmeter文件上传场景压测
  • 【智慧物联网平台】编译jar环境 Linux 系统编译IOT物联网——仙盟创梦IDE
  • React Immer 不可变数据结构的处理
  • Jmeter 性能测试监控之ServerAgent
  • Jmeter的元件使用介绍:(九)监听器详解
  • 10、Docker Compose 安装 MySQL
  • Redis数据量过大的隐患:查询会变慢吗?如何避免?
  • CacheGen:用于快速大语言模型推理服务的 KV 缓存压缩与流式传输
  • 【linux】高可用集群Keepalived
  • 如何给电脑换个ip地址?电脑换ip几种方法
  • 【计算机网络】OSI七层模型
  • AR眼镜:工业4.0时代高风险作业的安全守护者
  • 设计模式(二十二)行为型:策略模式详解
  • 【CSS】设置表格表头固定
  • 【查漏补缺】机器学习典型算法
  • ZeroNews 推出端到端 TLS 终止功能,强化数据传输安全
  • 【IP地址】大型监控项目IP地址如何规划?
  • 3,智能制造,MOM,MES - 精益制造(具体内容参考PPT文档)
  • 浅谈智能体经济(下篇)——Agent工厂与Agent市场
  • ppocr方向分类器记录
  • C++11之lambda及包装器
  • 【Bluedroid】bta_av_sink_media_callback(BTA_AV_SINK_MEDIA_CFG_EVT)流程源码分析
  • 快速了解MySQL
  • 火狐浏览器中国特供版关闭,如何下载 Firefox 国际版?如何备份数据?
  • vue怎么实现导入excel表功能