Loading repository data…
Loading repository data…
Milan32555 / repository
Desarrollé una aplicación web full-stack que permite clasificar imágenes de animales utilizando un modelo de deep learning basado en MobileNetV2.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Sistema profesional de clasificación de imágenes de animales con CNN basada en MobileNetV2 (Transfer Learning) e interfaz web Flask para inferencia en tiempo real.
👉 https://animal-cnn-classifier.onrender.com/
AGENTES-INTELIGENTES/
├── .vscode/
│ ├── settings.json ⚙️ Configuración de VSCode
│ └── tasks.json 🎯 Tareas de ejecución
├── app/
│ ├── __init__.py Factory de la app Flask
│ ├── config.py Configuración centralizada
│ ├── routes.py Rutas y endpoints
│ ├── inference.py Lógica de predicción
│ ├── requirements.txt Dependencias de app
│ ├── templates/
│ │ └── index.html Interfaz web (profesional)
│ └── static/uploads/ Imágenes subidas (auto)
├── notebooks/
│ ├── CNN_Animal_Classifier.ipynb Entrenamiento completo
│ └── requirements.txt Dependencias del notebook
├── models/ Generado automáticamente
│ ├── best_model.h5 Pesos entrenados
│ ├── classes.json Mapeo de clases
│ └── model_metadata.json Métricas del modelo
├── run.py Punto de entrada (ejecutar siempre desde aquí)
├── .gitignore Archivos ignorados
└── README.md Este archivo
# En la terminal de VSCode, posicionarse en el proyecto
cd c:\Users\misae\Desktop\AGENTES-INTELIGENTES-
Opción A — Mediante Tarea VSCode (Recomendado):
Ctrl+Shift+B🔧 Instalar Todas las DependenciasOpción B — Comando manual:
pip install -r app/requirements.txt
pip install -r notebooks/requirements.txt
Opción A — Desde VSCode:
notebooks/CNN_Animal_Classifier.ipynbCtrl+Shift+B → Selecciona 📊 Abrir Notebook de Entrenamientojupyter notebook notebooks/CNN_Animal_Classifier.ipynbOpción B — Por terminal:
jupyter notebook notebooks/CNN_Animal_Classifier.ipynb
Requisitos previos para el notebook:
kaggle.json a ~/.kaggle/kaggle.jsonmkdir $env:USERPROFILE\.kaggle -Force
Copy-Item .\kaggle.json $env:USERPROFILE\.kaggle\
Opción A — Desde VSCode (Recomendado):
F5 (o Ctrl+Shift+B → selecciona 🚀 Iniciar Servidor Flask)Opción B — Comando manual:
python run.py
Versión de producción:
python run.py --prod
Presiona Ctrl+Shift+B para ver todas las tareas:
| Tarea | Descripción |
|---|---|
| 🚀 Iniciar Servidor Flask | Inicia la app en modo desarrollo (hot reload) |
| 📊 Abrir Notebook de Entrenamiento | Lanza Jupyter con el notebook |
| 📦 Instalar Dependencias (App) | Instala requisitos de Flask |
| 📦 Instalar Dependencias (Notebook) | Instala requisitos de TensorFlow |
| 🔧 Instalar Todas las Dependencias | Ejecuta ambas instalaciones en secuencia |
| 🧹 Limpiar Caché | Elimina carpetas __pycache__ |
request.image (FILE)
↓
preprocessing_image() # Redimensiona, normaliza
↓
model.predict() # MobileNetV2 CNN
↓
top-5 predicciones # Con confianza %
↓
response JSON
app/
├── __init__.py # create_app() factory
├── config.py # Configuración centralizada
├── inference.py # ModelLoader + predict()
├── routes.py # Endpoints Flask (@app.route)
└── requirements.txt # Dependencias
Patrón: Separation of Concerns (SoC) — cada módulo tiene una responsabilidad clara.
Input (224×224×3)
└─ MobileNetV2 (ImageNet pre-trained)
└─ GlobalAveragePooling2D
└─ BatchNormalization
└─ Dense(512, ReLU) + Dropout(0.4)
└─ Dense(256, ReLU) + Dropout(0.3)
└─ Dense(N_classes, Softmax)
Página principal con interfaz de clasificación.
Clasifica una imagen.
Request:
curl -F "image=@foto.jpg" http://localhost:5000/predict
Response:
{
"success": true,
"predictions": [
{
"class": "cat",
"confidence": 0.92,
"percent": "92.3%",
"rank": 1
},
...
],
"top": { "class": "cat", "confidence": 0.92, ... },
"image_url": "/static/uploads/abc123.jpg"
}
Obtiene información del modelo.
Opcionales (en .env o terminal):
FLASK_ENV=development # o production
FLASK_HOST=0.0.0.0 # Default
FLASK_PORT=5000 # Default
→ Entrena el notebook primero (ver 4️⃣ Ejecutar la aplicación)
python run.py --port 8080
pip install --upgrade tensorflow
# Mediante tarea VSCode: 🧹 Limpiar Caché
# O manualmente:
Get-ChildItem -Path . -Include '__pycache__' -Recurse | Remove-Item -Force -Recurse
✅ Estructura modular — Separación clara en config, inference, routes
✅ Factory pattern — create_app() para testing flexible
✅ Centralización — Todas las rutas y constantes en un lugar
✅ Logging robusto — Información de depuración en app.log
✅ Error handling — Excepciones claras y mensajes útiles
✅ Tasks en VSCode — Ejecutar con F5 sin terminal
✅ .gitignore — Evita subir caché, modelos, datos
✅ Documentación — En código, docstrings, README
✅ Interfaz profesional — CSS moderno, responsive, real-time feedback
✅ API RESTful — Endpoints limpios, response JSON consistente
python run.py y abrir http://localhost:5000Si hay errores, revisa app.log para detalles.
type app.log
Animal Vision — Classification CNNs Made Simple 🎯 <clase_1>/ img001.jpg img002.jpg ... <clase_2>/ ...
---
## ⚙️ Variables de configuración (notebook)
| Variable | Default | Descripción |
|----------|---------|-------------|
| `IMG_SIZE` | `(224, 224)` | Tamaño de entrada |
| `BATCH_SIZE` | `32` | Tamaño de lote |
| `EPOCHS` | `30` | Épocas máximas fase 2 |
| `FINE_TUNE_AT` | `100` | Capa desde la que se hace fine-tuning |
---
## 🗂️ Archivos generados
| Archivo | Descripción |
|---------|-------------|
| `models/best_model.h5` | Pesos del mejor modelo |
| `models/animal_cnn_savedmodel/` | Formato SavedModel (TF Serving) |
| `models/classes.json` | Mapeo índice → nombre de clase |
| `models/model_metadata.json` | Métricas y configuración |
| `models/training_curves.png` | Loss / Accuracy / Top-3 |
| `models/confusion_matrix.png` | Matriz de confusión |
| `models/prediction_errors.png` | Ejemplos de errores |
| `models/dataset_samples.png` | Muestras visuales del dataset |