Copy faces into folders
Copy faces into folders
import sys, os, random, glob, shutil
files = glob.glob('faces/*.png')
files = list(files)
random.shuffle(files)
if not os.path.exists('faces-data/train/1'): os.makedirs('faces-data/train/1')
if not os.path.exists('faces-data/test/1'): os.makedirs('faces-data/test/1')
train_size = 10000
test_size = 10
train_set = files[:train_size]
test_set = files[train_size:train_size+test_size]
for f in train_set:
basename = os.path.basename(f)
from_path = os.path.join('faces', basename)
to_path = os.path.join('faces-data/train/1', basename)
shutil.copyfile(from_path, to_path)
for f in test_set:
basename = os.path.basename(f)
from_path = os.path.join('faces', basename)
to_path = os.path.join('faces-data/test/1', basename)
shutil.copyfile(from_path, to_path)
Load folder into X,y arrays
def load_image_folder_data(folder_path, image_size=(256, 256), split=0.8, seed=123):
"""
Load images from folder structure into train/test NumPy arrays.
Expects a folder structure with class subfolders.
Returns:
(x_train, y_train), (x_test, y_test)
"""
# Create a dataset
dataset = tf.keras.preprocessing.image_dataset_from_directory(
folder_path,
image_size=image_size,
batch_size=None, # Load one image at a time
shuffle=True,
seed=seed
)
# Convert to numpy arrays
x_data = np.array([img.numpy() for img, _ in dataset])
y_data = np.array([label.numpy() for _, label in dataset])
# Create train/test split
split_idx = int(len(x_data) * split)
x_train, x_test = x_data[:split_idx], x_data[split_idx:]
y_train, y_test = y_data[:split_idx], y_data[split_idx:]
return (x_train, y_train), (x_test, y_test)