Untitled
unknown
plain_text
3 years ago
4.6 kB
6
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...