--- title: Fruit Classifier emoji: 馃崗 colorFrom: green colorTo: gray sdk: gradio sdk_version: 5.28.0 app_file: app.py pinned: false --- # Fruit Classifier Este es un clasificador de frutas entrenado desde cero con un modelo CNN utilizando TensorFlow. ### Descripci贸n Este modelo es capaz de clasificar im谩genes de frutas en tres categor铆as: Manzana, Banana y Naranja. ### Uso 1. Carga una imagen de una fruta (manzana, banana, naranja). 2. El modelo predecir谩 qu茅 fruta es. 3. La salida ser谩 el nombre de la fruta. ### Modelo El modelo se entren贸 utilizando un conjunto de im谩genes de frutas y se guard贸 como un modelo `.keras` en Hugging Face. ### Tecnolog铆as - TensorFlow - Gradio # Clasificador de Frutas con CNN (Keras/TensorFlow) Este repositorio contiene un clasificador de frutas basado en una red neuronal convolucional (CNN) entrenada desde cero utilizando Keras/TensorFlow. El modelo ha sido entrenado con un conjunto de datos de im谩genes de frutas (manzanas, naranjas, pl谩tanos, etc.) y est谩 disponible p煤blicamente en Hugging Face Model Hub. ## Descripci贸n del Proyecto El objetivo de este proyecto es crear un modelo de aprendizaje autom谩tico capaz de clasificar im谩genes de frutas en diferentes categor铆as, utilizando t茅cnicas de procesamiento de im谩genes y redes neuronales convolucionales (CNN). El modelo fue entrenado con un conjunto de im谩genes de frutas y se almacen贸 en Hugging Face para su acceso y uso posterior. ## Pasos del Proyecto ### 1. Recolecci贸n y Preparaci贸n del Dataset #### **Dataset:** El conjunto de datos utilizado en este proyecto fue generado manualmente. El dataset consiste en im谩genes de frutas (manzanas, naranjas y pl谩tanos), con una cantidad limitada de im谩genes (aproximadamente 8-9 im谩genes por fruta para entrenamiento y 3 im谩genes por fruta para validaci贸n). Las im谩genes fueron recortadas y redimensionadas para ser de tama帽o 150x150 p铆xeles. #### **Estructura del Dataset:** Las im谩genes se organizaron en dos carpetas principales: - **training**: Contiene las im谩genes de entrenamiento organizadas por categor铆as (manzanas, naranjas, pl谩tanos). - **validation**: Contiene las im谩genes de validaci贸n organizadas de manera similar. El dataset fue subido a Hugging Face Datasets para facilitar su acceso y compartirlo p煤blicamente. ### 2. Creaci贸n del Modelo Se utiliz贸 una red neuronal convolucional (CNN) para la clasificaci贸n de las im谩genes. La arquitectura del modelo es simple, pero eficiente, y est谩 dise帽ada para tareas de clasificaci贸n de im谩genes. #### **Arquitectura del Modelo:** El modelo consta de varias capas convolucionales y de agrupamiento (pooling) para extraer caracter铆sticas de las im谩genes. A continuaci贸n se muestra la arquitectura: - **Capa 1:** Convoluci贸n 2D (32 filtros, tama帽o 3x3), seguida de MaxPooling 2D. - **Capa 2:** Convoluci贸n 2D (64 filtros, tama帽o 3x3), seguida de MaxPooling 2D. - **Capa 3:** Convoluci贸n 2D (128 filtros, tama帽o 3x3), seguida de MaxPooling 2D. - **Capa 4:** Convoluci贸n 2D (256 filtros, tama帽o 3x3), seguida de MaxPooling 2D. - **Capa de Aplanado (Flatten):** Convierte las salidas 2D en un vector 1D. - **Capa Densa:** Capa densa de 256 neuronas con activaci贸n ReLU. - **Capa de Salida:** Capa densa con tantas neuronas como clases de frutas (3 clases en este caso: manzana, naranja, pl谩tano), usando activaci贸n softmax. #### **Compilaci贸n del Modelo:** El modelo fue compilado utilizando el optimizador **SGD** (Stochastic Gradient Descent) con una tasa de aprendizaje de 0.003 y momentum de 0.9. La funci贸n de p茅rdida utilizada es **categorical_crossentropy**, adecuada para tareas de clasificaci贸n multiclase. #### **Regularizaci贸n:** Se utiliz贸 **Dropout** en la capa densa para reducir el riesgo de sobreajuste (overfitting) durante el entrenamiento. ### 3. Entrenamiento del Modelo El modelo fue entrenado durante 100 茅pocas con un tama帽o de batch de 8 im谩genes. Se aplic贸 un proceso de **data augmentation** (aumento de datos) durante el entrenamiento, lo cual permite mejorar la generalizaci贸n del modelo al generar variaciones en las im谩genes de entrenamiento (rotaciones, cambios de brillo, desplazamientos, etc.). Durante el proceso de entrenamiento, se utiliz贸 la t茅cnica de **early stopping** para evitar el sobreajuste, deteniendo el entrenamiento si la p茅rdida de validaci贸n no mejoraba durante 7 茅pocas consecutivas. ### 4. Guardado y Carga del Modelo Una vez entrenado, el modelo se guard贸 como un archivo `.h5` para ser utilizado posteriormente. Adem谩s, el modelo fue cargado a Hugging Face Model Hub para compartirlo con la comunidad. #### **Archivo Guardado:** El modelo se guard贸 como `modelo_frutas_transfer.keras` en el repositorio de Hugging Face. ### 5. Creaci贸n de la Demo en Hugging Face Spaces Para crear una interfaz p煤blica para interactuar con el modelo, se utiliz贸 **Gradio**. Gradio es una biblioteca de Python que permite crear interfaces de usuario interactivas con facilidad. #### **Interfaz Gradio:** La demo permite cargar una imagen de fruta y el modelo devuelve la clasificaci贸n de la fruta (manzana, naranja o pl谩tano). La interfaz se implement贸 de la siguiente manera: ```python import gradio as gr import tensorflow as tf from tensorflow.keras.models import load_model from tensorflow.keras.preprocessing import image import numpy as np # Cargar el modelo model = load_model('https://huggingface.co/imanolcb/basicFruitClassifier/resolve/main/modelo_frutas_transfer.keras') # Funci贸n para la predicci贸n def predict(img): img = image.load_img(img, target_size=(150, 150)) img_array = image.img_to_array(img) / 255.0 # Normalizaci贸n img_array = np.expand_dims(img_array, axis=0) # Cambiar la forma para predicci贸n prediction = model.predict(img_array) class_names = ['manzana', 'naranja', 'platano'] # Modificar con tus clases predicted_class = class_names[np.argmax(prediction)] return predicted_class # Interfaz de Gradio iface = gr.Interface(fn=predict, inputs=gr.Image(type="filepath"), outputs=gr.Text(), live=True, title="Clasificador de Frutas", description="Cargar una imagen de fruta para clasificarla.") # Iniciar la interfaz iface.launch()