文章前瞻:优质数据集与检测系统精选

点击链接:更多数据集与系统目录清单

数据集与检测系统 数据集与检测系统
基于深度学习的道路积水检测系统 基于深度学习的道路垃圾检测系统
基于深度学习的道路裂缝检测系统 基于深度学习的道路交通事故检测系统
基于深度学习的道路病害检测系统 基于深度学习的道路积雪结冰检测系统
基于深度学习的汽车车牌检测系统 基于深度学习的井盖丢失破损检测系统
基于深度学习的行人车辆检测系统 基于深度学习的航拍行人检测系统
基于深度学习的车辆分类检测系统 基于深度学习的电动车头盔佩戴检测系统
基于深度学习的交通信号灯检测系统 基于深度学习的共享单车违停检测系统
基于深度学习的摆摊占道经营检测系统 基于深度学习的人员游泳溺水检测系统
基于深度学习的航拍水面垃圾检测系统 基于深度学习的水面垃圾检测系统
基于深度学习的水面船舶分类检测系统 基于深度学习的海洋垃圾检测系统
基于深度学习的救生衣穿戴检测系统 基于深度学习的海洋生物检测系统
基于深度学习的人员吸烟检测系统 基于深度学习的口罩佩戴检测系统
基于深度学习的烟雾和火灾检测系统 基于深度学习的人员睡岗玩手机检测系统
基于深度学习的人员摔倒检测系统 基于深度学习的人员姿势检测系统(站坐躺摔倒)
基于深度学习的工地安全穿戴检测系统 基于深度学习的安全帽检测系统
基于深度学习的反光背心穿戴检测系统 基于深度学习的吸烟玩手机行为检测系统
基于深度学习的工地挖掘机检测系统 基于深度学习的工地工程车检测系统
基于深度学习的人体手势检测系统 基于深度学习的消防灭火器检测系统
基于深度学习的人员高空作业检测系统 基于深度学习的水果分类检测系统
基于深度学习的农作物病害检测系统 基于深度学习的水稻病害检测系统
基于深度学习的害虫检测系统 基于深度学习的蓝莓成熟度检测系统
基于深度学习的草莓成熟度检测系统 基于深度学习的食品分类检测系统
基于深度学习的光伏板缺陷检测系统 基于深度学习的航拍光伏板检测系统
基于深度学习的建筑垃圾废料检测系统 基于深度学习的可回收/不可回收垃圾检测系统
基于深度学习的垃圾分类检测系统 基于深度学习的猪只行为动作检测系统
基于深度学习的动物分类检测系统 基于深度学习的明厨亮灶鼠患检测系统
基于深度学习的猫狗分类检测系统 基于深度学习的服饰分类检测系统
基于深度学习的电动车进电梯检测系统 基于深度学习的无人机设备检测系统
基于深度学习的树木倒塌检测系统 基于深度学习的电线杆杂物检测系统
基于深度学习的航拍树木检测系统 基于深度学习的学生课堂行为检测系统
基于深度学习的家具分类检测系统 基于深度学习的武器刀具检测系统

一、数据集介绍

【数据集】占道经营识别数据集 5231 张,目标检测,包含YOLO/VOC格式标注。

数据集中包含1种分类:names: ['road-occupy'],代表占道经营

数据集来自国内外图片网站、视频抽帧、自采等;

可用于监控下占道经营检测等。

检测场景为城市街道、步行道等,可用于城管精准执法、交通拥堵预防,应急通道保障等。

文章底部或主页私信获取数据集~ 

1、数据概述

占道经营识别的重要性

路面占道经营(如流动摊贩占用人行道、商户出店经营)是城市管理顽疾:轻则挤占行人空间、阻碍非机动车通行,导致早晚高峰路段拥堵率上升 30% 以上;重则遮挡交通标识、占用消防通道,引发剐蹭事故或延误应急救援,某城市数据显示占道相关事故占道路事故总数 12%。​

传统管理依赖人工巡查,存在三大短板:一是巡查范围有限,1 名城管队员日均仅覆盖 2-3 条街道,易出现 “巡查时撤离、撤离后回潮” 的游击式占道;二是取证难度大,占道行为多为临时搭建,人工拍摄取证易因角度、时机问题导致证据效力不足;三是响应滞后,市民投诉后需 1-2 小时派单处置,难以及时制止占道。​

