【自动划分数据集】提供图片与标签(.txt)文件即可自动生成YOLO格式数据集

"""
input:
1.img_path 数据集图片地址
2.label_path 数据集标签地址(.txt格式)
3.划分比例(0到1) split_rate

output:
--dataset
    --images
        --train
        --val
    --labels
       --train
       --val
"""
import os
import random
import shutil

def get_imlist(path):
    return [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.jpg')] #后缀要换成自己的

def move_labels(dest_dir, path):
    label_list = get_imlist(dest_dir + f'/images/{path}')
    for names in label_list:
        name = names.split('\\')[-1:][0]
        name = name.split('.')[0]
        label = name + '.txt'
        if os.path.exists(f'{label_path}/{label}'):
            shutil.copy(f'{label_path}/{label}', dest_dir + f'/labels/{path}')
        else:
            print(f'{label} is not exists')

def main(src_path):
    dest_dir = output_path  # 这个文件夹需要提前建好
    img_list = get_imlist(src_path)
    random.shuffle(img_list)
    length = int(len(img_list) * split_rate)  # 这个可以修改划分比例
    os.makedirs(dest_dir + '/images/train')
    os.makedirs(dest_dir + '/images/test')
    os.makedirs(dest_dir + '/labels/train')
    os.makedirs(dest_dir + '/labels/test')
    for f in img_list[length:]:
        shutil.copy(f, dest_dir + '/images/train')
    for f in img_list[:length]:
        shutil.copy(f, dest_dir + '/images/test')
    #移动对应的标签到对应位置
    move_labels(dest_dir, 'test')
    move_labels(dest_dir, 'train')
    print(f'finished')

if __name__ == '__main__':
    path_dataset = r'..\output\crazing\0.15_0.5-0.5_1\expertLabel0.15_0.5'
    img_path = path_dataset + '\images'
    label_path = path_dataset + '\labels'

    split_rate = 0.2

    output_path = r'datasets\demo'

    if not os.path.exists(output_path):
        os.makedirs(output_path)
    main(img_path)

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wind faded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值