Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import cv2 | |
| from tensorflow.keras.preprocessing.image import ImageDataGenerator | |
| from . import config | |
| # Define the generator with your specific settings | |
| # Note: We removed 'preprocessing_function' because our feature pipeline handles color/contrast. | |
| # This generator focuses on GEOMETRIC variations. | |
| datagen = ImageDataGenerator( | |
| rotation_range=30, | |
| width_shift_range=0.1, | |
| height_shift_range=0.1, | |
| shear_range=0.1, | |
| zoom_range=0.2, | |
| horizontal_flip=True, | |
| fill_mode='nearest' | |
| ) | |
| def get_augmentation_factor(class_name, class_counts, max_count): | |
| """ | |
| Calculates how many augmented versions we need per image | |
| to reach the majority class count. | |
| """ | |
| current_count = class_counts.get(class_name, 0) | |
| if current_count == 0: return 0 | |
| # Example: If Max=1000 and Current=100, factor is 10. | |
| # We need 9 new images for every 1 original image. | |
| factor = int(max_count / current_count) | |
| return factor | |
| def generate_augmented_images(img, count=1): | |
| """ | |
| Takes an OpenCV image, converts to Keras format, generates 'count' variations, | |
| and returns them as a list of OpenCV images. | |
| """ | |
| if count <= 0: return [] | |
| # 1. Keras expects RGB, OpenCV is BGR. Convert for safety (though geometric ops don't care) | |
| img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) | |
| # 2. Keras expects 4D array (Batch Size, Height, Width, Channels) | |
| img_expanded = np.expand_dims(img_rgb, 0) | |
| augmented_images = [] | |
| # 3. Generate | |
| # flow() generates batches indefinitely, so we loop 'count' times | |
| i = 0 | |
| for batch in datagen.flow(img_expanded, batch_size=1): | |
| # Retrieve the single image from batch | |
| aug_img = batch[0].astype('uint8') | |
| # Convert back to BGR for our feature pipeline | |
| aug_img_bgr = cv2.cvtColor(aug_img, cv2.COLOR_RGB2BGR) | |
| augmented_images.append(aug_img_bgr) | |
| i += 1 | |
| if i >= count: | |
| break | |
| return augmented_images |