forestwatch-tg / README.md
kjd-dktech's picture
Update README.md
332c6d8 verified
---
license: cc-by-nc-4.0
language:
- fr
- en
tags:
- earth-observation
- sentinel-2
- land-cover
- remote-sensing
- random-forest
- deforestation
- togo
---
# ForestWatch Togo : Land Cover AI Monitor 🌍🛰️
Ce dépôt contient les artefacts de production (modèle d'Intelligence Artificielle et scaler) du projet **ForestWatch Togo**.<br>
Ce système permet de classifier l'occupation des sols à partir de l'imagerie satellite Sentinel-2 (*résolution 10m*).
## 🧠 Détails du Modèle
* **Algorithme :** `RandomForestClassifier` (Scikit-Learn).
* **Entraînement :** Entraîné sur un jeu de données extrait via Google Earth Engine, ciblant spécifiquement la région du Togo.
* **Variables d'entrée (Features) :** Le modèle s'attend à recevoir un tableau (`pandas.DataFrame`) contenant très exactement ces **18 colonnes**, et dans cet ordre strict :
```python
features_attendues = [
'B12', 'B12_contrast', 'B12_diss',
'B4', 'B4_var',
'B8', 'B8_asm', 'B8_contrast', 'B8_diss',
'NDBI', 'NDBI_contrast', 'NDBI_diss',
'NDVI', 'NDVI_contrast', 'NDVI_diss',
'NDWI', 'NDWI_contrast', 'NDWI_diss'
]
```
* **Sorties (6 Classes) :**
1: Eau | 2: Arbres/Forêt | 3: Végétation inondée | 4: Cultures | 5: Urbain | 6: Savane & Buissons / Sol Nu
## 📦 Architecture des fichiers
* `rfc_production_v1.joblib` : Le modèle prédictif final.
* `scaler_production.joblib` : Le StandardScaler (indispensable pour conformer les données avant l'inférence).
## 💻 Exemple d'utilisation (Python)
Voici comment télécharger dynamiquement les artefacts depuis ce repository et effectuer une prédiction en Python :
```python
import pandas as pd
import joblib
from huggingface_hub import hf_hub_download
REPO_ID = "kjd-dktech/forestwatch-tg"
# 1. Télécharger et charger les poids de production depuis Hugging Face
scaler_path = hf_hub_download(repo_id=REPO_ID, filename="scaler_production.joblib")
model_path = hf_hub_download(repo_id=REPO_ID, filename="rfc_production_v1.joblib")
scaler = joblib.load(scaler_path)
model = joblib.load(model_path)
# 2. Préparer vos nouvelles données
# Le tableau doit contenir exactement les 18 features attendues
features_attendues = [
'B12', 'B12_contrast', 'B12_diss',
'B4', 'B4_var',
'B8', 'B8_asm', 'B8_contrast', 'B8_diss',
'NDBI', 'NDBI_contrast', 'NDBI_diss',
'NDVI', 'NDVI_contrast', 'NDVI_diss',
'NDWI', 'NDWI_contrast', 'NDWI_diss'
]
donnees_entree = pd.DataFrame([
# Simulation d'un pixel (18 valeurs fictives)
[0.10, 1.2, 0.5, 0.06, 0.05, 0.25, 0.15, 0.8, 0.4, -0.2, 0.3, 0.2, 0.6, 0.9, 0.3, -0.4, 0.5, 0.1]
], columns=features_attendues)
# 3. Appliquer la normalisation
X_scaled = scaler.transform(donnees_entree)
# 4. Prédire la classe d'occupation du sol
predictions = model.predict(X_scaled)
print("Classe prédite :", predictions[0])
# Ex: Sortie 2 (Forêt)
```
## 🚀 Utilisation en Production
Ce modèle est conçu pour fonctionner dynamiquement avec l'API Stateless développée pour le projet. <br>
L'API télécharge automatiquement ces poids lors de son démarrage grâce à `huggingface_hub`.
Pour utiliser le code complet, l'API et l'infrastructure Docker, veuillez consulter le repository GitHub officiel :
🔗 **[GitHub - ForestWatch Togo](https://github.com/kjd-dktech/forestwatch-tg)**
---
*Développé par [Kodjo Jean DEGBEVI (@kjd-dktech)] - Licence CC-BY-NC-4.0*