YOLO 算法恰好破解上述痛点:其一,依托监控摄像头可实现 24 小时实时检测,对占道摊贩、出店货架的识别准确率超 90%,1 个监控点位可覆盖 1 公里路段,效率较人工提升 5 倍;其二,能自动抓拍占道画面、记录时间地点,生成带坐标的证据链,降低取证难度;其三,检测到占道后可实时推送预警至城管终端,响应时间缩短至 15 分钟内,实现 “发现即处置”,为城市精细化管理提供技术支撑。

基于YOLO的占道经营识别算法

  1. 城管精准执法:YOLO 实时识别占道行为并定位具体位置,城管队员可按预警信息精准到场处置,避免盲目巡查,某试点区域应用后,占道处置效率提升 60%,重复占道率下降 45%。​

  2. 交通拥堵预防:在学校、医院周边等易占道路段,YOLO 提前检测占道苗头(如摊贩推车占道),联动交通协管员提前干预,减少因占道导致的拥堵,某医院周边早高峰通行效率提升 25%。​

  3. 应急通道保障:针对小区、商圈周边的消防通道,YOLO 可识别占道车辆、摊贩,实时触发声光预警并通知物业、消防部门,确保通道畅通,某小区应用后消防通道占用率从 28% 降至 5% 以下。​

  4. 长效监管分析:通过 YOLO 积累占道数据,可分析高频占道路段、时段(如菜市场周边早 6-8 点),指导城管部门调整巡查频次,制定针对性管控方案,实现从 “被动处置” 到 “主动预防” 的转变。

该数据集含有 5231 张图片,包含Pascal VOC XML格式和YOLO TXT格式,用于训练和测试城管精准执法、交通拥堵预防,应急通道保障等场景的占道经营识别情况

图片格式为jpg格式,标注格式分别为:

YOLO:txt

VOC:xml

数据集均为手工标注,保证标注精确度。

2、数据集文件结构

road-Business/

——test/

————Annotations/

————images/

————labels/

——train/

————Annotations/

————images/

————labels/

——valid/

————Annotations/

————images/

————labels/

——data.yaml

  • 该数据集已划分训练集样本,分别是:test目录(测试集)、train目录(训练集)、valid目录(验证集);
  • Annotations文件夹为Pascal VOC格式的XML文件 ;
  • images文件夹为jpg格式的数据样本;
  • labels文件夹是YOLO格式的TXT文件;
  • data.yaml是数据集配置文件,包含占道经营检测的目标分类和加载路径。

Annotations目录下的xml文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
	<annotation>
		<folder>driving_annotation_dataset</folder>
		<filename>100768.jpg</filename>
		<size>
			<width>640</width>
			<height>480</height>
			<depth>3</depth>
		</size>
		<object>
			<name>road-occupy</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>536</xmin>
				<ymin>40</ymin>
				<xmax>641</xmax>
				<ymax>283</ymax>
			</bndbox>
		</object>
		<object>
			<name>road-occupy</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>2</xmin>
				<ymin>35</ymin>
				<xmax>247</xmax>
				<ymax>362</ymax>
			</bndbox>
		</object>
	</annotation>

 labels目录下的txt文件内容如下:

0 0.5 0.4013888888888889 1.0 0.7916666666666666

3、数据集适用范围 

  • 目标检测场景
  • yolo训练模型或其他模型
  • 城市街道、步行道等场景占道经营识别
  • 可用于城管精准执法、交通拥堵预防,应急通道保障等

4、数据集标注结果 

​​        

4.1、数据集内容 

  1. 多角度场景:包含行人视角,平面视角;
  2. 标注内容:names: ['road-occupy'],总计1个分类;
  3. 图片总量:5231 张图片数据;
  4. 标注类型:含有Pascal VOC XML格式和yolo TXT格式;

5、训练过程

5.1、导入训练数据

下载YOLOv8项目压缩包,解压在任意本地workspace文件夹中。

下载YOLOv8预训练模型,导入到ultralytics-main项目根目录下。

​​​​

