Untitled

 avatar
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...