一、前言
就是记录一下,自己工作中用的数据处理的一些小脚本,如果对你有所帮助记得三连。
二、脚本
1.数据集的图片与标签匹配(显示缺少的图片和标签,也可以自动删除)
代码如下:
import os
# 自己图片存放目录
# path1 = "D:\data\images"
# 自己存放目录
# path2 = "D:\data\labels"
def file_name(image_dir, xml_dir):
jpg_list = []
xml_list = []
for root, dirs, files in os.walk(image_dir):
for file in files:
jpg_list.append(os.path.splitext(file)[0])
for root, dirs, files in os.walk(xml_dir):
for file in files:
xml_list.append(os.path.splitext(file)[0])
diff = set(xml_list).difference(set(jpg_list)) # 差集,在a中但不在b中的元素
print("缺少的标签数量:", len(diff))
for name in diff:
# 删除标签
path = path2 + "/" + name + ".txt"
print("已删除标签:", path)
os.remove(path)
print("no jpg", name + ".txt")
diff2 = set(jpg_list).difference(set(xml_list)) # 差集,在b中但不在a中的元素
print("缺少的图片数量:", len(diff2))
for name in diff2:
# 删除图片
path = path1 + "/" + name + ".jpg"
print("已删除图片:", path)
os.remove(path)
print("no xml", name + ".jpg")
if __name__ == '__main__':
file_name(path1, path2)
效果:
2.YOLO数据集txt标签修改
我们在处理YOLO数据集的时候,后期想要修改或添加标签,可以使用,也可以处理只保存一类标签,把代码最后一行else去掉即可。
代码如下(示例):
import os
#想要修改改的标签
originNum = 7
#修改好的标签
reNumber = 6
txtfilepath = r"F:\newproject\script\Data_set_processing\labels" #原始txt文件所存文件夹,文件夹可以有一个或多个txt文件
savefilepath = r"F:\newproject\script\Data_set_processing\later" #更改后txt文件存放的文件夹
originFileList = os.listdir(txtfilepath) # 返回指定的文件夹包含的文件或文件夹的名字的列表
num = len(originFileList)
list = range(num) #创建从0到num的整数列表
files = os.listdir(savefilepath)
for i in list: #遍历每一个文件
name = originFileList[i]#拿出文件名
readfile = open(txtfilepath+"/"+name, 'r') #读取文件
fline = readfile.readlines() #读取txt文件中每一行
savetxt = open(savefilepath+"/"+name,'a+')
textList=[]
for j in fline:#每一行循环
textList=j.split(" ",1) #分割第一个字符和后面的字符
firstStr=textList[0]
if firstStr.isdigit and int(firstStr)==originNum:
retext=str(reNumber)+' '+textList[1]
print(name+":"+retext)
savetxt.write(retext)
else:
retext = str(firstStr) + ' ' + textList[1]
savetxt.write(retext)
效果:
处理前
处理后
三、结语:
第一次发表博客没什么经验,如有问题请大家及时指出,后期也会更新的,感谢!
欢迎交流!