2025-08-08 20:09:17 +00:00
|
|
|
import json
|
2025-07-17 11:19:42 +00:00
|
|
|
import os
|
|
|
|
|
import shutil
|
|
|
|
|
import random
|
|
|
|
|
|
2025-08-07 18:23:53 +00:00
|
|
|
# ⚙️ Configurações
|
2025-08-08 20:09:17 +00:00
|
|
|
with open("config.json", "r") as f:
|
|
|
|
|
config = json.load(f)
|
|
|
|
|
MODELO = config["camera"]
|
|
|
|
|
RESOLUCAO = config["resolucao"]
|
2025-08-07 18:23:53 +00:00
|
|
|
pasta_origem = os.path.join(MODELO, "dataset", f"{RESOLUCAO[0]}x{RESOLUCAO[1]}")
|
2025-07-30 17:04:46 +00:00
|
|
|
pasta_destino = os.path.join(MODELO, "dataset", "split")
|
2025-07-17 11:19:42 +00:00
|
|
|
|
2025-08-08 20:09:17 +00:00
|
|
|
percent_train = 0.9
|
|
|
|
|
percent_val = 0.09
|
|
|
|
|
percent_test = 0.01
|
2025-07-17 11:19:42 +00:00
|
|
|
|
2025-07-30 17:04:46 +00:00
|
|
|
seed = 42
|
|
|
|
|
random.seed(seed)
|
2025-07-17 11:19:42 +00:00
|
|
|
|
|
|
|
|
# === Coleta imagens ===
|
2025-07-30 17:04:46 +00:00
|
|
|
pasta_rgb = os.path.join(pasta_origem, "images")
|
|
|
|
|
pasta_masks = os.path.join(pasta_origem, "masks")
|
2025-07-17 11:19:42 +00:00
|
|
|
|
|
|
|
|
arquivos = sorted([f for f in os.listdir(pasta_rgb) if f.endswith(".jpg") or f.endswith(".jpeg")])
|
|
|
|
|
|
|
|
|
|
# Embaralha
|
|
|
|
|
random.shuffle(arquivos)
|
|
|
|
|
|
|
|
|
|
# Divide
|
|
|
|
|
total = len(arquivos)
|
2025-07-30 17:04:46 +00:00
|
|
|
n_train = int(total * percent_train)
|
|
|
|
|
n_val = int(total * percent_val)
|
2025-07-17 11:19:42 +00:00
|
|
|
|
|
|
|
|
arquivos_train = arquivos[:n_train]
|
|
|
|
|
arquivos_val = arquivos[n_train:n_train+n_val]
|
|
|
|
|
arquivos_test = arquivos[n_train+n_val:]
|
|
|
|
|
|
|
|
|
|
conjuntos = {
|
|
|
|
|
"train": arquivos_train,
|
|
|
|
|
"val": arquivos_val,
|
|
|
|
|
"test": arquivos_test
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# === Função auxiliar ===
|
|
|
|
|
def copiar(imagens, conjunto):
|
2025-07-30 17:04:46 +00:00
|
|
|
path_img_dest = os.path.join(pasta_destino, conjunto, "images")
|
|
|
|
|
path_mask_dest = os.path.join(pasta_destino, conjunto, "masks")
|
2025-07-17 11:19:42 +00:00
|
|
|
os.makedirs(path_img_dest, exist_ok=True)
|
|
|
|
|
os.makedirs(path_mask_dest, exist_ok=True)
|
|
|
|
|
|
|
|
|
|
for nome in imagens:
|
|
|
|
|
nome_mask = nome.replace(".jpg", ".png").replace(".jpeg", ".png")
|
2025-07-24 16:15:42 +00:00
|
|
|
if not os.path.exists(os.path.join(pasta_masks, nome_mask)):
|
2025-07-17 11:19:42 +00:00
|
|
|
continue
|
|
|
|
|
shutil.copy2(os.path.join(pasta_rgb, nome), os.path.join(path_img_dest, nome))
|
|
|
|
|
shutil.copy2(os.path.join(pasta_masks, nome_mask), os.path.join(path_mask_dest, nome_mask))
|
|
|
|
|
|
|
|
|
|
# === Executa cópia ===
|
|
|
|
|
for conjunto, lista in conjuntos.items():
|
|
|
|
|
print(f"[{conjunto}] {len(lista)} arquivos")
|
|
|
|
|
copiar(lista, conjunto)
|
|
|
|
|
|
|
|
|
|
print("\n✅ Dataset dividido com sucesso!")
|