ultralytics-main项目根目录下,创建data文件夹,并在data文件夹下创建子文件夹:Annotations、images、imageSets、labels,其中,将pascal VOC格式的XML文件手动导入到Annotations文件夹中,将JPG格式的图像数据导入到images文件夹中,imageSets和labels两个文件夹不导入数据。

data目录结构如下:

data/

——Annotations/   //存放xml文件

——images/          //存放jpg图像

——imageSets/

——labels/

整体项目结构如下所示:

5.2、数据分割

首先在ultralytics-main目录下创建一个split_train_val.py文件,运行文件之后会在imageSets文件夹下将数据集划分为训练集train.txt、验证集val.txt、测试集test.txt,里面存放的就是用于训练、验证、测试的图片名称。

import os
import random

trainval_percent = 0.9
train_percent = 0.9
xmlfilepath = 'data/Annotations'
txtsavepath = 'data/ImageSets'
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

ftrainval = open('data/ImageSets/trainval.txt', 'w')
ftest = open('data/ImageSets/test.txt', 'w')
ftrain = open('data/ImageSets/train.txt', 'w')
fval = open('data/ImageSets/val.txt', 'w')

for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

5.3、数据集格式化处理

在ultralytics-main目录下创建一个voc_label.py文件,用于处理图像标注数据,将其从XML格式(通常用于Pascal VOC数据集)转换为YOLO格式。

convert_annotation函数

  • 这个函数读取一个图像的XML标注文件,将其转换为YOLO格式的文本文件。

  • 它打开XML文件,解析树结构,提取图像的宽度和高度。

  • 然后,它遍历每个目标对象(object),检查其类别是否在classes列表中,并忽略标注为困难(difficult)的对象。

  • 对于每个有效的对象,它提取边界框坐标,进行必要的越界修正,然后调用convert函数将坐标转换为YOLO格式。

  • 最后,它将类别ID和归一化后的边界框坐标写入一个新的文本文件。

import xml.etree.ElementTree as ET
import os
from os import getcwd

sets = ['train', 'val', 'test']
classes = ['road-occupy'] # 根据标签名称填写类别
abs_path = os.getcwd()
print(abs_path)


def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = (box[0] + box[1]) / 2.0 - 1
    y = (box[2] + box[3]) / 2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return x, y, w, h


