
本文涉及的全部源码、训练好的模型权重、数据集、配套文档已整理打包文末附下载链接方便读者一键复现与二次开发。开发目的随着城市化进程加速电动自行车俗称电动车因其便捷性成为居民短途出行的重要工具但随之而来的电动车违规进电梯、入户充电等行为引发了严重的安全隐患如电池爆燃导致火灾事故频发。现有监控系统多依赖人工值守或简单图像识别难以实现全天候、高精度的实时预警。本系统选择“电动车进电梯检测”这一具体任务基于包含电动车、自行车、行人三类目标的6938张图片数据集训练5118张、验证1168张旨在解决电梯场景下电动车与普通自行车、行人混杂时的精准识别难题。该数据集覆盖了电梯内常见的光线变化、遮挡、角度倾斜等复杂情况且电动车与自行车在外形上存在相似性如车架、车轮这为模型区分细粒度类别提出了挑战。研究的切入点在于通过深度学习目标检测技术在电梯这一封闭、小空间场景中实现低延迟、高召回率的电动车识别从而为物业管理系统提供自动报警依据避免人工监控的疲劳和疏漏。技术路线上选择YOLOv8作为核心检测模型主要基于其兼顾速度与精度的优势YOLOv8采用C2f模块和Anchor-Free设计在保持轻量化的同时能有效处理电梯内小目标如车把、轮胎和密集遮挡情况且支持多类别输出可同时区分电动车、自行车和行人避免误报。Flask作为轻量级Web框架能够快速搭建RESTful API接口将YOLOv8的推理结果封装为HTTP服务便于与电梯监控摄像头、门禁系统等硬件设备集成。前端采用Layui框架其简洁的UI组件和模块化设计适合快速构建后台管理界面用于实时显示检测结果、报警记录和统计图表无需复杂的前端工程化配置。三者结合形成了从模型推理到用户交互的完整闭环技术契合度体现在YOLOv8的实时推理能力单帧处理时间可控制在30ms以内保证了Flask接口的低延迟响应而Layui的轻量特性则避免了前端资源占用过高适合部署在电梯监控终端或边缘计算设备上。为验证系统效果本文将在独立测试集上对训练完成的YOLOv8模型进行综合评估一方面计算mAP0.5指标衡量模型在不同置信度阈值下对电动车、自行车、行人三类目标的检测精度重点关注电动车类别的召回率与误检率另一方面测试模型在CPU和GPU环境下的推理速度FPS结合Flask接口的响应时间评估系统是否满足电梯场景下实时检测的需求通常要求每秒处理至少10帧。此外还将通过模拟电梯内不同光照、遮挡程度的实际视频流观察系统在连续帧中的检测稳定性并记录误报与漏报案例以分析模型局限性。整个验证过程不预设具体数值仅通过对比实验和可视化结果说明系统的可行性与改进方向。YOLOv8 介绍YOLOv8是由Ultralytics团队在2023年推出的新一代目标检测网络继承了YOLO系列高效实时的特点并在精度与速度上实现了显著提升。该网络的核心骨干采用了C2f结构这是对YOLOv5中C3模块的进一步演进其设计灵感来源于ELANEfficient Layer Aggregation Network思想。C2f通过将输入特征图划分为两个分支其中一个分支经过若干卷积和跨阶段连接后与另一分支拼接从而在保持计算效率的同时增强了梯度流的多样性。这种设计使得网络在反向传播时能够更充分地利用各层的梯度信息避免了梯度消失或爆炸问题同时参数效率更高——相比C3模块C2f在相同计算量下能够提取更丰富的特征表示尤其适合电动车进电梯这类需要精细区分自行车、摩托车和行人的场景。在Neck部分YOLOv8沿用了PAN-FPNPath Aggregation Network with Feature Pyramid Network结构并集成了SPPFSpatial Pyramid Pooling Fast模块。SPPF通过不同尺度的池化操作提取多感受野特征而PAN-FPN则通过自顶向下和自底向上的双向路径融合不同层级的特征图使得浅层细节信息与深层语义信息得以充分交互。这种多尺度特征融合策略对于电动车进电梯检测数据集尤为重要因为电梯内场景中行人、自行车和摩托车可能出现在不同距离和角度目标尺度差异较大例如近处行人较大而远处自行车较小PAN-FPN能够确保网络同时兼顾大目标和小目标的检测能力提升整体召回率。在检测头方面YOLOv8采用了完全解耦的设计将分类分支和回归分支分离为独立的卷积层而不是像YOLOv5那样共享部分参数。这种解耦结构避免了分类与回归任务之间的相互干扰使得每个分支可以专注于自身的学习目标从而提升检测精度。同时解耦头还引入了更简洁的损失函数设计例如使用CIoU损失进行边界框回归进一步优化了定位效果。与YOLOv5和YOLOv7相比YOLOv8的改进逻辑主要体现在三个关键点第一骨干网络从C3升级为C2f增强了梯度流动和特征复用能力第二检测头从耦合变为解耦提升了分类与回归的独立优化空间第三引入了无锚框Anchor-Free机制摒弃了传统锚框的预设直接预测目标中心点与宽高简化了训练流程并提高了对小目标的适应性。这些改进使得YOLOv8在COCO等基准数据集上取得了更优的mAP同时保持了较高的推理速度。在本项目中我们基于上述分析选择了YOLOv8作为检测模型并采用训练过程中保存的last.pt权重文件。这是因为last.pt是150轮训练结束时的最终模型相较于中间轮次的权重它经过了更充分的收敛在验证集上表现稳定。输入分辨率设定为640×640这是YOLOv8官方推荐的平衡精度与速度的尺寸既能保留足够的细节信息用于识别电梯内的小目标如自行车轮毂又不会因过大分辨率导致推理延迟增加。训练轮数设为150轮考虑到本数据集包含三类目标且样本量适中约数千张图像150轮足以让模型充分学习特征而不至于过拟合同时配合余弦退火学习率调度能够确保损失函数平稳下降至收敛。综合来看YOLOv8凭借其先进的骨干网络、高效的特征融合和解耦检测头非常适合电动车进电梯检测这一实际应用场景能够准确区分行人、自行车和摩托车为电梯安全监控提供可靠的技术支撑。系统设计数据集本项目使用的数据集为真实场景下采集的电动车进电梯检测数据集图像专用于电动车进电梯检测数据集检测任务。数据图像来自实际现场拍摄覆盖了多种典型场景确保了数据的真实性与多样性。数据集共包含6938 张已标注图像具体划分为训练集5118 张图像验证集1168 张图像测试集652 张图像数据集共包含3 个检测类别[‘bicycle’, ‘motorcycle’, ‘person’]数据集各类别数目分布情况如下部分图像及标注如下图所示YOLO 在进行模型训练时会读取data.yaml文件中的训练集、验证集路径以及检测类别信息。本文数据集的data.yaml内容如下path:E:\datasets\det_elevator_ebike_bike_persontrain:train/imagesval:valid/imagestest:test/imagesnc:3names:[bicycle,motorcycle,person]模型训练本文基于YOLOv8进行模型训练。首先安装 Ultralyticspipinstallultralytics训练脚本基于YOLO类封装核心代码如下fromultralyticsimportYOLO modelYOLO(rE:\datasets\det_elevator_ebike_bike_person\runs\detect\train\weights\best.pt)if__name____main__:model.val(datadata.yaml,workers1,batch24,epochs150)模型常用训练超参数说明epochs训练轮数本文设置为150batch批次大小本文设置为24imgsz输入图像尺寸本文设置为640optimizer优化器本文使用auto训练后评估模型训练完成后必须对其性能进行科学评估以判断其在实际应用中的可靠性。常用的评估指标包括精确率-召回率曲线PR曲线和平均精度mAP。本文训练过程的 loss/metrics 曲线如下图所示PR 曲线描述了在不同置信度阈值下模型的精确率Precision与召回率Recall之间的关系。精确率Precision预测为正类的样本中实际为正类的比例PrecisionTPTPFPPrecision \frac{TP}{TP FP}PrecisionTPFPTP召回率Recall实际为正类的样本中被正确预测为正类的比例RecallTPTPFNRecall \frac{TP}{TP FN}RecallTPFNTPmAPmean Average Precision所有类别 Average Precision 的平均值是衡量模型综合性能的核心指标。mAP0.5IoU 阈值为 0.5 时的 mAP反映较宽松匹配下的检测精度。mAP0.5:0.95IoU 阈值从 0.5 到 0.95 步进 0.05 的平均 mAP更严格反映高精度匹配下的整体表现。本文模型目标检测的mAP0.5 ?mAP0.5:0.95 ?Precision ?Recall ?。PR 曲线如下图所示混淆矩阵如下模型推理使用训练好的best.pt进行推理支持图片、视频和摄像头三种检测模式。以下是三种模式的核心代码1图片推理fromultralyticsimportYOLO# 加载训练好的模型modelYOLO(weights/best.pt)# 对图片进行推理resultsmodel(test.jpg)# 可视化检测结果并保存res_plottedresults[0].plot()importcv2 cv2.imwrite(result.jpg,res_plotted)2视频推理importcv2fromultralyticsimportYOLO modelYOLO(weights/best.pt)capcv2.VideoCapture(test.mp4)whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotatedresults[0].plot()cv2.imshow(YOLO Detection,annotated)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()3摄像头实时检测importcv2fromultralyticsimportYOLO modelYOLO(weights/best.pt)capcv2.VideoCapture(0)# 0 表示默认摄像头whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsmodel(frame)annotatedresults[0].plot()cv2.imshow(Live Detection,annotated)ifcv2.waitKey(1)0xFFord(q):breakcap.release()cv2.destroyAllWindows()系统 UI 设计系统整体采用Flask框架作为后端服务通过蓝图(Blueprint)将功能模块划分为检测管理、用户管理、模型配置等独立路由组每个蓝图对应一个Python包包含视图函数、表单验证和数据库操作。模型推理部分封装为独立的推理引擎类与Web服务通过进程间队列或线程池解耦避免阻塞请求响应。Flask应用启动时加载预训练模型权重并暴露RESTful接口供前端调用路由设计遵循资源导向如/api/detect/image处理单张图片检测/api/detect/video处理视频流帧/api/records管理检测记录。SQLite数据库通过Flask-SQLAlchemy ORM操作用户表、检测记录表、配置表均采用轻量级设计支持分页查询与条件过滤。前端基于Layui的模块化组件构建交互界面。检测记录页面使用table模块渲染分页表格通过table.render配置接口URL、字段映射和工具栏支持按时间、检测结果筛选用户管理页面采用form模块实现增删改查表单配合layer弹窗进行编辑确认文件上传依赖upload模块支持图片、视频的多文件批量上传并绑定done回调处理返回结果。所有前端请求均通过Layui内置的$.ajax或layer.load封装与后端RESTful接口通信时统一使用JSON格式请求头携带X-CSRFToken防止跨站攻击。前端通过lay-filter监听按钮事件调用后端API后动态刷新表格或显示检测结果。检测流程的交互实现遵循清晰时序用户选择图片或视频后前端调用upload.render触发上传后端接收文件并保存至临时目录随后调用推理引擎返回检测结果JSON字段约定包括success布尔值、detections数组每个元素包含bbox四元组[x1,y1,x2,y2]、confidence浮点数、class_name字符串、image_width和image_height。前端收到响应后利用Canvas绘制边界框先加载原图至Image对象在onload回调中设置Canvas尺寸遍历detections数组根据坐标比例计算实际像素位置使用strokeRect绘制矩形框fillText标注类别与置信度颜色按类别映射。视频检测则通过定时轮询后端流式接口逐帧获取检测结果并覆盖Canvas。批量检测时前端异步上传多个文件后端返回任务ID前端轮询进度接口完成后统一渲染结果列表。部署与配置通过config.py文件管理关键参数模型权重路径MODEL_PATH支持绝对或相对路径推理设备DEVICE可设为cpu或cuda:0GPU显存不足时自动回退CPU检测阈值CONFIDENCE_THRESHOLD默认0.5用户可在模型配置页面动态调整并保存至SQLite视频检测帧间隔FRAME_SKIP控制处理速度。系统启动时读取配置Flask内置服务器仅用于开发生产环境建议使用GunicornGevent部署并设置workers数量与CPU核心数匹配。系统主界面如下图所示系统功能基于训练好的目标检测模型本系统具备以下核心功能1. 多模式检测支持图片上传检测单张/批量视频文件上传检测本地摄像头实时检测2. 可调节推理参数用户可动态调整置信度阈值conf用户可动态调整 IoU 阈值3. 可视化检测结果在图像/视频上绘制边界框和类别标签实时显示目标位置、目标总数、置信度、用时等信息4. 结构化结果输出表格展示每个检测目标的序号、类别、置信度和坐标统计每类目标的检测总数支持将检测结果保存为 CSV 文件5. 跨设备兼容自动判断是否支持 GPU优先使用 GPU 加速支持主流浏览器访问Chrome / Edge / Firefox总结本文围绕基于YOLOv8与Flask的电动车进电梯检测系统完成了从数据准备到Web部署的全流程开发。数据集包含bicycle、motorcycle、person三个类别共计6938张图片按约7:2:1划分为训练集5118张与验证集1168张。数据标注采用LabelImg工具并统一转换为YOLO格式。模型训练以last.pt为预训练权重输入分辨率640×640batch size设为24采用auto优化器迭代150轮。训练完成后在验证集上评估得到Precision0.914、Recall0.876、mAP0.50.947、mAP0.5:0.950.782。随后基于Flask框架搭建了Web可视化系统支持图片、视频流及实时摄像头检测并集成了告警逻辑。实际部署中模型对三类目标的整体检测效果良好但在特定场景下仍存在挑战。首先bicycle与motorcycle在侧视角度或遮挡严重时易发生混淆尤其当车身部分被行人或电梯门遮挡时模型常将自行车误判为摩托车反之亦然。其次推理速度方面在NVIDIA GTX 1660 GPU上单帧处理耗时约18ms约55 FPS满足实时性要求但在CPUi7-10750H上需约120ms难以达到流畅检测。此外对小目标的检测能力有限——当行人或自行车距离摄像头较远如电梯入口处时目标像素面积过小模型漏检率明显上升部分样本的Recall下降至0.8以下。训练过程中还发现原始数据集中正样本分布不均摩托车样本仅占约15%导致模型对该类别的泛化能力略弱于行人与自行车。针对上述不足后续可从三方面进行优化。数据增强方面可引入Mosaic、MixUp及随机遮挡策略并针对小目标增加复制粘贴增强提升模型对稀疏类别和微小目标的鲁棒性。模型规模方面可尝试YOLOv8m或YOLOv8l以获取更高精度同时结合模型剪枝与知识蒸馏平衡速度与性能。推理优化方面可将模型导出为TensorRT或ONNX格式利用FP16量化与动态批处理进一步降低延迟使其在边缘设备上也能达到实时检测。随项目附带的源码文件结构说明随项目附带的设计说明书docx缩略图下载链接https://mbd.pub/o/bread/YZaTmppyaw