Skip to content

Instantly share code, notes, and snippets.

@wfng92
Last active March 9, 2023 06:59
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save wfng92/20d7541d7fa455c4c1860b8735239d96 to your computer and use it in GitHub Desktop.
Save wfng92/20d7541d7fa455c4c1860b8735239d96 to your computer and use it in GitHub Desktop.
import random
import glob
import os
import shutil
def copyfiles(fil, root_dir):
basename = os.path.basename(fil)
filename = os.path.splitext(basename)[0]
# copy image
src = fil
dest = os.path.join(root_dir, image_dir, f"{filename}.jpg")
shutil.copyfile(src, dest)
# copy annotations
src = os.path.join(label_dir, f"{filename}.txt")
dest = os.path.join(root_dir, label_dir, f"{filename}.txt")
if os.path.exists(src):
shutil.copyfile(src, dest)
label_dir = "labels/"
image_dir = "images/"
lower_limit = 0
files = glob.glob(os.path.join(image_dir, '*.jpg'))
random.shuffle(files)
folders = {"train": 0.8, "val": 0.1, "test": 0.1}
check_sum = sum([folders[x] for x in folders])
assert check_sum == 1.0, "Split proportion is not equal to 1.0"
for folder in folders:
os.mkdir(folder)
temp_label_dir = os.path.join(folder, label_dir)
os.mkdir(temp_label_dir)
temp_image_dir = os.path.join(folder, image_dir)
os.mkdir(temp_image_dir)
limit = round(len(files) * folders[folder])
for fil in files[lower_limit:lower_limit + limit]:
copyfiles(fil, folder)
lower_limit = lower_limit + limit
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment