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