| --- |
| 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* |