import os import shutil import pandas as pd import tensorflow as tf from PIL import Image from tensorflow.keras.preprocessing import image from tensorflow.keras.layers import CenterCrop import numpy as np from tqdm import tqdm def load_sort_data(meta_filename = str, image_folder = str,sub_dir= str): """[summary] Args: meta_filename ([type], optional): [description]. Defaults to str. image_folder ([type], optional): [description]. Defaults to str. sub_dir (str,optional): Parent directory of the output folders. Returns: [type]: [description] """ data_dir = os.getcwd() + "/data/" dest_dir = data_dir + sub_dir metadata = pd.read_csv(data_dir + '/' + meta_filename) labels = metadata['dx'].unique() label_images = [] for i in tqdm(labels): if os.path.exists(dest_dir + str(i) + '/'): shutil.rmtree(dest_dir + str(i) + '/') os.mkdir(dest_dir + str(i) + '/') sample = metadata[metadata['dx'] == i]['image_id'] label_images.extend(sample) for id in tqdm(label_images): shutil.copyfile((data_dir + image_folder + '/' + id + '.jpg'), (dest_dir + i + '/' + id + '.jpg')) label_images = [] return metadata, dest_dir def transform(path, size = (200, 150)): # create a list of images img_list = [fn for fn in os.listdir(path) if fn.endswith('.jpg')] (left, upper, right, lower) = (15, 15, 135,185) #iterating over each .jpg for fn in tqdm(img_list): fp = path + '/' + fn current_image = image.load_img(fp, target_size = size, color_mode = 'grayscale') crop_image = current_image.crop((left, upper, right, lower)) # print("current image", type(current_image), current_image) # print("crop image", type(crop_image), crop_image) # convert image to a matrix img_ts = image.img_to_array(crop_image) # print(type(img_ts), img_ts) # turn that into a vector / 1D array img_ts = [img_ts.ravel()] try: # concatenate different images full_mat = np.concatenate((full_mat, img_ts)) except UnboundLocalError: # if not assigned yet, assign one full_mat = img_ts return full_mat