-
-
Save anaves/442f2bc0b06bf813e602f52da18273ac to your computer and use it in GitHub Desktop.
Data augmentation in few lines with skimage
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import random | |
from scipy import ndarray | |
# image processing library | |
import skimage as sk | |
from skimage import transform | |
from skimage import util | |
from skimage import io | |
def random_rotation(image_array: ndarray): | |
# pick a random degree of rotation between 25% on the left and 25% on the right | |
random_degree = random.uniform(-25, 25) | |
return sk.transform.rotate(image_array, random_degree) | |
def random_noise(image_array: ndarray): | |
# add random noise to the image | |
return sk.util.random_noise(image_array) | |
def horizontal_flip(image_array: ndarray): | |
# horizontal flip doesn't need skimage, it's easy as flipping the image array of pixels ! | |
return image_array[:, ::-1] | |
# dictionary of the transformations we defined earlier | |
available_transformations = { | |
'rotate': random_rotation, | |
'noise': random_noise, | |
'horizontal_flip': horizontal_flip | |
} | |
folder_path = 'images/cat' | |
num_files_desired = 10 | |
# find all files paths from the folder | |
images = [os.path.join(folder_path, f) for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))] | |
num_generated_files = 0 | |
while num_generated_files <= num_files_desired: | |
# random image from the folder | |
image_path = random.choice(images) | |
# read image as an two dimensional array of pixels | |
image_to_transform = sk.io.imread(image_path) | |
# random num of transformation to apply | |
num_transformations_to_apply = random.randint(1, len(available_transformations)) | |
num_transformations = 0 | |
transformed_image = None | |
while num_transformations <= num_transformations_to_apply: | |
# random transformation to apply for a single image | |
key = random.choice(list(available_transformations)) | |
transformed_image = available_transformations[key](image_to_transform) | |
num_transformations += 1 | |
new_file_path = '%s/augmented_image_%s.jpg' % (folder_path, num_generated_files) | |
# write image to the disk | |
io.imsave(new_file_path, transformed_image) | |
num_generated_files += 1 |
Approximately 15 min. But I did in the Colab env.
How much time would it approximately take to run on a folder with around 50 images?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Sorry, I don't remember how long it would take, but on my machine it was fast.