编程语言
首页 > 编程语言> > 制作数据集,你可能会用到的小代码(python)

制作数据集,你可能会用到的小代码(python)

作者:互联网

目录

写在前面
大家在制作数据集遇到需要批处理的,可以留言私信,俺会及时更新的(白嫖

1、原始图片重命名

拍的图片名称乱七八糟,别担心,有了这个小代码,吗妈妈再也不用担心图片命名啦!


import os

class BatchRename():
    '''
    批量重命名文件夹中的图片文件

    '''
    def __init__(self):
        self.path = 'f:/1' #表示需要命名处理的文件夹
        # self.path = 'f:/test'  # 表示需要命名处理的文件夹

    def rename(self):
        filelist = os.listdir(self.path) #获取文件路径
        total_num = len(filelist) #获取文件长度(个数)
        i = 0  #表示文件的命名是从1开始的
        for item in filelist:
            if item.endswith('.jpg'):  #初始的图片的格式为jpg格式的(或者源文件是png格式及其他格式,后面的转换格式就可以调整为自己需要的格式即可)
                src = os.path.join(os.path.abspath(self.path), item)
                # dst = os.path.join(os.path.abspath(self.path), '2_' + str(i) + '.jpg')#处理后的格式也为jpg格式的,当然这里可以改成png格式
                # dst = os.path.join(os.path.abspath(self.path), '002_' + str(i) + '.jpg')
                dst = os.path.join(os.path.abspath(self.path), '0000' + 'cqh' + str(i) + '.jpg')    #可以自主定义想要的格式
                try:
                    os.rename(src, dst)
                    print('converting %s to %s ...' % (src, dst))
                    i = i + 1
                except:
                    continue
        print('total %d to rename & converted %d jpgs' % (total_num, i))

if __name__ == '__main__':
    demo = BatchRename()
    demo.rename()

2、修改xml文件的路径

当有多个同学标注同一批数据,可能文件夹不小心,没有统一好。别担心,有了这个小代码,无论小伙伴怎么标数据,都不用担心啦!

import os
import os.path
from xml.etree.ElementTree import parse, Element

# .xml文件地址
path = "F:/1"
# 得到文件夹下所有文件名称
files = os.listdir(path)
s = []
# 遍历文件夹
for xmlFile in files:
    # 判断是否是文件夹,不是文件夹才打开
    if not os.path.isdir(xmlFile):
        print(xmlFile)
        pass
    path = "F:/1"
    newStr = os.path.join(path, xmlFile)
    #最核心的部分,路径拼接,输入的是具体路径
    #得到.xml文件的根(也就是annotation)
    dom = parse(newStr)
    root = dom.getroot()
    #获得后缀.前的文件名(分离文件名和扩展名)
    part = os.path.splitext(xmlFile)[0]
    # 文件名+后缀
    part1 = part + '.jpg'
    # path里的新属性值:
    newStr1 = 'D:\\data-view\\round-1\\' + part1       # 修改xml文件的路径信息
    #通过句柄找到path的子节点,然后给子节点设置内容
    root.find('path').text = newStr1
    # #打印输出
    print('已经修改')
    dom.write(newStr)
    # dom.write(newStr, xml_declaration=True)
    pass

3、修改xml文件的folder

如果xml文件的路径有问题,那么你要仔细检查文件的folder是否正确,很可能也出错啦,这个小代码可以帮助你批量修改folder。

import os
from xml.etree.ElementTree import parse, Element

path = 'f:/1'  # xml文件存放路径
sv_path = 'f:/2'  # 修改后的xml文件存放路径
files = os.listdir(path)
cnt = 1  ##从1开始计数,如果要在前面+0,用zfill函数

files = os.listdir(path)
for xmlFile in files:
    # 判断是否是文件夹,不是文件夹才打开
    if not os.path.isdir(xmlFile):
        print(xmlFile)
        pass
    newStr = os.path.join(path, xmlFile)
    newStr1 = os.path.join(sv_path, xmlFile)
    #最核心的部分,路径拼接,输入的是具体路径
    #得到.xml文件的根(也就是annotation)
    dom = parse(newStr)
    root = dom.getroot()
    root.find('folder').text = 'round-1'
# for xmlFile in files:
#     dom = xml.dom.minidom.parse(os.path.join(path, xmlFile))  # 打开xml文件,送到dom解析
    # root = dom.documentElement  # 得到文档元素对象
    # item = root.getElementsByTagName('folder')  # 获取path这一node名字及相关属性值
    # print(item)
    # for i in item:
    #     i.firstChild.data = 'glass'  # xml文件对应的图片路径
    #
    # with open(os.path.join(sv_path, xmlFile), 'w') as fh:
    dom.write(newStr1)
    cnt += 1

4、抽取训练集和测试集

从标注的数据,随机抽取训练集和测试集

##深度学习过程中,需要制作训练集和验证集、测试集。

import os, random, shutil


def moveFile(fileDir):
    pathDir = os.listdir(fileDir)  # 取图片的原始路径
    filenumber = len(pathDir)
    rate = 0.20  # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
    picknumber = int(filenumber * rate)  # 按照rate比例从文件夹中取一定数量图片
    sample = random.sample(pathDir, picknumber)  # 随机选取picknumber数量的样本图片
    print(sample)
    for name in sample:
        shutil.move(fileDir + name, tarDir + name)
    return


if __name__ == '__main__':
    fileDir = "i:\\333\\train\\"  # 源图片文件夹路径
    tarDir = 'i:\\333\\test\\'  # 移动到新的文件夹路径
    moveFile(fileDir)

标签:xml,xmlFile,dom,python,用到,文件夹,path,os,代码
来源: https://blog.csdn.net/ca___0/article/details/110249177