def convert_annotation(image_id):
    in_file = open('data/Annotations/%s.xml' % (image_id), encoding='UTF-8')
    out_file = open('data/labels/%s.txt' % (image_id), 'w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text),
             float(xmlbox.find('xmax').text),
             float(xmlbox.find('ymin').text),
             float(xmlbox.find('ymax').text))
        b1, b2, b3, b4 = b
        # 标注越界修正
        if b2 > w:
            b2 = w
        if b4 > h:
            b4 = h
        b = (b1, b2, b3, b4)
        bb = convert((w, h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')


wd = getcwd()
for image_set in sets:
    if not os.path.exists('data/labels/'):
        os.makedirs('data/labels/')
    image_ids = open('data/ImageSets/%s.txt' % (image_set)).read().strip().split()
    list_file = open('data/%s.txt' % (image_set), 'w')
    for image_id in image_ids:
        list_file.write(abs_path + '/data/images/%s.jpg\n' % (image_id))
        convert_annotation(image_id)
    list_file.close()

5.4、修改数据集配置文件

在ultralytics-main目录下创建一个data.yaml文件,修改标签个数nc和标签名称names

train: data/train.txt
val: data/val.txt
test: data/test.txt

nc: 1
names: ['road-occupy']

5.5、执行命令

执行train.py

model = YOLO('yolov8s.pt')
results = model.train(data='data.yaml', epochs=200, imgsz=640, batch=16, workers=0)

也可以在终端执行下述命令:

yolo train data=data.yaml model=yolov8s.pt epochs=200 imgsz=640 batch=16 workers=0 device=0

5.6、模型预测 

你可以选择新建predict.py预测脚本文件,输入视频流或者图像进行预测。

代码如下:

import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("./best.pt") # 自定义预测模型加载路径

# Open the video file
video_path = "./demo.mp4" # 自定义预测视频路径
cap = cv2.VideoCapture(video_path) 

# Get the video properties
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # Be sure to use lower case
out = cv2.VideoWriter('./outputs.mp4', fourcc, fps, (frame_width, frame_height)) # 自定义输出视频路径

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 inference on the frame
        # results = model(frame)
        results = model.predict(source=frame, save=True, imgsz=640, conf=0.5)

        results[0].names[0] = "道路积水"
        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Write the annotated frame to the output file
        out.write(annotated_frame)

        # Display the annotated frame (optional)
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture and writer objects
cap.release()
out.release()
cv2.destroyAllWindows()

也可以直接在命令行窗口或者Annoconda终端输入以下命令进行模型预测:

yolo predict model="best.pt" source='demo.jpg'

6、获取数据集 

文章底部或主页私信获取数据集~ 

二、基于QT的目标检测可视化界面

1、环境配置

# 安装torch环境
pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装PySide6依赖项
pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装opencv-python依赖项
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple

2、使用说明

​​​​​

界面功能介绍:

  • 原视频/图片区:上半部分左边区域为原视频/图片展示区;
  • 检测区:上半部分右边区域为检测结果输出展示区
  • 文本框:打印输出操作日志,其中告警以json格式输出,包含标签框的坐标,标签名称等
  • 加载模型:下拉框绑定本地文件路径,按钮加载路径下的模型文件;
  • 置信度阈值自定义检测区的置信度阈值,可以通过滑动条的方式设置
  • 文件上传:选择目标文件,包含JPG格式和MP4格式
  • 开始检测:执行检测程序;
  • 停止:终止检测程序;

 3、预测效果展示

3.1、图片检测

​​​​​

切换置信度再次执行:

​​​​​

上图左下区域可以看到json格式的告警信息,用于反馈实际作业中的管理系统,为管理员提供道路养护决策 。

3.2、视频检测 

​​​​​

3.3、日志文本框

4、前端代码 

class MyWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.init_gui()
        self.model = None
        self.timer = QtCore.QTimer()
        self.timer1 = QtCore.QTimer()
        self.cap = None
        self.video = None
        self.file_path = None
        self.base_name = None
        self.timer1.timeout.connect(self.video_show)

    def init_gui(self):
        self.folder_path = "model_file"  # 自定义修改:设置文件夹路径
        self.setFixedSize(1300, 650)
        self.setWindowTitle('目标检测')  # 自定义修改:设置窗口名称
        self.setWindowIcon(QIcon("111.jpg"))  # 自定义修改:设置窗口图标
        central_widget = QtWidgets.QWidget(self)
        self.setCentralWidget(central_widget)
        main_layout = QtWidgets.QVBoxLayout(central_widget)

        # 界面上半部分: 视频框
        topLayout = QtWidgets.QHBoxLayout()
        self.oriVideoLabel = QtWidgets.QLabel(self)
        
        # 界面下半部分: 输出框 和 按钮
        groupBox = QtWidgets.QGroupBox(self)
        groupBox.setStyleSheet('QGroupBox {border: 0px solid #D7E2F9;}')
        bottomLayout = QtWidgets.QHBoxLayout(groupBox)
        main_layout.addWidget(groupBox)
        btnLayout = QtWidgets.QHBoxLayout()
        btn1Layout = QtWidgets.QVBoxLayout()
        btn2Layout = QtWidgets.QVBoxLayout()
        btn3Layout = QtWidgets.QVBoxLayout()

        # 创建日志打印文本框
        self.outputField = QtWidgets.QTextBrowser()
        self.outputField.setFixedSize(530, 180)
        self.outputField.setStyleSheet('font-size: 13px; font-family: "Microsoft YaHei"; background-color: #f0f0f0; border: 2px solid #ccc; border-radius: 10px;')
        self.detectlabel = QtWidgets.QLabel(self)
        self.oriVideoLabel.setFixedSize(530, 400)
        self.detectlabel.setFixedSize(530, 400)
        self.oriVideoLabel.setStyleSheet('border: 2px solid #ccc; border-radius: 10px; margin-top:75px;')
        self.detectlabel.setStyleSheet('border: 2px solid #ccc; border-radius: 10px; margin-top: 75px;')
        topLayout.addWidget(self.oriVideoLabel)
        topLayout.addWidget(self.detectlabel)
        main_layout.addLayout(topLayout)

5、代码获取

YOLO可视化界面

 更多其他数据集点击这里!

注:以上均为原创内容,转载请私聊!!!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