from PyQt5 import QtWidgets
from csdn import Ui_Form # 确保这个 import 路径和类名正确
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QListWidget, QListWidgetItem
from PyQt5.QtGui import QImage, QPixmap, QIcon
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt, QTimer, QSize
from PyQt5.QtWidgets import QApplication
import cv2
from PyQt5.QtGui import QImage, QPixmap
from PyQt5.QtWidgets import QGraphicsPixmapItem, QGraphicsScene
import numpy as np
from PIL import Image, ImageDraw, ImageFont
from PyQt5.QtCore import QTimer
import datetime
from ultralytics import YOLO
from PIL import Image, ImageDraw, ImageFont
import numpy as np
import math
class mywindow(QtWidgets.QWidget, Ui_Form):
def __init__(self):
super(mywindow, self).__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.read_file)
self.pushButton_4.clicked.connect(self.open_video)
self.pushButton_2.clicked.connect(self.close_video)
self.pushButton_5.clicked.connect(self.open_rtsp_stream)
self.listWidget.itemClicked.connect(self.display_image_popup)
self.pushButton_6.clicked.connect(self.batch_detect)
# Load a pretrained YOLOv8n-pose Pose model
self.model = YOLO('20000/best.pt')
self.class_names = ["裂缝", "井盖", "龟裂", "坑洼", "裂缝修补","龟裂修补", "坑洼修补"]
self.video_capture = None
self.current_frame = 0
self.timer = QTimer(self) # 用于处理视频帧的计时器
self.timer.timeout.connect(self.process_frame)
# 初始化事件记录时间字典和记录间隔
self.last_event_time = {}
self.event_record_interval = 5 # 事件记录的时间间隔,单位为秒
self.event_detected = False
def open_video(self):
filename, _ = QFileDialog.getOpenFileName(self, "打开视频", "./", "Video Files (*.mp4 *.avi *.ts)")
if not filename:
return
self.is_read = 0
self.video_capture = cv2.VideoCapture(filename)
if not self.video_capture.isOpened():
QMessageBox.critical(self, "错误", "无法打开视频文件。")
return
self.timer.start(30)
def close_video(self):
if self.timer.isActive():
self.timer.stop() # 停止计时器
if self.video_capture and self.video_capture.isOpened():
self.video_capture.release() # 释放视频资源
self.video_capture = None # 将 video_capture 设置为 None 确保完全关闭
self.graphicsView.setScene(None) # 清除显示的图像
self.is_read = 0 # 重置读取状态标记
self.current_frame = 0 # 重置帧计数器
def open_rtsp_stream(self):
rtsp_url = self.lineEdit.text()
if not rtsp_url:
QMessageBox.warning(self, "错误", "请输入RTSP流的URL。")
return
self.is_read = 2
self.video_capture = cv2.VideoCapture(rtsp_url)
if not self.video_capture.isOpened():
QMessageBox.critical(self, "错误", "无法打开RTSP流。")
return
self.timer.start(30)
def batch_detect(self):
folder_path = QFileDialog.getExistingDirectory(self, "选择图片文件夹", "./")
if not folder_path:
return
import os
images = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if f.endswith(('.png', '.jpg', '.jpeg'))]
for image_path in images:
image = cv2.imread(image_path)
if image is None:
continue
results = self.model(image)
self.display_image(image, results)
QApplication.processEvents() # 处理界面更新事件
##############################注意:在此设置检测间隔##################
def process_frame(self):
skip_frames = 25 # 每隔 25 帧进行一次检测
ret, frame = self.video_capture.read()
if not ret:
self.close_video()
return
# 检查当前帧是否为检测帧
if self.current_frame % (skip_frames + 1) == 0:
results = self.model(frame) # 使用模型进行检测
self.display_image(frame, results) # 显示检测结果
else:
self.display_frame(frame) # 只显示帧,不进行检测
self.current_frame += 1 # 更新帧计数器
def display_frame(self, frame):
# 将帧从 BGR 转换为 RGB,因为 QImage 需要 RGB
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 转换到 QImage 对象
height, width, channel = img.shape
bytesPerLine = 3 * width
qImage = QImage(img.data, width, height, bytesPerLine, QImage.Format_RGB888)
pixmap = QPixmap.fromImage(qImage)
# 显示到 QGraphicsView
item = QGraphicsPixmapItem(pixmap)
scene = QGraphicsScene()
scene.addItem(item)
self.graphicsView.setScene(scene)
def read_file(self):
if self.video_capture and self.video_capture.isOpened():
QMessageBox.warning(self, "警告", "请先关闭当前的视频或视频流检测。")
return
filename, _ = QFileDialog.getOpenFileName(self, "选取文件", "./", "Images (*.png *.jpeg *.jpg)")
if not filename:
return
self.is_read = 1 # 标记为图片处理
image = cv2.imread(filename)
if image is None:
QMessageBox.critical(self, "错误", "无法读取图像文件。")
return
results = self.model(image) # results list
self.display_image(image, results)
def display_image(self, image, results):
img = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
xyxy = results[0].boxes.xyxy.cpu().numpy() # 边界框坐标
confs = results[0].boxes.conf.cpu().numpy() # 置信度
classes = results[0].boxes.cls.cpu().numpy()# 类别索引
# 使用 Pillow 绘制检测结果
frame_pil = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(frame_pil)
font = ImageFont.truetype("simsun.ttc", 30) # 确保你有这个字体文件
R= 0 #过滤条件
p=[]
for (box, conf, cls_id) in zip(xyxy, confs, classes):
x1, y1, x2, y2 = map(int, box)
cls_name = self.class_names[int(cls_id)] # 使用中文标签
label = f"{cls_name} {conf:.2f}"
if cls_id in [0,2,3] and conf>=0.3:
p.append(cls_name)
# 绘制边界框
draw.rectangle([x1, y1, x2, y2], outline="red", width=4)
# 绘制文本
draw.text((x1, y1 - 30), label, font=font, fill="yellow")
R = 1
# 转换回 OpenCV 格式并显示
image = cv2.cvtColor(np.array(frame_pil), cv2.COLOR_RGB2BGR)
if R==1:
image1 = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 将图像保存
current_time = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")
thumbnail_path = f'picture/{current_time}.jpg'
cv2.imwrite(thumbnail_path, image1) # 保存缩略图
p = list(set(p)) # 去重
classes_string = ", ".join(p) # 用逗号连接类名
self.update_list_widget(classes_string, thumbnail_path) # 更新列表
# Convert to Qt image format
height, width, channel = image.shape
bytesPerLine = 3 * width
qImage = QImage(image.data, width, height, bytesPerLine, QImage.Format_RGB888)
pixmap = QPixmap.fromImage(qImage)
self.item = QGraphicsPixmapItem(pixmap)
self.scene = QGraphicsScene()
self.scene.addItem(sel
没有合适的资源?快使用搜索试试~ 我知道了~
yolov8实战第九天-pyqt5-yolov8实现道路病害识别系统(环境配置+完整代码+代码使用说明+训练好的模型+数据集)
![preview](https://csdnimg.cn/release/downloadcmsfe/public/img/white-bg.ca8570fa.png)
共2000个文件
xml:1996个
txt:2个
py:2个
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 161 浏览量
2024-05-23
17:32:15
上传
评论
收藏 833.21MB ZIP 举报
温馨提示
基于 pyqt5-yolov8实现道路病害识别系统,包括图片识别,批量图片识别,视频识别,视频流识别。包括数据集,完整部署代码,代码使用说明。详细:https://blog.csdn.net/qq_34717531/article/details/139137267?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139137267%22%2C%22source%22%3A%22qq_34717531%22%7D 系统提供两种方式获取视频输入:本地视频文件、实时视频流(rtsp、rtmp等)。对应视频/视频流检测,我们设置了过滤机制,以避免数据的频繁写入的问题。还设计了优秀的历史记录栏,可以放入检测到的问题图片缩略图,并且点击记录栏,可以弹出标注好信息的图片。该系统利用先进的深度学习技术和图形用户界面设计,为用户提供了一个高效且直观的行为监测工具。实验结果表明,系统能够在多种环境下准确地识别出道路病害,显示出优异的实时性能和较低的误报率,可直接工程应用。
资源推荐
资源详情
资源评论
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
收起资源包目录
![package](https://csdnimg.cn/release/downloadcmsfe/public/img/package.f3fc750b.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/TXT.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
![file-type](https://csdnimg.cn/release/download/static_files/pc/images/minetype/UNKNOWN.png)
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/2241f086a97c494bbe8bb61a420ea8a8_qq_34717531.jpg!1)
学术菜鸟小晨
- 粉丝: 1w+
- 资源: 5001
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)