Untitled
unknown
plain_text
2 years ago
4.6 kB
3
Indexable
from pathlib import Path import os from PIL import Image import csv import random import os # diretório principal root_dir = '20' # caminho dos arquivos CSV de treino, validação e teste train_csv = 'train_morrodalua.csv' val_csv = 'val_morrodalua.csv' test_csv = 'test_morrodalua.csv' # proporção de imagens para treino, validação e teste train_ratio = 0.70 val_ratio = 0.15 test_ratio = 0.15 # # Loop através de todas as subpastas no diretório raiz # for subdir, _, files in os.walk(root_dir): # # Loop através de todos os arquivos na subpasta # for filename in files: # filepath = os.path.join(subdir, filename) # try: # # Tentar abrir a imagem com o PIL # with Image.open(filepath) as img: # # Verificar se a imagem está corrompida # print('verificando...') # img.verify() # except (IOError, SyntaxError) as e: # # Se a imagem estiver corrompida, removê-la # os.remove(filepath) # print(f"Arquivo {filename} removido: {str(e)}") # lista para armazenar o caminho de todas as imagens image_paths = [] cont = 0 # percorre todas as subpastas dentro do diretório principal for subdir, dirs, files in os.walk(root_dir): for file in files: # Verifica se o arquivo é uma imagem JPEG ou PNG if file.endswith('.jpg') or file.endswith('.png'): # Obtém o caminho completo do arquivo e o seu tamanho file_path = os.path.join(subdir, file) width, height = Image.open(file_path).size # Obtém a altura_mm do caminho do arquivo path_parts = file_path.split('/') if len(path_parts) <= 5: classe = path_parts[1] else: tipo = None classe = path_parts[1] sep = path_parts[-1].split('-') sepfazendavoo = sep[0].split('_') altura_voo = sepfazendavoo[0] fazenda = sepfazendavoo[1] data =(sep[4]+''+sep[5]+''+sep[6]) piquete = sep[2] modulo = sep[1] #altura_mm = sep[3] lt = sep[-1].split('_') sepalturapiquete = lt[0].split(' ') sepaltura = sepalturapiquete[1].lower().split('cm') ponto = sepalturapiquete[0] altura_mm=sepaltura[0] print (fazenda) if data in ['20230322','20230405']: image_paths.append((file_path, fazenda, classe,ponto, altura_voo, data, piquete, modulo, altura_mm)) # embaralha a lista de imagens aleatoriamente random.shuffle(image_paths) # calcula o número de imagens para cada conjunto num_images = len(image_paths) num_train = int(num_images * train_ratio) num_val = int(num_images * val_ratio) num_test = num_images - num_train - num_val # abre os arquivos CSV para escrita with open(train_csv, 'w', newline='') as train_file, \ open(val_csv, 'w', newline='') as val_file, \ open(test_csv, 'w', newline='') as test_file: # escreve o cabeçalho dos arquivos CSV csv_writer = csv.writer(train_file) csv_writer.writerow(['file_path',' fazenda', 'classe', 'data', 'piquete', 'modulo', 'altura_mm']) csv_writer = csv.writer(val_file) csv_writer.writerow(['file_path',' fazenda', 'classe', 'data', 'piquete', 'modulo', 'altura_mm']) csv_writer = csv.writer(test_file) csv_writer.writerow(['file_path',' fazenda', 'classe', 'data', 'piquete', 'modulo', 'altura_mm']) for i in range(num_train): file_path, fazenda, classe,ponto, altura_voo, data, piquete, modulo, altura_mm = image_paths[i] csv_writer = csv.writer(train_file) csv_writer.writerow([file_path, fazenda, classe, data, piquete, modulo, altura_mm]) for i in range(num_train, num_train + num_val): file_path, fazenda, classe,ponto, altura_voo, data, piquete, modulo, altura_mm = image_paths[i] csv_writer = csv.writer(val_file) csv_writer.writerow([file_path, fazenda, classe, data, piquete, modulo, altura_mm]) # escreve as imagens de teste nos arquivos CSV for i in range(num_train + num_val, num_train + num_val + num_test): file_path, fazenda, classe,ponto, altura_voo, data, piquete, modulo, altura_mm = image_paths[i] csv_writer = csv.writer(test_file) csv_writer.writerow([file_path, fazenda, classe, data, piquete, modulo, altura_mm]) print('Finalizado!!!')
Editor is loading...