MULIMADJI est un système intelligent de surveillance agricole conçu pour détecter les maladies du maïs et surveiller les conditions environnementales à l'aide de capteurs IoT. Le système combine la détection de maladies basée sur l'apprentissage automatique avec la surveillance environnementale en temps réel pour aider les agriculteurs à optimiser la santé et le rendement des cultures.
- Framework : Flask (Python 3.11) avec serveur WSGI gunicorn
- Machine Learning : Modèle CNN basé sur PyTorch utilisant ResNet18 pour la classification des maladies du maïs
- Prédiction Météo : Modèle Scikit-learn pour les prévisions météorologiques
- Stockage de Données : Base de données PostgreSQL 16 avec modélisation complète + stockage en mémoire pour la compatibilité
- API : Endpoints RESTful pour les données des capteurs, la détection de maladies et le contrôle des appareils
- Framework UI : Bootstrap 5 avec thème sombre
- Visualisation : Chart.js pour la visualisation des données de capteurs en temps réel
- Éléments Interactifs : Intégration de caméra pour la détection de maladies, mises à jour du tableau de bord en temps réel
- Design Responsive : Approche mobile-first avec des mises en page adaptatives
1. Table sensor_readings - Données Capteurs IoT
CREATE TABLE sensor_readings (
id SERIAL PRIMARY KEY,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
-- Capteur DHT22
temperature_dht FLOAT,
humidity_dht FLOAT,
-- Capteur BMP180
temperature_bmp FLOAT,
pressure FLOAT,
-- Capteur Lumière
light_percent FLOAT,
light_raw INTEGER,
-- Capteur Sol
soil_percent FLOAT,
soil_raw INTEGER,
-- Capteur pH
ph_value FLOAT,
-- Métadonnées
device_id VARCHAR(50) DEFAULT 'ESP32_001',
location VARCHAR(100) DEFAULT 'Field_A'
);
CREATE INDEX idx_sensor_timestamp ON sensor_readings(timestamp);2. Table disease_detections - Analyses Maladies IA
CREATE TABLE disease_detections (
id SERIAL PRIMARY KEY,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
-- Image et stockage
image_filename VARCHAR(255) NOT NULL,
image_path VARCHAR(500),
image_size_bytes INTEGER,
-- Résultats ML
predicted_class VARCHAR(50) NOT NULL,
confidence FLOAT NOT NULL,
-- Informations médicales
disease_name_fr VARCHAR(100),
severity VARCHAR(20),
treatment_recommendation TEXT,
-- Métadonnées
model_version VARCHAR(20) DEFAULT 'v1.0',
processing_time_ms INTEGER,
user_notes TEXT
);
CREATE INDEX idx_disease_timestamp ON disease_detections(timestamp);
CREATE INDEX idx_disease_class ON disease_detections(predicted_class);3. Table weather_predictions - Prévisions Météo ML
CREATE TABLE weather_predictions (
id SERIAL PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
prediction_time TIMESTAMP NOT NULL,
-- Prédictions calculées
predicted_temperature FLOAT,
predicted_humidity FLOAT,
predicted_pressure FLOAT,
-- Données source
source_temperature FLOAT,
source_humidity FLOAT,
source_pressure FLOAT,
-- Qualité prédiction
model_version VARCHAR(20) DEFAULT 'v1.0',
confidence_score FLOAT,
prediction_horizon_hours INTEGER DEFAULT 1
);
CREATE INDEX idx_weather_created ON weather_predictions(created_at);
CREATE INDEX idx_weather_prediction_time ON weather_predictions(prediction_time);4. Table device_controls - Commandes IoT
CREATE TABLE device_controls (
id SERIAL PRIMARY KEY,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
-- Contrôle LED RGB
led_color VARCHAR(20),
led_pattern VARCHAR(20),
led_manual_mode BOOLEAN DEFAULT FALSE,
-- Contrôle Servo (Arrosage)
servo_angle INTEGER,
servo_manual_mode BOOLEAN DEFAULT FALSE,
watering_active BOOLEAN DEFAULT FALSE,
-- Contexte décisionnel
trigger_reason VARCHAR(100),
alert_level VARCHAR(20),
-- Conditions environnementales
condition_temperature FLOAT,
condition_humidity FLOAT,
condition_soil_moisture FLOAT
);
CREATE INDEX idx_control_timestamp ON device_controls(timestamp);
CREATE INDEX idx_control_trigger ON device_controls(trigger_reason);5. Table system_logs - Journalisation Système
CREATE TABLE system_logs (
id SERIAL PRIMARY KEY,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
-- Classification
level VARCHAR(10) NOT NULL CHECK (level IN ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')),
category VARCHAR(30) NOT NULL CHECK (category IN ('SENSOR', 'DISEASE', 'WEATHER', 'DEVICE', 'SYSTEM')),
-- Contenu
message TEXT NOT NULL,
details TEXT,
-- Traçabilité
component VARCHAR(50),
user_ip VARCHAR(45),
session_id VARCHAR(100)
);
CREATE INDEX idx_logs_timestamp ON system_logs(timestamp);
CREATE INDEX idx_logs_level ON system_logs(level);
CREATE INDEX idx_logs_category ON system_logs(category);6. Table correlation_analyses - Analyses Avancées
CREATE TABLE correlation_analyses (
id SERIAL PRIMARY KEY,
analysis_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
-- Période d'analyse
start_date TIMESTAMP NOT NULL,
end_date TIMESTAMP NOT NULL,
-- Corrélations calculées
temp_humidity_correlation FLOAT,
soil_weather_correlation FLOAT,
disease_environment_correlation FLOAT,
-- Intelligence automatique
dominant_factor VARCHAR(50),
risk_level VARCHAR(20),
recommendations TEXT,
-- Métadonnées statistiques
sample_size INTEGER,
confidence_level FLOAT DEFAULT 0.95
);
CREATE INDEX idx_correlation_date ON correlation_analyses(analysis_date);Clés Étrangères Conceptuelles :
device_controls.timestamp↔sensor_readings.timestamp(corrélation temporelle)weather_predictions.created_at↔sensor_readings.timestamp(données source)correlation_analyses.start_date/end_date→sensor_readings.timestamp(période analysée)
Contraintes de Domaine :
- Températures : -50°C à +100°C
- Humidité : 0% à 100%
- Angles servo : 0° à 180°
- Confiance ML : 0.0 à 1.0
- pH : 0 à 14
Index Composites :
CREATE INDEX idx_sensor_device_time ON sensor_readings(device_id, timestamp DESC);
CREATE INDEX idx_disease_class_time ON disease_detections(predicted_class, timestamp DESC);
CREATE INDEX idx_control_trigger_time ON device_controls(trigger_reason, timestamp DESC);Partitionnement Temporel (Future):
- Tables partitionnées par mois pour
sensor_readings - Archivage automatique après 2 ans
- Compression des données anciennes
Stratégie de Sauvegarde :
- Sauvegarde continue via PostgreSQL WAL
- Snapshot quotidien complet
- Réplication en temps réel (production)
- Vérification d'intégrité hebdomadaire
Politiques de Rétention :
sensor_readings: 2 ans (analyse saisonnière)disease_detections: 1 an (amélioration modèles)weather_predictions: 1 an (validation précision)device_controls: 6 mois (audit commandes)system_logs: 6 mois (débogage)correlation_analyses: Permanent (intelligence historique)
- Modèle : CNN basé sur ResNet18 pour classifier les maladies du maïs
- Classes supportées : 4 types (Blight, Common Rust, Gray Leaf Spot, Healthy)
- Fonctionnalités : Capture d'image en temps réel et traitement
- Recommandations : Suggestions de traitement pour les maladies détectées
- Stockage : Toutes les détections sauvegardées en base avec métadonnées complètes
- Capteur DHT22 : température et humidité
- Capteur BMP180 : pression atmosphérique et température
- Capteur de lumière : surveillance photosynthétique
- Capteur de sol : humidité et pH
- Visualisation : Graphiques en temps réel avec Chart.js
- Historique : Toutes les lectures sauvegardées avec pagination et filtres
- Système LED : Indication automatique de l'état de santé du maïs avec codes couleur
- Système d'arrosage : Servo-moteur contrôlé pour arrosage automatique
- Gestion à distance : Capacités de gestion des appareils à distance
- Historique : Traçabilité complète de toutes les commandes
- Modèle ML : Prévisions météorologiques locales
- Intégration : Utilise les données des capteurs environnementaux pour améliorer la précision
- Stockage : Historique complet des prédictions avec scores de confiance
- Collecte de Données : Les capteurs IoT collectent les données environnementales
- Traitement : Les données brutes sont traitées et stockées en base PostgreSQL + mémoire
- Mises à jour Temps Réel : Le tableau de bord reçoit des mises à jour toutes les 5 secondes via AJAX
- Détection de Maladies : Les utilisateurs capturent des images via l'interface web, traitées par le modèle CNN
- Contrôle Automatique : Le système ajuste automatiquement les indicateurs LED et l'arrosage
- Prédiction Météo : Les données historiques alimentent le modèle de prédiction météorologique
- Historique : Interface complète pour consulter, filtrer et exporter toutes les données
- Cartes de Valeurs Actuelles : Affichage en temps réel des lectures de capteurs
- Graphiques Interactifs : Visualisation des tendances avec Chart.js
- Contrôles IoT : Boutons pour contrôler LED et servo-moteur
- État du Maïs : Indicateurs de santé avec recommandations
- Capture d'Image : Interface de téléchargement d'images
- Résultats ML : Affichage des prédictions avec confiance
- Recommandations : Conseils de traitement automatiques
- Onglets Organisés :
- Données Capteurs (avec filtres et export CSV)
- Détections de Maladies (avec cartes visuelles)
- Prédictions Météo (tableau chronologique)
- Contrôles IoT (historique des commandes)
- Pagination : Navigation efficace dans les grandes quantités de données
- Filtres Avancés : Recherche par date, type, dispositif
- Export : Téléchargement CSV des données capteurs
- Python 3.11+
- PostgreSQL 16
- Environnement Render avec variables d'environnement configurées
pip install -r requirements.txt- Création automatique : Les tables sont créées automatiquement au démarrage
- Variables d'environnement : DATABASE_URL, PGHOST, PGPORT, PGUSER, PGPASSWORD, PGDATABASE
- Modélisation : 6 tables principales avec relations et index optimisés
# Via gunicorn (production)
gunicorn --bind 0.0.0.0:10000 --reuse-port --reload main:app
# Via Python (développement)
python app.pyname: Start application
command: gunicorn --bind 0.0.0.0:10000 --reuse-port --reload main:appPOST /update_sensor- Recevoir données des capteurs ESP32GET /api/latest- Dernière lecture avec prédiction météoGET /api/history- Historique des lectures (mémoire)GET /api/stats- Statistiques de base
GET /disease_detection- Page de détectionPOST /predict_disease- API de prédiction avec upload d'image
GET /get_led_command- Commande LED actuelle pour ESP32POST /set_led- Définir couleur LED ou mode autoGET /get_servo_command- Commande servo actuellePOST /set_servo- Contrôler angle servo ou mode auto
GET /corn_status- État détaillé de cultivation avec recommandations
GET /api/history/sensors- Historique capteurs avec pagination et filtresGET /api/history/diseases- Historique détections de maladiesGET /api/history/predictions- Historique prédictions météoGET /api/history/controls- Historique contrôles dispositifs
- VERT : Conditions optimales (toutes les valeurs dans les plages idéales)
- JAUNE : Avertissement (1 paramètre légèrement hors plage)
- CYAN : Problème température/humidité combiné
- BLEU : Arrosage nécessaire (humidité sol < 50%)
- MAGENTA : pH problématique (< 5.5 ou > 7.5)
- ROUGE : Critique (1+ paramètres critiques ou 2+ avertissements)
- BLANC : Données manquantes
- Température : 18-24°C
- Humidité Air : 50-70%
- Humidité Sol : 60-80%
- pH : 5.8-7.0
- Lumière : >50%
- Arrosage Urgent : Sol < 40% (servo 90°)
- Arrosage Léger : Température > 26°C et sol < 50% (servo 45°)
- Repos : Conditions normales (servo 0°)
- Architecture : ResNet18 personnalisé avec 4 classes de sortie
- Classes : Blight, Common_Rust, Gray_Leaf_Spot, Healthy
- Préprocessing : Redimensionnement 256x256, normalisation ImageNet
- Fichier : model_maladies.pth
- Type : Modèle de régression (Scikit-learn)
- Entrées : Température, humidité, pression actuelles
- Sorties : Prédictions pour les 6 prochaines heures
- Fichier : meteo_model.joblib
- Images : Validation format, taille max 10MB, types autorisés
- Capteurs : Vérification plages de valeurs, gestion erreurs
- Base de données : Transactions avec rollback automatique
- Fallback : Stockage mémoire si base de données indisponible
- Logging : Système de logs complet avec niveaux
- Retry Logic : Reconnexion automatique base de données
- Pagination : Gestion efficace des grandes quantités de données
- Index : Optimisation des requêtes avec index sur timestamps
- Caching : Stockage hybride mémoire + base de données
- Alertes : Notifications push/email pour conditions critiques
- Rapports : Génération automatique de rapports agricoles
- Machine Learning : Amélioration continue des modèles avec nouvelles données
- API Mobile : Application mobile pour agriculteurs
- Intégration : Connexion avec d'autres systèmes agricoles
- Multi-fermes : Support de plusieurs exploitations
- Cloud : Migration vers infrastructure cloud
- IoT : Support de capteurs additionnels
- IA : Modèles prédictifs plus sophistiqués
- Système de logs : 5 niveaux (DEBUG, INFO, WARNING, ERROR, CRITICAL)
- Base de données : Table system_logs pour traçabilité
- Performance : Métriques de temps de traitement
- PostgreSQL : Sauvegarde automatique des données
- Modèles ML : Versioning des modèles d'apprentissage
- Configuration : Sauvegarde des paramètres système
Contact : Pour toute question technique ou support, contactez nous
Version : 2.1 (Juin 2025)
Licence : Système propriétaire pour applications agricoles IoT