Muchas veces, al descargar un conjunto de datos relacionados con un anime, personaje o concepto, nos encontramos con imágenes de baja calidad y de poca utilidad. Para poder aprovechar al máximo estos datos, es conveniente realizar una clasificación que nos permita crear diferentes conjuntos de datos con distintos niveles de calidad.
Con este programa, puedes clasificar rápidamente las imágenes en categorías como "Premium", "Media" y "Baja calidad". Esto te brinda la oportunidad de entrenar tu modelo con conjuntos de datos específicos y ajustar la cantidad de repeticiones de las imágenes de baja calidad para que tengan menos influencia en el resultado final.
Además, puedes utilizar estos conjuntos de datos clasificados para entrenar varios modelos, cada uno enfocado en una calidad específica. Esto te brinda flexibilidad y opciones para obtener los mejores resultados según tus necesidades.
La utilidad de una buena clasificación es amplia y diversa. Puedes optimizar tus modelos de aprendizaje automático, filtrar y seleccionar imágenes de mayor calidad, generar conjuntos de datos balanceados y mucho más. Con esta herramienta, puedes ahorrar tiempo y esfuerzo al clasificar rápidamente cientos de imágenes en cuestión de minutos.
Por eso creamos este programa, el cual permite clasificar imágenes en diferentes grupos o categorías. Al ejecutarlo, se mostrará una imagen a la vez y se te presentarán varios botones que representan las diferentes categorías. Simplemente debes hacer clic en el botón correspondiente para clasificar la imagen en ese grupo. El programa se encargará de mover la imagen a la carpeta adecuada. Repite este proceso con cada imagen hasta que todas estén clasificadas. Es una forma eficiente de organizar y categorizar imágenes de acuerdo a tus necesidades.
~~~~
import os
import random
import shutil
from PIL import Image
from IPython.display import display, clear_output
from ipywidgets import widgets, VBox, HBox
# Ruta de la carpeta que contiene las imágenes
EeveelutionsCollection = "EeveelutionsCollection" #@param {type:"string"}
images_folder = f"/content/drive/MyDrive/Dataset/{EeveelutionsCollection}"
# Obtener la lista de imágenes en la carpeta
images = [os.path.join(images_folder, filename) for filename in os.listdir(images_folder) if
filename.endswith(".jpg") or filename.endswith(".png")]
# Inicializar variables
current_image = 0
buttons_layout = None
# Obtener el número de botones (carpetas) deseado
num_buttons = 3 #@param {type:"slider", min:0, max:10, step:1}
# Cambiar por el número deseado
# Crear las subcarpetas y los botones
subfolders = []
buttons = []
# Lista de emojis con variedad visual
emojis = ["😃", "😊", "🥳", "🤩", "😎", "🤔", "🌟", "🎉", "🌈", "🦄",
"🍕", "🍦", "🎈", "🎁", "🎵", "💃", "🚀", "⚡️", "🔥", "❤️",
"💪", "🌺", "🍓", "🐶", "🐼", "🐬", "🏀", "⛵️", "🏰", "🌌"]
for i in range(num_buttons):
subfolder_path = os.path.join(images_folder, f"Subcarpeta{i+1}")
subfolders.append(subfolder_path)
os.makedirs(subfolder_path, exist_ok=True)
# Obtener un emoji aleatorio y no repetible
emoji = random.choice(emojis)
emojis.remove(emoji)
button = widgets.Button(description=f"Botón {i+1} {emoji}")
button.on_click(lambda x, folder=subfolder_path: move_image(folder))
buttons.append(button)
# Función para mover la imagen a la subcarpeta correspondiente
def move_image(subfolder):
global current_image
if current_image < len(images):
image_path = images[current_image]
image_filename = os.path.basename(image_path)
new_image_path = os.path.join(subfolder, image_filename)
shutil.move(image_path, new_image_path)
print(f"Imagen movida a la subcarpeta: {subfolder}")
current_image += 1
# Cargar la siguiente imagen
clear_output(wait=True)
load_next_image()
# Función para cargar la siguiente imagen
def load_next_image():
global current_image, buttons_layout
# Verificar si quedan imágenes por mostrar
if current_image < len(images):
# Cargar la imagen actual
image_path = images[current_image]
image = Image.open(image_path).resize((200, 200))
# Mostrar la imagen usando el widget IPython.display
display(image)
# Imprimir el contador de imágenes restantes
print(f"Imágenes restantes: {len(images) - current_image}")
# Actualizar los botones
buttons_layout = HBox(buttons)
display(buttons_layout)
else:
# Se han mostrado todas las imágenes
print("Se han movido todas las imágenes")
# Crear el diseño horizontal de los botones
buttons_layout = HBox(buttons)
# Cargar la primera imagen
load_next_image()
Resumen:
Importación de bibliotecas: Importamos varias bibliotecas que nos permitirán trabajar con imágenes, interactuar con widgets y mostrar imágenes en el entorno de Jupyter Notebook.
Definición de la carpeta de imágenes: Se especifica la ruta de la carpeta que contiene las imágenes que queremos clasificar. Puedes ajustar esta ruta según tus necesidades.
Obtención de la lista de imágenes: El código busca en la carpeta especificada todas las imágenes con extensión .jpg o .png y crea una lista con las rutas completas de cada imagen.
Inicialización de variables: Se establecen algunas variables iniciales, como el índice de la imagen actual y la variable para el diseño de los botones.
Obtención del número de botones: Mediante un control deslizante, se puede seleccionar el número deseado de botones (carpetas) en los que se clasificarán las imágenes.
Creación de subcarpetas y botones: Se generan las subcarpetas donde se moverán las imágenes y se crean los botones correspondientes a cada subcarpeta. También se selecciona aleatoriamente un emoji de una lista predefinida para mostrarlo en el texto del botón.
Función para mover la imagen: Cuando se presiona un botón, esta función se ejecuta. Mueve la imagen actual a la subcarpeta correspondiente, utilizando la función
shutil.move()
. Luego, incrementa el índice de la imagen actual y carga la siguiente imagen.Función para cargar la siguiente imagen: Esta función carga la imagen actual y la muestra en el entorno de Jupyter Notebook utilizando el widget
IPython.display
. También actualiza el contador de imágenes restantes y muestra los botones.Diseño de los botones: Se crea un diseño horizontal (
HBox
) para mostrar los botones de clasificación.Cargar la primera imagen: Al iniciar el código, se carga y muestra la primera imagen para comenzar el proceso de clasificación.
~~~~
Consideraciones y Precauciones al usar este Código:
Verificar la ruta de la carpeta de imágenes: Asegúrate de que la variable
images_folder
contenga la ruta correcta de la carpeta que contiene las imágenes que deseas clasificar. Asegúrate de que la carpeta exista y contenga las imágenes que deseas procesar.Revisar la extensión de los archivos de imagen: El código está configurado para buscar archivos con extensión
.jpg
o.png
. Si tus imágenes tienen una extensión diferente, debes modificar la líneafilename.endswith(".jpg") or filename.endswith(".png")
para incluir la extensión correcta.Definir el número de botones y subcarpetas deseadas: El código utiliza la variable
num_buttons
para determinar la cantidad de botones y subcarpetas que se crearán. Ajusta este valor según tus necesidades. Recuerda que el número máximo permitido es 10.Uso de emojis: El programa utiliza emojis para etiquetar los botones y las subcarpetas. Asegúrate de tener una fuente de emojis disponible en tu entorno de ejecución para que se muestren correctamente.
Interactuar con los botones: Al ejecutar el programa, se mostrará una imagen a la vez y se presentarán los botones correspondientes. Haz clic en el botón que corresponda a la clasificación deseada para mover la imagen a la subcarpeta adecuada. Ten cuidado al hacer clic, ya que el movimiento de la imagen es irreversible.
Finalización del programa: Una vez que se hayan mostrado todas las imágenes y se hayan movido a las subcarpetas correspondientes, el programa imprimirá el mensaje "Se han movido todas las imágenes". Verifica que todas las imágenes hayan sido clasificadas correctamente antes de finalizar.
Respaldo de las imágenes: Antes de ejecutar el código, asegúrate de tener una copia de seguridad de tus imágenes originales. El programa moverá las imágenes a las subcarpetas, lo que implica un cambio en su ubicación. Mantén una copia de seguridad para evitar pérdida de datos.
Cambios en el entorno de ejecución: Si estás ejecutando el código en un entorno diferente, como Jupyter Notebook, asegúrate de tener todas las bibliotecas necesarias instaladas. Si encuentras algún error relacionado con las bibliotecas, asegúrate de tener la versión correcta instalada.
Consideraciones de rendimiento: Si tienes una gran cantidad de imágenes, ten en cuenta que el procesamiento puede llevar tiempo y consumir recursos del sistema. Asegúrate de tener suficiente capacidad de almacenamiento y recursos disponibles para completar el proceso de clasificación.
Recuerda que es importante entender y revisar el código antes de ejecutarlo. Siempre es recomendable realizar pruebas en un conjunto de imágenes de prueba antes de aplicarlo a un conjunto de datos completo.
~~~~~~~~~~~~~~~~~~~~
Abrir en Gith
Abrir en Colab
Financial assistance: Hello everyone!
This is Tomas Agilar speaking, and I'm thrilled to have the opportunity to share my work and passion with all of you. If you enjoy what I do and would like to support me, there are a few ways you can do so:
Ko-fi (Dead)