Skip to content

Latest commit

 

History

76 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CacaoLens 🌱

Aplicación móvil con deep learning para la clasificación de frutos de cacao con pudrición negra, daño por pod borer y estado saludable

👥 Autores

📋 Estructura del Proyecto

CacaoLens/
├── frontend/           # Aplicación Flutter
├── backend/
│   ├── backend/       # API REST con ExpressJS + Prisma + MySQL
│   └── ML-service/    # Servicio ML Flask para predicciones
├── ML/                # Código de entrenamiento del modelo
├── docker-compose.yml
└── start.bat/start.sh # Scripts de inicio rápido

🚀 Tecnologías

Backend

  • ExpressJS: Framework web para Node.js
  • Prisma ORM: ORM moderno para TypeScript/JavaScript
  • MySQL: Base de datos relacional
  • Arquitectura MVC: Separación de responsabilidades

Machine Learning

  • Flask: API ligera para Python
  • TensorFlow/Keras: Framework de Deep Learning
  • OpenCV: Procesamiento de imágenes
  • InceptionV3: Modelo CNN pre-entrenado

Frontend

  • Flutter: Framework multiplataforma
  • Provider: Gestión de estado
  • Material Design 3: Diseño moderno

📚 Recursos

🎯 Inicio Rápido

Opción 1: Script Automático (Recomendado)

Windows:

start.bat

Linux/Mac:

chmod +x start.sh
./start.sh

📦 Instalación y Configuración

Prerequisitos

  • Docker & Docker Compose
  • Git

Pasos de Instalación

  1. Clonar el repositorio
git clone https://github.com/adminLTR/CacaoLens.git
cd CacaoLens
  1. Configurar variables de entorno
# Copiar archivos de ejemplo
cp .env.example .env
cp backend/backend/.env.example backend/backend/.env
cp backend/ML-service/.env.example backend/ML-service/.env
cp ML/.env.example ML/.env
cp frontend/.env.example frontend/.env

# Editar los archivos .env con tus configuraciones
  1. Construir y ejecutar con Docker
# Construir las imágenes
docker-compose build

# Iniciar los servicios
docker-compose up -d

# Ver los logs
docker-compose logs -f
  1. Inicializar la base de datos

El backend se encarga automáticamente de:

  • ✅ Generar el cliente de Prisma
  • ✅ Sincronizar el esquema con prisma db push
  • ✅ Ejecutar seeders con datos iniciales (upsert)

Esto ocurre en cada inicio del backend gracias al entrypoint.sh.

Para agregar datos de prueba, edita backend/prisma/seed.js:

# Ver logs del proceso de seeding
docker-compose logs backend

🌐 Acceso a los Servicios

Una vez iniciados los contenedores:

⚠️ Nota sobre el Frontend:
El frontend de Flutter es una aplicación móvil nativa (APK) que se compila con Docker pero no se ejecuta como servicio web. Para usarla, debes compilar e instalar el APK en un dispositivo Android o emulador.

📱 Compilar e Instalar la App Móvil

Compilación rápida del APK:

# Windows
.\build-apk.ps1
# Linux/Mac (crear script similar o usar comandos manuales)
docker-compose build frontend

El APK compilado estará en: apk-output/cacaolens.apk

Instalación:

# Con ADB (dispositivo conectado por USB)
adb install apk-output/cacaolens.apk

# O transfiere el archivo APK manualmente a tu dispositivo

📖 Documentación completa: Ver BUILD-APK.md para instrucciones detalladas

📱 Desarrollo Local

Frontend (Flutter)

Para desarrollo de la app móvil sin Docker:

cd frontend

# Instalar dependencias
flutter pub get

# Ejecutar en desarrollo
flutter run

# Para Android
flutter run -d android

# Para iOS
flutter run -d ios

Backend (Express)

# Instalar dependencias
npm install

# Desarrollo
npm run dev

# Producción
npm start

# Prisma
npm run prisma:generate
npm run prisma:push     # Sincronizar esquema
npm run seed            # Ejecutar seeders

Backend (ML Service)

# Instalar dependencias
pip install -r requirements.txt

# Ejecutar API
python app.py

# Modelo local
# El servicio intenta cargar primero un .tflite y luego un .keras:
# models/Cacao_InceptionV3_best.tflite
# models/Cacao_InceptionV3_best.keras

# Recargar el modelo
curl -X POST http://localhost:8000/reload-model

🧠 Entrenamiento del Modelo con docker

  1. Preparar el dataset
ML/data/
├── train/
│   ├── saludable/
│   ├── pudricion_negra/
│   └── pod_borer/
└── validation/
    ├── saludable/
    ├── pudricion_negra/
    └── pod_borer/
  1. Entrenar el modelo
# Usa el notebook/código de entrenamiento dentro de ML/src
  1. Recargar el modelo en la API
curl -X POST http://localhost:8000/reload-model

🛠️ Comandos Útiles

# Iniciar servicios
docker-compose up -d

# Detener servicios
docker-compose down

# Reconstruir servicios
docker-compose up -d --build

# Ver logs de un servicio específico
docker-compose logs -f backend
docker-compose logs -f ml-service
docker-compose logs -f frontend

# Acceder al contenedor
docker-compose exec backend sh
docker-compose exec ml-service bash

📊 API Endpoints

Backend API

Auth

  • POST /api/auth/register - Registrar usuario
  • POST /api/auth/login - Iniciar sesión
  • POST /api/auth/logout - Cerrar sesión
  • GET /api/auth/profile - Obtener perfil autenticado
  • PUT /api/auth/profile - Actualizar perfil autenticado
  • PUT /api/auth/change-password - Cambiar contraseña
  • DELETE /api/auth/account - Desactivar cuenta

Analysis

  • POST /api/analysis/image - Analizar imagen
  • GET /api/analysis - Obtener historial de análisis
  • GET /api/analysis/:id - Obtener análisis específico

ML Service API

  • GET / - Estado del servicio
  • GET /health - Health check
  • POST /predict - Predecir desde imagen
  • POST /reload-model - Recargar modelo

🏗️ Arquitectura

┌─────────────┐
│   Flutter   │
│  Frontend   │
└──────┬──────┘
       │
       ▼
┌─────────────┐     ┌──────────────┐
│  Express    │────▶│   MySQL      │
│  Backend    │     │   Database   │
└──────┬──────┘     └──────────────┘
       │
       ▼
┌─────────────┐
│   Flask     │
│  ML Service │
└─────────────┘

🔒 Seguridad

  • Cambiar todas las credenciales por defecto en producción
  • Usar variables de entorno para datos sensibles
  • Implementar autenticación JWT para el backend
  • Configurar CORS apropiadamente
  • Usar HTTPS en producción

📝 Notas de Desarrollo

Base de Datos

  • Las migraciones de Prisma se aplican automáticamente al iniciar
  • El schema se encuentra en backend/prisma/schema.prisma

Machine Learning

  • El modelo base usa una arquitectura CNN simple
  • El modelo entrenado se guarda en ML/models/

Frontend

  • Usa Provider para gestión de estado
  • Arquitectura en capas: screens, providers, services, widgets
  • Responsive design con Material Design 3

🤝 Contribuir

  1. Fork el proyecto
  2. Crea tu rama de feature (git checkout -b feature/AmazingFeature)
  3. Commit tus cambios (git commit -m 'Add some AmazingFeature')
  4. Push a la rama (git push origin feature/AmazingFeature)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está bajo la licencia MIT.

About

Aplicación móvil con deep learning para la clasificación de frutos de cacao con pudrición negra, daño por pod borer y estado saludable

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages