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文件到指定文件)相关推荐

  1. 用 Python 批量提取 PDF 的图片,并存储到指定文件夹

    今天给大家分享如何用 Python 批量提取 PDF 的图片,并存储到指定文件夹. 一.实现效果图 二.基于 fitz 库和正则搜索提取图片 fitz 库是 pymupdf 中的一个模块,用它来提取 ...

  2. Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录

    注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门Node.js(nodejs)对本地JSON文件进行增.删.改.查 ...

  3. js 删除服务器文件,Node.js复制/删除服务器端文件到指定目录文件夹下,并且预判是否存在该目录,如果没有,则递归创建该文件夹目录...

    注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门https://blog.csdn.net/qq_37860634 ...

  4. linux命令 复制文件夹命令行,(转)每天一个linux命令(8):cp 命令,复制文件和文件夹...

    场景:自动部署脚本中为了部署方便,将配置文件放在服务器端,每次部署都使用服务端的配置文件覆盖上传上去的配置文件. cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一. 一般情况下,she ...

  5. linux 文件夹tar.bz2压缩命令,使用tar命令提取(或解压缩)tar.bz2和tbz2文件的方法...

    本文介绍使用tar命令提取(或解压缩)tar.bz2和tbz2文件的方法.tar命令允许你创建和提取tar归档文件,它支持各种压缩程序,例如gzip.bzip2.lzip.lzma.lzop.xz和c ...

  6. 从标注好的xml文件中截取坐标点(人脸框四个点坐标)人脸图像并保存在指定文件夹

    在目标检测中,数据集常常使用labelimg标注,会生成xml文件.本文旨在根据xml标注文件来裁剪目标,以达到去除背景信息的目的. 详细连接: 细节 import cv2 import xml.et ...

  7. caffe在画accuracy曲线图及对某文件夹下多张图片预测分类时的问题解决

    我是分2类 我的训练和测试集在http://blog.csdn.net/wd1603926823/article/details/51732849已经转化为leveldb格式 首先,我的Imagene ...

  8. python读取多个文件夹图片_python或C++读取指定文件夹下的所有图片

    本文实例为大家分享了python或C++读取指定文件夹下的所有图片,供大家参考,具体内容如下 1.python读取指定文件夹下的所有图片路径和图片文件名 import cv2 from os impo ...

  9. 小米4如何用计算机读取文件夹,小米手机如何快速地在手机与电脑间传送图片视频等文件...

    我们经常要在电脑与手机间快速地传送文件,特别是文件比较多的比较大的时候.比如旅游聚会拍摄的图片. 安卓手机可以很方便地在手机与电脑间传送文件,只要在同一个局域网内,就是在同一个网络里面就可以.目前已经 ...

  10. Linux第六章:3.linux下创建文件夹(创建目录)、使用mkdir命令创建单级和多级目录、linux下删除文件夹(目录),rmdir命令、rm -rf、touch命令创建文件

    一.mkdir 命令 1.创建单级目录 mkdir 你要创建的目录 1.1 示例: 2.创建多级目录 mkdir -p 你要创建的目录们 2.1 示例: 二.rmdir 命令 1.rmdir只能删除 ...

最新文章

  1. poj2553(强连通分量)
  2. 计算机软考高级论文,【2019年软考高项论文一定要避开这些坑】- 环球网校
  3. Sweet.js 用 Readtables 编译 JSX
  4. 日常生活小技巧 -- 惠普 Windows10 进入安全模式
  5. Java黑皮书课后题第6章:*6.38(生成随机字符)使用程序清单6-10 RandomCharacter中的方法,打印100个大写字母及100个一位数字,每行打印10个
  6. 升级Python后yum不可用的解决方案
  7. c#双缓冲绘图(不闪烁的几种方法)
  8. amaplocation无法获取高度_kali一款高度可定制的WiFi钓鱼工具 WiFiPhisher
  9. Sqlserver2008日志压缩
  10. Oracle体系结构一
  11. 登录界面实现记住密码功能
  12. Geek卸载,Windows电脑再无卡顿
  13. 穷查理宝典_《穷查理宝典》(珍藏版)
  14. 西北农林科技大学CSDN高校俱乐部运营策划书
  15. Adobe Spark试用手记
  16. win10共享打印错误0x0000006_win7系统局域网无法共享惠普打印机提示0x000006be错误的解决方法...
  17. linux 清空stdin缓冲,清除stdin缓存中的数据
  18. 浮点数为什么不精确?
  19. 公众号商城怎么做_分享超市小程序商城开发制作介绍
  20. 循环结构(二)——循环嵌套

热门文章

  1. Vue.js快速原型开发问题汇总
  2. 雷达基础系列文章之四:雷达专业国内期刊
  3. 原型设计工具Axure
  4. Windows/Linux/MacOS下VMware Workstation Pro/Vmware Fusion虚拟机的安装使用,Vmware Tools 的安装,Vmware使用技巧与故障排除。
  5. vmware使用显卡
  6. 计算机毕业论文初稿,毕业论文初稿一般写多久
  7. java23种设计模式(十六) -- 中介者模式(行为设计模式)
  8. 2019 deecamp B题不完全的记录
  9. 中国与印度的GDP深层剖析
  10. 动图ps在html不动了,PS制做的gif动画导出后动图不动了怎么办?