Este documento detalla el diseño técnico, las funcionalidades, la base de datos y las pruebas para un sistema inteligente de gestión de clasificación de basura basado en Spring Boot.
Arquitectura Tecnológica
- Backend: Spring Boot 2.7.x, Spring MVC, MyBatis-Plus.
- Base de Datos: MySQL 8.0, optimizado para transacciones y campos JSON.
- Caché: Redis 7.x, utilizado para la gestión de sesiones de usuario y caché de datos de alta frecuencia.
- Inteligencia Artificial: Servicio micro de Python Flask integrando un modelo de clasificación de imágenes TensorFlow.
- Mensajería Asíncrona: RabbitMQ para el procesamiento desacoplado de tareas de reconocimiento de basura.
- Front end: Vue 3, Element Plus para la interfaz de usuario, ECharts para visualización de datos.
- Conectividad IoT: Protocolo MQTT para la comunicación con contenedores de basura inteligentes.
Módulos Funcionales Principales
Funcionalidades para el Usuario Final
- Reconocimiento de Basura: Permite a los usuarios tomar o subir fotos de artículos de basura para obtener su clasificación y consejos ecológicos.
- Sistema de Puntos y Recompensas: Acumulación de puntos por la correcta clasificación, canjeables por premios.
- Navegación a Puntos de Recolección: Utiliza geolocalización (LBS) para mostrar la ubicación de los contenedores inteligentes cercanos y su estado de llenado.
- Comunidad Ecológica: Espacio para que los usuarios compartan actividades relacionadas con el medio ambiente, con funcionalidades de me gusta y comentarios.
Funcionalidades para la Administración
- Gestión de Clasificación de Basura: Mantenimiento de la base de datos de reglas de clasificación (reciclables, peligrosos, orgánicos, otros).
- Monitorización de Dispositivos: Visualización en tiempo real del nivel de llenado de los contenedores, ubicación GPS y alertas de fallos.
- Análisis de Datos: Generación de mapas de calor de puntos de recolección y reportes de tendencias de precisión en la clasificación.
- Sistema de Órdenes de Trabajo: Gestión de solicitudes de mantenimiento de equipos y asignación de tareas al personal de operaciones.
Diseño de la Base de Datos
Estructura de Tablas Principales
-- Tabla de categorías de basura
CREATE TABLE `trash_categories` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL COMMENT 'Ej: "Residuos Reciclables"',
`icon_path` VARCHAR(255) COMMENT 'URL del icono',
`instructions` TEXT COMMENT 'Guía de tratamiento'
);
-- Tabla de artículos de basura (vinculada a categorías)
CREATE TABLE `trash_items` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`category_id` INT NOT NULL,
`item_name` VARCHAR(100) NOT NULL COMMENT 'Ej: "Periódico Usado"',
`ai_label` VARCHAR(50) COMMENT 'Etiqueta correspondiente para el modelo de IA',
FOREIGN KEY (`category_id`) REFERENCES `trash_categories`(`id`)
);
-- Tabla de contenedores inteligentes
CREATE TABLE `smart_bins` (
`device_uuid` VARCHAR(36) PRIMARY KEY,
`coordinates` POINT NOT NULL COMMENT 'Ubicación geográfica',
`fill_level` DECIMAL(5,2) DEFAULT 0.00 COMMENT 'Porcentaje actual de llenado',
`status` ENUM('operational','full','maintenance') DEFAULT 'operational'
) ENGINE=InnoDB;
Estrategia de Pruebas del Sistema
Pruebas de API
- Uso de Postman y Newman para la automatización de pruebas de RESTful APIs.
- Casos de prueba clave:
- API de reconocimiento de imágenes: Simulación de carga de imágenes bajo diversas condiciones de iluminación.
- Pruebas de concurrancia de cambio de puntos: Verificación de la consistencia transaccional ante múltiples solicitudes de registro de depósitos.
Pruebas del Modelo de IA
- Creación de un conjunto de datos de prueba con 2000 imágenes de diversos tipos de basura.
- Métricas de evaluación: Precisión (Accuracy) ≥ 92%, Recall ≥ 85%.
- Análisis de la matriz de confusión para identificar artículos de fácil confusión (ej. bolsas de plástico vs. film transparente).
Pruebas de Rendimiento
- Pruebas de carga con JMeter simulando 500 usuarios concurrentes:
- Tiempo de respuesta del API (P95) ≤ 800 ms.
- Tasa de aciertos de caché de Redis ≥ 80%.
- Umbral de alerta para acumulación de mensajes en RabbitMQ: 1000 mensajes.
Pruebas Específicas de IoT
- Simulación de pruebas del protocolo MQTT:
- Verificación de la sincronización de estado tras la reconexión de dispositivos.
- Validación del mecanismo de filtrado de paquetes de datos anómalos.
Ejemplo de Lógica de Negocio Clave
Pseudocódigo del Servicio de Reconocimiento de Basura
@Service
public class WasteClassificationService {
// Inyectar cliente para el servicio de IA en Python
@Autowired
private PythonAiClient pythonApiClient;
// Inyectar mapper para base de datos
@Autowired
private TrashItemMapper itemMapper;
// Inyectar servicio de registro de acciones de usuario
@Autowired
private UserActionLoggerService actionLogger;
/**
* Procesa una imagen de basura de forma asíncrona.
* @param imageFile Archivo de imagen subido.
* @return Resultado del reconocimiento.
*/
@Async("taskExecutor") // Usa un executor de tareas configurado
public CompletableFuture<RecognitionOutcome> identifyWaste(MultipartFile imageFile) {
try {
// 1. Enviar imagen al servicio de IA en Python
String aiPredictionLabel = pythonApiClient.infer(imageFile.getBytes());
// 2. Buscar el artículo correspondiente en la base de datos local
// Se asume que el método selectByAiLabel retorna el objeto TrashItem
TrashItem classifiedItem = itemMapper.findByAiLabel(aiPredictionLabel)
.orElseThrow(() -> new ItemNotFoundException("Clasificación no encontrada"));
// 3. Registrar la acción del usuario
actionLogger.record(UserEvent.WASTE_IDENTIFIED, classifiedItem.getId());
// 4. Preparar y retornar el resultado
RecognitionOutcome result = new RecognitionOutcome(classifiedItem.getName(), classifiedItem.getInstructions());
return CompletableFuture.completedFuture(result);
} catch (IOException e) {
// Manejar errores de lectura de archivo
return CompletableFuture.failedFuture(new ProcessingException("Error al procesar la imagen", e));
} catch (AiServiceException e) {
// Manejar errores de comunicación con el servicio de IA
return CompletableFuture.failedFuture(new ProcessingException("Error en el servicio de IA", e));
}
// Otros bloques catch para excepciones específicas (ItemNotFoundException, etc.)
}
}
Este sistema adopta una arquitectura de microservicios con desarrolllo desacoplado de frontend y backend. La implementación se facilita mediante Docker Compose para un despliegue rápido. Para el código fuente completo, se recomienda buscar proyectos de código abierto en plataformas como GitHub utilizando términos como "springboot smart-waste-management".