yolov5 数据集预处理(多文件夹同时提取文件并分类)(同时随机提取一定比例的图片和txt文件到指定文件)
yolov5 数据集预处理
最近老师要求了一个任务,要开始训练数据集了。
然后我就看到了密密麻麻已经将图片标记好的压缩包,jpg,txt,csv,zip文件全部都跑到了一起,我想着不能纯手工分类吧,50多个文件夹,我不得分死。所以就尝试着对这些数据分类了。
解压大家需要自行解压哈
功能
将文件夹内的东西全部移出,并删除空文件夹。同时可以将txt,jpg,csv,zip,rar文件分别放在不同的文件夹内。(这些文件夹如果没有会自动创建)
同时还有按照一定比例随机抽取文件的功能。
下面会有函数的讲解!
先附上代码:
已经给大家写好注释了,注意看哈
# 这是移文件的脚本
import csv
import imp
import random
import shutil
import os
import glob
import os, random, shutil'''这是个移动文件的函数'''
def move_file(old_path, new_path,flag): #前者可以是文件(文件夹) 后者为文件夹 flag 用于判断是否为文件夹if flag == 0:filelist = os.listdir(old_path) #列出该目录下的所有文件,listdir返回的文件列表是不包含路径的。for file in filelist:src = os.path.join(old_path, file)dst = os.path.join(new_path, file)shutil.move(src, dst)elif flag ==1: #如果不为文件夹,直接移动文件到指定目录src = old_pathdst = new_pathshutil.move(src, dst)'''
参数1:你杂乱无章存放这各种各样文件地文件夹路径
参数2:你新的存放子文件夹的路径
可以进行文件类型的粗分类,可以看代码,再添加你想要单独领出来的文件类型
'''
def move_all_file(old_path_all,new_path):old_path_every ='' #这是该文件夹下具体的文件(包含子文件夹)file_list = os.listdir(old_path_all) #获取文件路径for i in range(len(file_list)): #遍利每一个文件夹if os.path.isdir(old_path_all+"/"+file_list[i]): #判断下一个文件是否为文件夹old_path_every = old_path_all+"/"+file_list[i] #设置总文件夹中每个文件的路径move_file(old_path_every, new_path,0)os.removedirs(old_path_every) #将空文件夹删除elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".csv":old_path_every = old_path_all+"/"+file_list[i]mkdir("./csv")move_file(old_path_every, "./csv",1)elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".zip":old_path_every = old_path_all+"/"+file_list[i]mkdir("./zip")move_file(old_path_every, "./zip",1)elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".rar":old_path_every = old_path_all+"/"+file_list[i]mkdir("./rar")move_file(old_path_every, "./rar",1)elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".txt":old_path_every = old_path_all+"/"+file_list[i]mkdir("./txt")move_file(old_path_every, "./txt",1)elif os.path.splitext(old_path_all+"/"+file_list[i])[1] == ".xml":old_path_every = old_path_all+"/"+file_list[i]mkdir("./xml")move_file(old_path_every, "./xml",1)# remove_file(old_path_all,new_path) #移动不是文件夹的文件import os'''这个就是一个简单的创建文件夹的函数'''
def mkdir(path):folder = os.path.exists(path)if not folder: #判断是否存在文件夹如果不存在则创建为文件夹os.makedirs(path) #makedirs 创建文件时如果路径不存在会创建这个路径print ("--- new folder... ---")print ("--- OK ---")else:print ("--- There is this folder! ---")'''这个解决多个csv文件合并的问题,解放你的双手'''
def csv_row_connect(old_path_all): #合并csv文件csv_list = glob.glob(old_path_all+'/*.csv')print('共发现%s个CSV文件'% len(csv_list))print('正在处理............')for i in csv_list:fr = open(i,'r',encoding='utf-8',errors='ignore').read()with open('文件合集.csv','a',encoding='utf-8',errors='ignore') as f:f.write(fr)print('合并完毕!')'''
从你存放的所有jpg格式图片和txt文件的文件夹中,随机抽取一定比例,放在你的新文件夹下
这里,我是设置的是yolov5要求的数据集格式(注意!!!这里是抽取,不是拷贝,所以抽取比例一定要注意)
这可以按照你输入的比例,随机抽取图片到你的指定文件夹
需要分析一下代码,但是是很简单的!!!
这里还没有优化好,注意看注释,!!!!感叹号的地方就是你要修改的路径'''
#rate 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
def allocate_date_set(older_picture_path,older_txt_path,rate): #则是随机抽取图片函数pathDir = os.listdir(older_txt_path) #取图片的原始路径filenumber=len(pathDir)picknumber=int(filenumber*rate) #按照rate比例从文件夹中取一定数量图片sample = random.sample(pathDir, picknumber) #随机选取picknumber数量的样本图片mkdir("./images/train")mkdir("./images/test")mkdir("./images/val")mkdir("./labels/train")mkdir("./labels/test")mkdir("./labels/val")print (sample)for name in sample:picture_path_every =older_picture_path+'/'+os.path.splitext(name)[0]+".jpg"txt_path_every =older_txt_path+'/'+os.path.splitext(name)[0]+".txt"picture_name = os.path.splitext(name)[0]+".jpg"txt_name = os.path.splitext(name)[0]+".txt"if os.path.exists(picture_path_every) and os.path.exists(txt_path_every):shutil.move(picture_path_every, "./image/test/"+picture_name) #需要修改的地方!!!!!!shutil.move(txt_path_every,"labels/test/"+txt_name) #!!!!!!!!!!return# def move_data_set():if __name__ == '__main__':move_all_file(old_path_all="./move_to",new_path="./test2") #老目录 新目录csv_row_connect("./csv")# allocate_date_set(older_picture_path="./images",older_txt_path="./txt",rate = 0.6)#源图片文件夹路径 源txt文件
最后附上我一开始的数据集的样子
就是文件夹下有文件夹文件夹然后再是文件的样子。如果你们刚搜集来的数据也是这个样子,那应该能用我的这一份代码进行快速的分类。
yolov5 数据集预处理(多文件夹同时提取文件并分类)(同时随机提取一定比例的图片和txt文件到指定文件)相关推荐
- 用 Python 批量提取 PDF 的图片,并存储到指定文件夹
今天给大家分享如何用 Python 批量提取 PDF 的图片,并存储到指定文件夹. 一.实现效果图 二.基于 fitz 库和正则搜索提取图片 fitz 库是 pymupdf 中的一个模块,用它来提取 ...
- Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录
注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门Node.js(nodejs)对本地JSON文件进行增.删.改.查 ...
- js 删除服务器文件,Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录...
注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门https://blog.csdn.net/qq_37860634 ...
- linux命令 复制文件夹命令行,(转)每天一个linux命令(8):cp 命令,复制文件和文件夹...
场景:自动部署脚本中为了部署方便,将配置文件放在服务器端,每次部署都使用服务端的配置文件覆盖上传上去的配置文件. cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一. 一般情况下,she ...
- linux 文件夹tar.bz2压缩命令,使用tar命令提取(或解压缩)tar.bz2和tbz2文件的方法...
本文介绍使用tar命令提取(或解压缩)tar.bz2和tbz2文件的方法.tar命令允许你创建和提取tar归档文件,它支持各种压缩程序,例如gzip.bzip2.lzip.lzma.lzop.xz和c ...
- 从标注好的xml文件中截取坐标点(人脸框四个点坐标)人脸图像并保存在指定文件夹
在目标检测中,数据集常常使用labelimg标注,会生成xml文件.本文旨在根据xml标注文件来裁剪目标,以达到去除背景信息的目的. 详细连接: 细节 import cv2 import xml.et ...
- caffe在画accuracy曲线图及对某文件夹下多张图片预测分类时的问题解决
我是分2类 我的训练和测试集在http://blog.csdn.net/wd1603926823/article/details/51732849已经转化为leveldb格式 首先,我的Imagene ...
- python读取多个文件夹图片_python或C++读取指定文件夹下的所有图片
本文实例为大家分享了python或C++读取指定文件夹下的所有图片,供大家参考,具体内容如下 1.python读取指定文件夹下的所有图片路径和图片文件名 import cv2 from os impo ...
- 小米4如何用计算机读取文件夹,小米手机如何快速地在手机与电脑间传送图片视频等文件...
我们经常要在电脑与手机间快速地传送文件,特别是文件比较多的比较大的时候.比如旅游聚会拍摄的图片. 安卓手机可以很方便地在手机与电脑间传送文件,只要在同一个局域网内,就是在同一个网络里面就可以.目前已经 ...
- Linux第六章:3.linux下创建文件夹(创建目录)、使用mkdir命令创建单级和多级目录、linux下删除文件夹(目录),rmdir命令、rm -rf、touch命令创建文件
一.mkdir 命令 1.创建单级目录 mkdir 你要创建的目录 1.1 示例: 2.创建多级目录 mkdir -p 你要创建的目录们 2.1 示例: 二.rmdir 命令 1.rmdir只能删除 ...
最新文章
- poj2553(强连通分量)
- 计算机软考高级论文,【2019年软考高项论文一定要避开这些坑】- 环球网校
- Sweet.js 用 Readtables 编译 JSX
- 日常生活小技巧 -- 惠普 Windows10 进入安全模式
- Java黑皮书课后题第6章:*6.38(生成随机字符)使用程序清单6-10 RandomCharacter中的方法,打印100个大写字母及100个一位数字,每行打印10个
- 升级Python后yum不可用的解决方案
- c#双缓冲绘图(不闪烁的几种方法)
- amaplocation无法获取高度_kali一款高度可定制的WiFi钓鱼工具 WiFiPhisher
- Sqlserver2008日志压缩
- Oracle体系结构一
- 登录界面实现记住密码功能
- Geek卸载,Windows电脑再无卡顿
- 穷查理宝典_《穷查理宝典》(珍藏版)
- 西北农林科技大学CSDN高校俱乐部运营策划书
- Adobe Spark试用手记
- win10共享打印错误0x0000006_win7系统局域网无法共享惠普打印机提示0x000006be错误的解决方法...
- linux 清空stdin缓冲,清除stdin缓存中的数据
- 浮点数为什么不精确?
- 公众号商城怎么做_分享超市小程序商城开发制作介绍
- 循环结构(二)——循环嵌套
热门文章
- Vue.js快速原型开发问题汇总
- 雷达基础系列文章之四:雷达专业国内期刊
- 原型设计工具Axure
- Windows/Linux/MacOS下VMware Workstation Pro/Vmware Fusion虚拟机的安装使用,Vmware Tools 的安装,Vmware使用技巧与故障排除。
- vmware使用显卡
- 计算机毕业论文初稿,毕业论文初稿一般写多久
- java23种设计模式(十六) -- 中介者模式(行为设计模式)
- 2019 deecamp B题不完全的记录
- 中国与印度的GDP深层剖析
- 动图ps在html不动了,PS制做的gif动画导出后动图不动了怎么办?