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

利用深度学习目标检测算法通用Yolov5训练电动车进电梯数据集 建立基于YOLOv5的电动车入梯识别系统 识别检测电梯进电动车的预警识别

利用深度学习目标检测算法通用Yolov5训练电动车进电梯数据集 建立基于YOLOv5的电动车入梯识别系统 识别检测电梯进电动车的预警识别

文章目录

      • 1. 数据准备
        • 标注工具
      • 2. 模型训练
        • 安装YOLOv5
        • 准备配置文件
        • 训练模型
      • 3. UI设计
        • 安装PyQt5
        • 创建主窗口
      • 4. 数据库集成
        • 数据库管理 (`db_utils.py`)
      • 5. 实时检测
      • 总结

基于YOLOv5的电动车入梯识别系统

1

构建一个基于YOLOv5s的电动车入梯识别系统,我们需要完成以下几个步骤:

  1. 数据准备:收集和标注数据集。
  2. 模型训练:使用YOLOv5进行模型训练。
  3. UI设计:使用PyQt5设计用户界面。
  4. 数据库集成:使用MySQL存储检测结果。
  5. 实时检测:集成模型到UI中,实现实时检测。

1. 数据准备

首先,你需要一个包含电动车的数据集。你可以从公开数据集中获取,或者自己采集并标注数据。

标注工具
  • 使用LabelImg等工具进行数据标注。

2. 模型训练

安装YOLOv5
gitclone https://github.com/ultralytics/yolov5.gitcdyolov5 pipinstall-rrequirements.txt
准备配置文件

yolov5目录下创建data.yaml

train:./images/trainval:./images/valtest:./images/testnc:1# number of classesnames:['electric_bicycle']
训练模型
python train.py--img640--batch16--epochs100--datadata.yaml--cfgcfg/training/yolov5s.yaml--weightsyolov5s.pt--nameyolov5s_results

3. UI设计

使用PyQt5设计用户界面。

安装PyQt5
pipinstallPyQt5
创建主窗口
importsysfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialog,QMessageBox,QTableWidget,QTableWidgetItemfromPyQt5.QtGuiimportQPixmap,QImagefromPyQt5.QtCoreimportQTimerimportcv2importnumpyasnpfromultralyticsimportYOLOimportmysql.connectorclassElectricBikeDetection(QMainWindow):def__init__(self):super().__init__()self.initUI()self.model=YOLO('best.pt')# 加载训练好的模型self.db=DatabaseManager("localhost","root","password","detection_db")definitUI(self):self.setWindowTitle("电动车入梯识别系统")self.setGeometry(100,100,800,600)self.label=QLabel(self)self.label.setText("请选择视频文件或打开摄像头")self.label.setAlignment(Qt.AlignCenter)self.button_load=QPushButton("选择文件",self)self.button_load.clicked.connect(self.load_video)self.button_start=QPushButton("开始识别",self)self.button_start.clicked.connect(self.start_detection)self.button_camera=QPushButton("打开摄像头",self)self.button_camera.clicked.connect(self.open_camera)self.button_close_camera=QPushButton("关闭摄像头",self)self.button_close_camera.clicked.connect(self.close_camera)self.table=QTableWidget(self)self.table.setColumnCount(4)self.table.setHorizontalHeaderLabels(["时间","位置","置信度","图片"])layout=QVBoxLayout()layout.addWidget(self.label)layout.addWidget(self.button_load)layout.addWidget(self.button_start)layout.addWidget(self.button_camera)layout.addWidget(self.button_close_camera)layout.addWidget(self.table)container=QWidget()container.setLayout(layout)self.setCentralWidget(container)self.cap=Noneself.timer=Nonedefload_video(self):options=QFileDialog.Options()file_name,_=QFileDialog.getOpenFileName(self,"选择视频文件","","Video Files (*.mp4 *.avi)",options=options)iffile_name:self.video_path=file_name self.cap=cv2.VideoCapture(file_name)self.timer=QTimer(self)self.timer.timeout.connect(self.update_frame)self.timer.start(30)# 每秒更新30帧defstart_detection(self):ifnothasattr(self,'video_path'):QMessageBox.warning(self,"警告","请先选择视频文件!")returnself.button_start.setEnabled(False)self.detect_electric_bikes()defdetect_electric_bikes(self):whileself.cap.isOpened():ret,frame=self.cap.read()ifnotret:breakresults=self.model(frame)annotated_frame=results[0].plot()height,width,channel=annotated_frame.shape bytes_per_line=3*width q_img=QImage(annotated_frame.data,width,height,bytes_per_line,QImage.Format_RGB888).rgbSwapped()self.label.setPixmap(QPixmap.fromImage(q_img))forresultinresults:boxes=result.boxes.xyxy.cpu().numpy()confidences=result.boxes.conf.cpu().numpy()classes=result.boxes.cls.cpu().numpy()forbox,conf,clsinzip(boxes,confidences,classes):x_min,y_min,x_max,y_max=map(int,box)confidence=conf.item()self.db.insert_detection(x_min,y_min,x_max,y_max,confidence)self.update_table()self.app.processEvents()# 更新UIdefupdate_frame(self):ret,frame=self.cap.read()ifnotret:self.timer.stop()self.cap.release()self.button_start.setEnabled(True)returnresults=self.model(frame)annotated_frame=results[0].plot()height,width,channel=annotated_frame.shape bytes_per_line=3*width q_img=QImage(annotated_frame.data,width,height,bytes_per_line,QImage.Format_RGB888).rgbSwapped()self.label.setPixmap(QPixmap.fromImage(q_img))defopen_camera(self):self.cap=cv2.VideoCapture(0)self.timer=QTimer(self)self.timer.timeout.connect(self.update_frame)self.timer.start(30)# 每秒更新30帧defclose_camera(self):ifself.capisnotNone:self.timer.stop()self.cap.release()self.cap=Nonedefupdate_table(self):detections=self.db.get_all_detections()self.table.clearContents()self.table.setRowCount(len(detections))fori,detectioninenumerate(detections):time=detection['time']position=f"({detection['x_min']},{detection['y_min']},{detection['x_max']},{detection['y_max']})"confidence=detection['confidence']image_path=detection['image_path']self.table.setItem(i,0,QTableWidgetItem(time))self.table.setItem(i,1,QTableWidgetItem(position))self.table.setItem(i,2,QTableWidgetItem(f"{confidence:.2f}"))self.table.setItem(i,3,QTableWidgetItem(image_path))if__name__=="__main__":app=QApplication(sys.argv)window=ElectricBikeDetection()window.show()sys.exit(app.exec_())

