CoolFace
Modelpublic

fernandoperlar/preprocessing_image

sourceHugging Faceupdated 5y agoView on Hugging Face
0likes
Data.py128 linesDownload Raw Back to scripts
1import os2import pandas as pd3import numpy as np4import cv2 as cv5import matplotlib.pyplot as plt6from sklearn import model_selection7from keras import preprocessing8from .Misc import *9 10class Data:11	def __init__(self, path):12		self.images = self.__extract_images(path)13		self.images.category, self.labels = self.images.category.factorize()14		self.images.category = self.images.category.astype(str)15		self.training, self.test = None, None16 17	def train_test_split(self, test_size=0.15, shuffle=True, stratify=False):18		return model_selection.train_test_split(19			self.images,20			test_size=test_size,21			random_state=42,22			shuffle=shuffle,23			stratify=self.images.category if stratify else None24		)25 26	def count_labels(self, data, name):27		amount = data.category.value_counts().values28		29		print(f"{name}: {amount} {np.round(amount/len(data), 2)}")30 31	def image_generator(self, shuffle=True):32		train_datagen = preprocessing.image.ImageDataGenerator(rescale=1./255, validation_split=0.2)33		test_datagen = preprocessing.image.ImageDataGenerator(rescale=1./255)34 35		generator_properties = {36			"x_col": "image",37			"y_col": "category",38			"target_size": (215, 538),39			"color_mode": "rgb",40			"class_mode": "categorical"41		}42 43		train_generator = train_datagen.flow_from_dataframe(44			**generator_properties,45 46			dataframe=self.training,47			batch_size=10,48			shuffle=shuffle,49			subset="training"50		)51 52		validation_generator = train_datagen.flow_from_dataframe(53			**generator_properties,54 55			dataframe=self.training,56			batch_size=10,57			shuffle=shuffle,58			subset="validation"59		)60 61		test_generator = test_datagen.flow_from_dataframe(62			**generator_properties,63 64			dataframe=self.test,65			batch_size=1,66			shuffle=False67		)68 69		return train_generator, validation_generator, test_generator70 71	def detectColor(self, image, lower, upper):72		if tf.is_tensor(image):73			temp_image = image.numpy().copy()74		else:75			temp_image = image.copy()76 77		hsv_image = temp_image.copy()78		hsv_image = cv.cvtColor(hsv_image, cv.COLOR_RGB2HSV)79		mask = cv.inRange(hsv_image, lower, upper)80 81		result = temp_image.copy()82		result[np.where(mask == 0)] = 083		84		return result85 86	def getImageTensor(self, images, lower, upper):87		results = []88 89		for img in images:90			results.append(np.expand_dims(self.detectColor(img, lower, upper), axis=0))91 92		return np.concatenate(results, axis=0)93 94	def show_images(self, generator, filters, name):95		generator.reset()96 97		img, label = generator.next()98 99		fig, axs = plt.subplots(nrows=3, ncols=1, constrained_layout=True)100		fig.suptitle(name)101 102		for ax in axs:103			ax.remove()104 105		gridspec = axs[0].get_subplotspec().get_gridspec()106		subfigs = [fig.add_subfigure(gs) for gs in gridspec]107 108		for row, subfig in enumerate(subfigs):109			subfig.suptitle(str(self.labels[np.argmax(label[row], axis=-1)]).title())110 111			axs = subfig.subplots(nrows=1, ncols=4)112 113			for col, ax in enumerate(axs):114				ax.imshow(list(filters.values())[col](img)[row])115				ax.set_title(list(filters)[col].title())116				ax.axis("off")117				118				ax.plot()119 120	def __extract_images(self, path):121		images = []122		123		for category in os.listdir(path):124			for filename in os.listdir(path + category):125				images.append([path + category + "/" + filename, category])126 127		return pd.DataFrame(images, columns=["image", "category"])128