生活垃圾数据集(YOLO版)
文章目录
- 1、数据集介绍
- 1.1、数据集图片组成
- 2.1、获取数据集方式
- 2、扩展代码
- 2.1、文件结构树
- 2.2、划分数据集
- 2.3、获取数据集文件名字
- 2.4、文件成功对应检测
- 3、其他文章
1、数据集介绍
1.1、数据集图片组成
- 【有害垃圾】:电池(1 号、2 号、5 号)、过期药品或内包装等;
- 【可回收垃圾】:易拉罐、小号矿泉水瓶;
- 【厨余垃圾】:小土豆、切过的白萝卜、胡萝卜,尺寸为电池大小;
- 【其他垃圾】:瓷片、鹅卵石(小土豆大小)、砖块等。
部分类别图片展示:
| | |
文件结构:
----ImageSet\|----classes.txt # 标签种类|----data-txt\ # 数据集文件集合| |----test.txt| |----train.txt| |----val.txt|----images\ # 数据集图片| |----test\| | |----fimg_23.jpg| | |----fimg_38.jpg| | |----.....| |----train\| | |----fimg_1.jpg| | |----fimg_2.jpg| | |----.....| |----val\| | |----fimg_4.jpg| | |----fimg_6.jpg| | |----.....|----labels\ # yolo标签| |----test\| | |----fimg_23.txt| | |----fimg_38.txt| | |----.....| |----train\| | |----fimg_1.txt| | |----fimg_2.txt| | |----.....| |----val\| | |----fimg_4.txt| | |----fimg_6.txt| | |----.....
2.1、获取数据集方式
点击这里:下载本文生活垃圾数据集
2、扩展代码
2.1、文件结构树
draw-tree.py
from pathlib import Path
import ostree_str = ''
def generate_tree(pathname, n=0):global tree_strif pathname.is_file():tree_str += ' |' * n + '-' * 4 + pathname.name + '\n'elif pathname.is_dir():tree_str += ' |' * n + '-' * 4 + \str(pathname.relative_to(pathname.parent)) + '\\' + '\n'for cp in pathname.iterdir():generate_tree(cp, n + 1)if __name__ == '__main__':path=os.getcwd()+'/ImageSet' # 查看当前ImageSet目录下的文件树generate_tree(Path(path), 0)print(tree_str)
2.2、划分数据集
split-data.py
import os, shutil, random
from tqdm import tqdm"""
标注文件是yolo格式(txt文件)
训练集:验证集:测试集 (7:2:1)
"""def split_img(current_path,img_path, label_path, split_list):try:Data = current_path+'/ImageSets'# Data是你要将要创建的文件夹路径(路径一定是相对于你当前的这个脚本而言的)# os.mkdir(Data)train_img_dir = Data + '/images/train'val_img_dir = Data + '/images/val'test_img_dir = Data + '/images/test'train_label_dir = Data + '/labels/train'val_label_dir = Data + '/labels/val'test_label_dir = Data + '/labels/test'# 创建文件夹os.makedirs(train_img_dir)os.makedirs(train_label_dir)os.makedirs(val_img_dir)os.makedirs(val_label_dir)os.makedirs(test_img_dir)os.makedirs(test_label_dir)except:print('文件目录已存在')train, val, test = split_listall_img = os.listdir(img_path)all_img_path = [os.path.join(img_path, img) for img in all_img]train_img = random.sample(all_img_path, int(train * len(all_img_path)))train_img_copy = [os.path.join(train_img_dir, img.split('\\')[-1]) for img in train_img]train_label = [toLabelPath(img, label_path) for img in train_img]train_label_copy = [os.path.join(train_label_dir, label.split('\\')[-1]) for label in train_label]for i in tqdm(range(len(train_img)), desc='train ', ncols=80, unit='img'):_copy(train_img[i], train_img_dir)_copy(train_label[i], train_label_dir)all_img_path.remove(train_img[i])val_img = random.sample(all_img_path, int(val / (val + test) * len(all_img_path)))val_label = [toLabelPath(img, label_path) for img in val_img]for i in tqdm(range(len(val_img)), desc='val ', ncols=80, unit='img'):_copy(val_img[i], val_img_dir)_copy(val_label[i], val_label_dir)all_img_path.remove(val_img[i])test_img = all_img_pathtest_label = [toLabelPath(img, label_path) for img in test_img]for i in tqdm(range(len(test_img)), desc='test ', ncols=80, unit='img'):_copy(test_img[i], test_img_dir)_copy(test_label[i], test_label_dir)def _copy(from_path, to_path):shutil.copy(from_path, to_path)def toLabelPath(img_path, label_path):img = img_path.split('\\')[-1]label = img.split('.jpg')[0] + '.txt'return os.path.join(label_path, label)if __name__ == '__main__':current_path=os.current_path()img_path = current_path+'/images' # 你的图片存放的路径(路径一定是相对于你当前的这个脚本文件而言的)label_path = current_path+'/labels' # 你的txt文件存放的路径(路径一定是相对于你当前的这个脚本文件而言的)split_list = [0.7, 0.2, 0.1] # 数据集划分比例[train:val:test]split_img(current_path,img_path, label_path, split_list)
2.3、获取数据集文件名字
list_name.py
import os"""
整体目录
----ImageSets\|----images\ | |----test\ | |----train\| |----val\ |----labels\ | |----test\ | |----train\| |----val\
"""def generate(current_path):# 存放图片的路径 这里images下面分别有train,test和val文件夹for item in os.listdir(current_path):files_path=current_path+'/'+itemfiles = os.listdir(files_path) # 全部的图片名称files.sort()print'****************'print'input :', itemprint'start...'# 打开train.txtitem_txt='ImageSets/data-txt/'+item+'.txt'listText = open(item_txt, 'a')for file in files:# 具体图片存放路径,如 data/images/train/1.jpgname = 'data/images/'+item+'/'+file + '\n'listText.write(name)listText.close()print'down!'print'****************'if __name__ == '__main__':current_path=os.getcwd()+'/ImageSets/images' # # 查看当前ImageSet\images目录下各个文件的名字generate(current_path)
2.4、文件成功对应检测
del-error-files.py
用于获取数据集文件后,检测images文件和labels文件是否都一一对应上。
创建.py文件放在mages文件和labels同目录下运行
import oscurrentPath=os.getcwd()
currentPath=currentPath
print(currentPath)
labelArray=[]
imagesArray=[]def split_extension(fileName):return fileName.split('.')[0]print('自检程序启动!查找到labels目录下异常文件:')
error_label_names = []
for la_name in os.listdir('labels'):la_name = split_extension(la_name)is_exists = Falsefor im_name in os.listdir('images'):im_name = split_extension(im_name)if la_name == im_name:is_exists = Trueif not is_exists:error_la_name = la_name + '.txt'error_label_names.append(error_la_name)labelArray.append(error_la_name)print(error_la_name)print('自检程序启动!查找到images目录下异常文件:')
error_image_names = []
for im_name in os.listdir('images'):im_name = split_extension(im_name)is_exists = Falsefor la_name in os.listdir('labels'):la_name = split_extension(la_name)if la_name == im_name:is_exists = Trueif not is_exists:error_im_name = im_name + '.jpg'error_image_names.append(error_im_name)print(error_im_name)imagesArray.append(error_im_name)# 自动删除文件
def delLabels():for item in labelArray:labelPath=currentPath+'/labels/'+itemos.remove(labelPath)print(labelPath+'\t'+'删除成功')def delImages():for item in imagesArray:imagesPath=currentPath+'/images/'+itemos.remove(imagesPath)print(imagesPath+'\t'+'删除成功') if __name__ == '__main__':delLabels()delImages()
3、其他文章
- 双向控制舵机(树莓派版)
- YOLOv5s网络模型讲解(一看就会)
参考文献
【yolo训练数据集】标注好的垃圾分类数据集共享
基于YOLOv8分割模型实现垃圾识别
TACO垃圾图像数据集
相关文章:
生活垃圾数据集(YOLO版)
文章目录 1、数据集介绍1.1、数据集图片组成2.1、获取数据集方式 2、扩展代码2.1、文件结构树2.2、划分数据集2.3、获取数据集文件名字2.4、文件成功对应检测 3、其他文章 1、数据集介绍 1.1、数据集图片组成 【有害垃圾】:电池(1 号、2 号、5 号&…...
操作系统篇之虚拟内存
虚拟内存是什么? 虚拟内存是计算机操作系统中的一种技术,它将每个进程的内存空间划分成若干个固定大小的页,并通过页面映射技术将这些页与物理内存或磁盘上的页面文件进行交换 虚拟内存能干什么? 扩展了实际物理内存容量:虚拟内存使得每个…...
浅谈SpringMVC的请求流程
目录标题 浅谈SpringMVC的请求流程SpringMVC的介绍SpringMVC的逻辑概念运行图解知识总结 浅谈SpringMVC的请求流程 对于SpringMVC而言重点是了解它的底层运行逻辑,从而可以根据其逻辑来进行实际业务的操作或者是利用原理增强业务的功能性,最终达到项目预…...
2309json.nlohmann数格示例1
参考 示例 下面是一些示例,可让你了解如何使用该类. 除了以下示例之外,你可能还需要: ->检查文档 ->浏览独立示例文件 每个API函数(记录在API文档中)都有相应独立示例文件.如,emplace()函数有一个匹配的emplace.cpp示例文件. 从文件中读取JSON json类提供了操作JSON…...
你知道 delete 删除属性时的一些细节吗?
探究 delete 的一些细节,起源于刚刚做过的一道笔试,原题如下: a 1; const b 2; console.log(delete a); console.log(delete b); // 输出结果是? // 答:true false我可从来没用过 delete 的返回值,但凡…...
Blender入门——快捷键
视角控制 旋转视角:鼠标中键摁住即可旋转平移视角:shift中远近视角:中键滚动 物体控制 移动物体:G旋转物体:R缩放物体:S回复变换:AltG,R,S新建物体:shiftA复制物体:shiftD删除物体&a…...
实例讲解Spring boot动态切换数据源
前言 在公司的系统里,由于数据量较大,所以配置了多个数据源,它会根据用户所在的地区去查询那一个数据库,这样就产生了动态切换数据源的场景。 今天,就模拟一下在主库查询订单信息查询不到的时候,切换数据…...
调整网络时需要注意的事项
这段时间调整网络,涉及的计算机多,Vlan也多,不小心的动作会给自己造成很大的麻烦,因为毕竟我也只是一个网络的初学者,平时虽然是网管,只是作为一项普通的工作。 准备工作做得不细致,可能出现的问…...
OpenCV自学笔记二十二:绘图及交互
一、绘图基础 下面是关于OpenCV绘图基础函数的说明和举例: 1. cv2.line():绘制直线 cv2.line(img, pt1, pt2, color, thickness, lineType) - img: 需要绘制直线的图像。 - pt1: 直线起始点坐标。 - pt2: 直线结束点坐标。 - color: 直线颜色&…...
【自学开发之旅】Flask-会话保持-API授权-注册登录
http - 无状态-无法记录是否已经登陆过 #会话保持 – session cookie session – 保存一些在服务端 cookie – 保存一些数据在客户端 session在单独服务器D上保存,前面数个服务器A,B,C上去取就好了,业务解耦。—》》现在都是基于token的验证。 以上是基…...
数据结构与算法--排序算法复习
目录 1.三种常见的简单排序: 1.1冒泡排序 1.2 选择排序 1.3 插⼊排序 2 常见高级排序算法 2.1 希尔排序 2.2 快速排序 2.3 归并排序 2.4计数排序 先上结论: 1.三种常见的简单排序: 1.1冒泡排序 1.⾸先在未排序数组的⾸位开始&#…...
python随手小练1
题目: 使用python做一个简单的英雄联盟商城登录界面 具体操作: print("英雄联盟商城登录界面") print("~ * "*15 "~") #找其规律 a "1、用户登录" b "2、新用户注册" c "3、退出系统&quo…...
gym_unity学习笔记
最近学了一段时间gym_unity,把一些资料留在这里 实例 实例gym_unity训练RollerBall:https://blog.csdn.net/alibutter/article/details/120908687实例gyn_unity训练3DBall:https://zhuanlan.zhihu.com/p/554927641?utm_id0 源码࿱…...
(三十)大数据实战——HBase集成部署安装Phoenix
前言 Phoenix 是一个开源的分布式关系型数据库查询引擎,它基于 Apache HBase构建。它提供了在 Hadoop 生态系统中使用 SQL查询和事务处理的能力。本节内容我们主要介绍一下Hbase如何集成部署安装Phoenix服务工具,并集成hive框架,能够快速、灵…...
【Python基础】S01E03 元组
P01S03 元组 定义元组元组无法修改定义一个元素的元素 修改元组变量方案一:关联新元组方案二:转换为列表 列表是可修改的,对于处理网站的用户列表或游戏中的角色列表至关重要。然而我们有时候需要创建一系列不可修改的元素,元组可…...
【算法-双指针思想】
双指针思想 双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。 定义快慢指针 快指针: 寻找新数组的元素 ,新数组就是不含有目标元素的数组 慢指针: 指向更新 新数组下…...
uni-app实现点击复制按钮 复制内容
注意:uni.setClipboardData({})里面的data参数必须是字符串类型这个是大坑 第一种 <view>{{orderId}}</view> //复制的内容 <button click"copy(orderId)">复制</button>copy(value) {uni.setClipboardData({data: value , // 这里是个坑接…...
Qt5开发及实例V2.0-第十四章-Qt多国语言国际化
Qt5开发及实例V2.0-第十四章-Qt多国语言国际化 第14章 Qt 5多国语言国际化14.1 基本概念14.1.1 国际化支持的实现14.1.2 翻译工作:“*.qm”文件的生成 14.2 【实例】14.2.1 简单测试14.2.2 选择语言翻译文字 本章相关例程源码下载1.Qt5开发及实例_CH1401.rar 下载2.…...
嵌入式网络接口之MAC芯片与PHY芯片
目录 0. 参考文档 1.嵌入式网络接口简介 2.嵌入式网络硬件架构方案 2.1 SOC内未集成MAC芯片 2.2 SOC内集成MAC芯片 2.3 主流方案总结 2.3 参照实际网卡的说明 3.MII/RMII及MDIO接口 3.1 MII 3.2 RMII 3.3 MDIO 0. 参考文档 网卡构造:MAC与PHY的关系&…...
在华为云服务器上CentOS 7安装单机版Redis
https://redis.io/是官网地址。 点击右上角的Download。 可以进入https://redis.io/download/——Redis官网下载最新版的网址。 然后在https://redis.io/download/页面往下拉,点击下图超链接这里。 进入https://download.redis.io/releases/下载自己需要的安装…...
01_Bootstrap基础组件01
1 什么是 Bootstrap? Bootstrap,来自 Twitter,是目前很受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JavaScript 的,它简洁灵活,使 Web 开发更加快捷。它对 HTML、CSS 和 JavaScript 进行了封装,使它们…...
Java:OGNL对象图导航语言基本使用示例
OGNL是Object Graphic Navigation Language(对象图导航语言) 文档 https://commons.apache.org/proper/commons-ognl/language-guide.htmlhttps://github.com/orphan-oss/ognlhttps://ognl.orphan.software/developer-guide 引入依赖 <!-- https://mvnrepository.com/ar…...
中科院预警名单
2023年预警名单 (fenqubiao.com) 如果论文投稿到中国科学院预警期刊,可能会面临以下情况: 1. 预警期刊一般审稿周期长,容易出现迟迟不见回音的情况。 2. 这类期刊的学术质量参差不齐,接受论文的学术标准可能不严格。 3. 预警期刊发表论文的学术影响力比较有限,不容易为作者…...
Qt QCustomPlot介绍
介绍 主要介绍qcustomplot及其用法 最新版本:QCustomPlot Patch Release 2.1.1//November 6, 2022 下载:https://www.qcustomplot.com/index.php/download 官网:https://www.qcustomplot.com/index.php 简单使用 mainwindow.h /**************************************…...
什么是CORS(跨源资源共享)?如何解决前端中的CORS问题?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CORS(跨源资源共享)⭐ 解决前端中的CORS问题的方法⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为…...
C 初级学习笔记(基础)
目录 1.预处理器指令 预定义宏 预处理器运算符 (\) 参数化的宏 头文件 .h 引用头文件操作 2.函数(标识符&关键字&运算符)存储类 函数参数 a. 标识符&关键字 b. 运算符(算术、关系、逻辑、位、赋…...
Nodejs 相关知识
Nodejs是一个js运行环境,可以让js开发后端程序,实现几乎其他后端语言实现的所有功能,能够让js与其他后端语言平起平坐。 nodejs是基于v8引擎,v8是Google发布的开源js引擎,本身就是用于chrome浏览器的js解释部分&#…...
【vue+elementUI】输入框样式、选择器样式、树形选择器和下拉框样式修改
输入框样式、选择器样式和下拉框样式修改 1、输入框和选择器的样式修改:2、下拉弹框样式A. 选择器的下拉弹框样式修改B. 时间选择器的下拉弹框样式修改C. vue-treeselect树形下拉框样式 1、输入框和选择器的样式修改: 写在style中不能加scoped࿰…...
JavaScript - canvas - 放大镜
效果 示例 项目结构: 源码: <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>放大镜</title><style type"text/css">div {width: 200px;height: 200px;display: inline-bl…...
PY32F003F18之输入捕获
输入捕获是定时器的功能之一,配合外部引脚,捕获脉宽时间或采集周期。 CPU中的定时器最基本的功能就是计数功能,其次是输入捕获(IC),再次就是比较输出(OC),还有就是使用引脚对外部时钟进行计数,触发信号捕捉…...
网站链接如何做二维码/河北搜索引擎优化
UVA_10453 这个题目要求打印最后的结果,所以我们在动规的过程中要记录一下当前的决策,便于我们后面递归去打印回文串。 #include<stdio.h>#include<string.h>#define MAXD 1010#define INF 1000000000int N, f[MAXD][MAXD], p[MAXD][MAXD];c…...
电影日记网站怎么做/二十个优化
两个引用指向同一个对象的内存图 转载于:https://www.cnblogs.com/cherish010/p/10278414.html...
先域名 还是先做网站/天津百度推广排名
一、Hive 执行过程概述 1、概述 (1) Hive 将 HQL 转换成一组操作符(Operator),比如 GroupByOperator, JoinOperator 等 (2)操作符 Operator 是 Hive 的最小处理单元 (3ÿ…...
网站开发的比较/高州新闻 头条 今天
不复制了 直接贴地址 :http://www.cnblogs.com/TerryBlog/archive/2011/04/18/2019907.html 确实都是一些完整的好项目,一个研究下来就受益非线了...
手机网站模板用什么做/网络营销的缺点及建议
20145207 实验二《Java面向对象程序设计》实验报告 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装、继承、多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验要求 1.没有Linux基础的同学建议先学习《Linux基础入门(…...
滨州做网站推广/中国营销网站
php如何替换数组的keyphp替换数组的key的方法:可以利用array_combine()函数来进行替换,如【array_combine($key_name,$arr_old);】。该函数可以合并两个数组,并将其中一个数组元素作为键名。函数介绍:array_combine() 函数通过合并…...