4. 数据库集成

使用MySQL存储检测结果。

数据库管理 (db_utils.py)
importmysql.connectorclassDatabaseManager:def__init__(self,host,user,password,db_name):self.conn=mysql.connector.connect(host=host,user=user,password=password,database=db_name)self.create_tables()defcreate_tables(self):cursor=self.conn.cursor()cursor.execute(''' CREATE TABLE IF NOT EXISTS detections ( id INT AUTO_INCREMENT PRIMARY KEY, time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, x_min INT, y_min INT, x_max INT, y_max INT, confidence FLOAT, image_path VARCHAR(255) ) ''')self.conn.commit()definsert_detection(self,x_min,y_min,x_max,y_max,confidence,image_path=None):cursor=self.conn.cursor()cursor.execute(''' INSERT INTO detections (x_min, y_min, x_max, y_max, confidence, image_path) VALUES (?, ?, ?, ?, ?, ?) ''',(x_min,y_min,x_max,y_max,confidence,image_path))self.conn.commit()defget_all_detections(self):cursor=self.conn.cursor()cursor.execute('SELECT * FROM detections')returncursor.fetchall()defclose(self):self.conn.close()

5. 实时检测

在上述代码中,我们实现了以下功能:

  • 选择视频文件。
  • 开始识别按钮触发检测过程。
  • 打开和关闭摄像头。
  • 实时显示检测结果。
  • 将检测结果存储到MySQL数据库中。

总结

仅供参考,同学构建一个基于YOLOv5s的电动车入梯识别系统。这个系统包括数据准备、模型训练、UI设计、数据库集成和实时检测等功能。

http://www.jsqmd.com/news/1002096/

相关文章:

  • 手把手实战CANN ascend-transformer-boost:Transformer推理在昇腾NPU上的极致优化
  • 114、【Agent】【OpenCode】项目配置(package.json 和 bun.lock)
  • 2026年液压升降机与简易货梯选购指南:广州、东莞、绵阳三家厂商多维实测对比 - 优质品牌商家
  • AI写专著新突破!一键生成20万字专著,解决写作难题!
  • 售前获客新玩法:AI售前智能体如何依托知识库提升转化
  • WASM + WebGPU:浏览器端大模型推理的 Rust 加速方案
  • 深度实践CANN HCCL集合通信库:多卡并行训练中的通信优化与问题排查
  • MPC8245经典SoC解析:从PowerPC架构到高集成嵌入式系统设计
  • Windows 11 LTSC 24H2一键恢复微软商店的终极教程
  • VC6平台MFC写的排序算法动态演示工具(冒泡/插入/希尔/堆排)
  • 7-Zip-zstd:如何选择最佳压缩算法实现性能提升
  • 神经网络进化核方法:时间依赖PDE求解新框架
  • 前端微前端架构选型:Module Federation 与 qiankun 的对比实践
  • 2026年上海静安区正规金条回收+银条回收机构推荐 - 沪上贵金属口碑推荐官
  • 构建之法阅读笔记 10
  • DataX不只是同步工具:聊聊它的插件化架构与二次开发入门
  • 从DSP56002/L002看经典DSP架构:哈佛结构、24位MAC与实时信号处理实战
  • 性能对比怎么避免“幻觉”:Claude 4.8 的对齐基准
  • LLM 驱动的前端组件文档生成:从代码到 API 文档的自动化
  • 魔都购宠避雷王!浦东/闵行/徐汇三店直营,专治上海星期宠、皮肤病两大噩梦 - 萌宠俱乐部
  • 2026年304不锈钢板供应商综合能力分析:从材料体系到交付服务,谁更值得关注? - 优质品牌商家
  • Rust 的 newtype 模式与类型状态编程:用类型系统编码业务规则
  • 贝叶斯推断中的MNAR偏差:当缺失数据悄悄扭曲后验分布
  • 解锁群晖Photos人脸识别:无需GPU的智能照片管理方案
  • 3步解锁原神帧率限制:免费提升游戏流畅度的完整指南
  • 从游戏到AI:聊聊不同GPU架构(V100/A100/4090)下grid和block配置的实战差异
  • 2026整体卫浴供应厂家专业实力考察:江苏上海山东源头企业,集成卫浴/酒店卫生间/旧改无障碍卫浴品牌精析 - 品牌发掘
  • 手把手实战CANN catlass算子模板库:从模板实例化到NPU性能调优
  • 星露谷物语模组加载器SMAPI:让你的农场冒险无限扩展
  • 【2026年7~8月学术会议大合集】 名校主办/高知名度/快速完成检索/多学科主题,建议收藏!