import os
import shutil
import random
base_dir = 'D:\ChromeDownload\***'
images_dir = os.path.join(base_dir, 'images')
labels_dir = os.path.join(base_dir, 'labels')
output_dir = 'D:\ChromeDownload\***'
splits = ['train', 'val', 'test']
for split in splits:os.makedirs(os.path.join(output_dir, split, 'images'), exist_ok=True)os.makedirs(os.path.join(output_dir, split, 'labels'), exist_ok=True)
image_files = sorted([f for f in os.listdir(images_dir) if f.endswith('.jpg') or f.endswith('.png')])
base_names = [os.path.splitext(f)[0] for f in image_files]
random.shuffle(base_names)
total = len(base_names)
train_end = int(0.7 * total)
val_end = int(0.9 * total)train_files = base_names[:train_end]
val_files = base_names[train_end:val_end]
test_files = base_names[val_end:] print(f'Total: {total}, Train: {len(train_files)}, Val: {len(val_files)}, Test: {len(test_files)}')
def copy_files(file_list, split):for name in file_list:img_src = os.path.join(images_dir, name + '.jpg') if not os.path.exists(img_src): img_src = os.path.join(images_dir, name + '.png')label_src = os.path.join(labels_dir, name + '.txt')img_dst = os.path.join(output_dir, split, 'images', os.path.basename(img_src))label_dst = os.path.join(output_dir, split, 'labels', os.path.basename(label_src))shutil.copy(img_src, img_dst)if os.path.exists(label_src):shutil.copy(label_src, label_dst)
copy_files(train_files, 'train')
copy_files(val_files, 'val')
copy_files(test_files, 'test')