当前位置: 首页 > 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.zskr.cn/news/1513875.html

相关文章:

  • 售前获客新玩法:AI售前智能体如何依托知识库提升转化
  • VC6平台MFC写的排序算法动态演示工具(冒泡/插入/希尔/堆排)
  • 前端微前端架构选型:Module Federation 与 qiankun 的对比实践
  • LLM 驱动的前端组件文档生成:从代码到 API 文档的自动化
  • 魔都购宠避雷王!浦东/闵行/徐汇三店直营,专治上海星期宠、皮肤病两大噩梦 - 萌宠俱乐部
  • 3步解锁原神帧率限制:免费提升游戏流畅度的完整指南
  • 解锁群晖Photos人脸识别:无需GPU的智能照片管理方案
  • 贝叶斯推断中的MNAR偏差:当缺失数据悄悄扭曲后验分布
  • 星露谷物语模组加载器SMAPI:让你的农场冒险无限扩展
  • 2026整体卫浴供应厂家专业实力考察:江苏上海山东源头企业,集成卫浴/酒店卫生间/旧改无障碍卫浴品牌精析 - 品牌发掘
  • 手把手实战CANN catlass算子模板库:从模板实例化到NPU性能调优
  • 【2026年7~8月学术会议大合集】 名校主办/高知名度/快速完成检索/多学科主题,建议收藏!
  • 计算机毕业设计之停车场管理系统
  • 2026年GEO服务商选型全景指南:全意图GEO如何成为企业AI搜索优化的新标准? - GEO优化
  • 数据科学实习生存指南:23家高价值机会的技术穿透清单
  • MATLAB实现GPS+IMU紧耦合导航:带反馈校正的EKF定位代码包
  • 计算机毕业设计之图书点评网的设计与实现
  • WarcraftHelper终极指南:5大功能让魔兽争霸3在现代电脑完美运行
  • 反向海淘货源采集模块技术实现与反爬避坑方案
  • Zotero插件市场:如何在3分钟内打造你的高效学术工具箱
  • 2026年6月靠谱的山东到中亚五国物流中心推荐指南:浙江卡万启、青岛宏源通达、青岛驿路顺通、青岛浩瀚远洋、哈尔滨运明公司选择指南 - 海棠依旧大
  • 2026国产全自动咖啡机排名及选择指南 - 品牌排行榜
  • 2026新高考全国I卷数学 完整真题+逐题解析(湖南考生专用)
  • QuickBMS终极指南:如何轻松解密和提取200+游戏文件格式
  • 文字转手写工具:3分钟让数字文字拥有手写温度的神奇魔法
  • 别再算错了!深入SAP FI后台,看懂外币清账时汇兑损益的自动计算逻辑
  • 工装 T 恤、Polo 衫全生产工序、痛点解析及多品牌自动化设备应用方案
  • 终极B站内容监控指南:三步实现UP主动态追踪与直播提醒
  • 别再死记硬背了!用Wireshark抓包实战,带你彻底搞懂TCP和UDP的区别
  • 如何解决Windows 10 PL2303停产芯片驱动兼容性挑战:pl2303-win10方案深度解析