La déforestation et les coupes rases illégales représentent une menace majeure pour les écosystèmes et la biodiversité. Cependant, il existe un manque de transparence et de contrôle efficace sur ces pratiques, rendant difficile leur suivi et leur régulation.
Canopée, une association engagée pour la protection des forêts, cherche à automatiser la détection des coupes rases abusives en utilisant un algorithme de surveillance satellite. Actuellement, les alertes générées doivent être centralisées, analysées et validées, mais ce processus reste manuel et fastidieux.
L’objectif est de développer une solution complète pour :
- Automatiser le traitement des données des coupes rases détectées par l’algorithme existant (GlobEO).
- Créer une base de données pour stocker et organiser les informations sur chaque coupe rase détectée.
- Créer une application permettant d’interagir avec la base de données pour ajouter, modifier ou supprimer des informations sur chaque coupe rase détectée.
- Développer une interface de visualisation pour identifier les coupes rases illégales et générer des statistiques exploitables. Optionellement :
- Repliquer l'identification de coupe rases (algorithme existant fourni par GlobEO) poour reduire le temps de mise a jour du processus existant.
- Rejoindre la communauté Data For Good
- Sur le slack Data For Good, rejoindre le canal _#13_brigade_coupes_rases et se présenter
- Remplir le formulaire
- Explorer la documentation du projet. Familiarisez vous avec le projet, ses objectifs via Outline. Notamment, vous trouverez les CR des premières réunions avec Canopée qui spécifient les avancées du projet.
Pour contribuer, vous pouvez demander un accès au projet sur github. Pour cela, contactez les responsables sur le slack Data For Good #13_brigade_coupes_rases
.
Essayez de respecter les conventions de code et le style d'écriture du projet:
- feature/nom_de_la_feature pour une nouvelle fonctionnalité
- chore/nom_du_chore pour une modification de code qui ne change pas l'interface utilisateur ou les fonctionnalités existantes
- hotfix/nom_du_hotfix pour une correction rapide
Chaque commit doit suivre la convention de style suivante :
- Convention complète de style, cheatsheet HERE
- Structure:
- [Type] (optional scope): [Description]
- [Optional Body]
- [Optional Footer]
- Exemple : chore(readme): ajouter détails pour contribuer au repo
Créez une pull request.
- Pour faciliter la revue de la pull request :
- Liez la pull request à un ticket NocoDB en ajoutant le lien du ticket dans la description.
- Rédigez une description détaillée de la pull request afin de fournir un maximum d’informations sur les modifications apportées.
L'ideeèr du projet est de créer une architecture modulaire qui permet d'automatiser le traitement des données, de stocker et organiser les informations dans une base de données, et de fournir une interface utilisateur pour interagir avec cette base de données. Voici un exemple possible de l'architecture :
- GlobEO Algorithme : L’algorithme GlobEO détecte les coupes rases dans les images. Télécharger les données de l’algorithme GlobEO dans un format approprié (par exemple, CSV ou JSON).
- Traitement des Données : (À definir) Le traitement des données est effectué par un script Python pour manipuler et analyser les données. Selon les besoins, cela pourrait évoluer (par exemple, orchestration, data quality, monitoring, etc.)
- Base de Données : (À definir) Base de données PostgreSQL avec PostGIS pour stocker les coupes rases et leurs métadonnées spatiales. Cela aussie devrait faciliter le processement spatiale.
- Application Web : (À definir) Une application web Flask ou FastAPI est développée pour gérer (opérations CRUD) les données relatives à chaque coupe rase détectée. (avec un service d'authentification pour les utilisateurs administrateurs).
- Interface de Visualisation : (À definir) Une interface web utilisant Leaflet ou Mapbox est créée pour visualiser les coupes rases sur une carte. Framework aussi à définir.
📁 13_brigade_coupes_rases
|
├── 📁 backend/ (contient l'API et la gestion de la base de données)
|
├── 📁 frontend/ (contient le code frontend pour la visualisation de données et les formulaires)
|
├── 📁 data_pipeline/ (contient les scripts pour collecter et traiter les données)
|
└── 📁 analytics/ (contient les scripts pour analyser et visualiser les données)
Pour visualiser ce graph sur VS Code, vous pouvez installer des plugins comme "Markdown Preview Enhanced".
Le graph est pas nécessairement complet, mais il donne une idée de l'architecture générale du projet.
flowchart LR
%% External Entities
SOURCES[Public Data Sources<br>Monthly & One-Time] -->|Fetch Data| ETL
Users[End Users] -->|Access<br>via Browser| FRONT
%% Main Clever Cloud subgraph
subgraph CC["CleverCloud"]
%% Data Engineering Subgraph
subgraph DE["Data Engineering"]
ETL[Docker-based Ingestion Jobs]
Cron[CleverCloud Cron Add-On]
AutoScale[Autoscaling<br>CleverCloud]
end
%% Backend Subgraph
subgraph BK["Backend"]
BE[FastAPI Backend<br> - Docker]
end
%% Storage Subgraph
subgraph ST["Storage"]
S3[(S3 Object Storage)]
DB[(PostgreSQL w/ PostGIS)]
end
%% Frontend Subgraph
subgraph FE["Frontend"]
FRONT[Frontend React/Vite<br>]
end
%% Observability Subgraph
subgraph OBS["Observability"]
Logs[CleverCloud Logs & Metrics]
end
%% Shared Environment Variables
EnvVars[Built-in Env Variables]
end
%% Connections & Data Flows
ETL -->|Raw/Intermediate Data| S3
ETL -->|Transformed Data| DB
Cron -->|Triggers| ETL
AutoScale --> |Autoscales| ETL
EnvVars -.-> ETL
EnvVars -.-> BE
EnvVars -.-> FRONT
BE -->|Reads/Writes| DB
BE --> |Reads/Writes Images| S3
FRONT -->|API Calls| BE
Logs -.-> ETL
Logs -.-> BE
Logs -.-> FRONT
%% Styles for Readability
style CC fill:#F0F9FF,stroke:#0369A1,stroke-width:2px,corner-radius:8px
style DE fill:#ECFEFF,stroke:#05B4FE,stroke-width:1px,corner-radius:8px
style BK fill:#FFF7ED,stroke:#F97316,stroke-width:1px,corner-radius:8px
style FE fill:#FFFBEB,stroke:#F59E0B,stroke-width:1px,corner-radius:8px
style OBS fill:#FAE8FF,stroke:#C026D3,stroke-width:1px,corner-radius:8px
%% Custom Component Colors
style DB fill:#CFFAFE,stroke:#0891B2,stroke-width:1px,color:#000000 %% Soft Teal for Storage
style S3 fill:#CFFAFE,stroke:#0891B2,stroke-width:1px,color:#000000 %% Soft Teal for Storage
style ETL fill:#FEE2E2,stroke:#DC2626,stroke-width:1px,color:#000000 %% Warm Coral for Docker
style BE fill:#FEE2E2,stroke:#DC2626,stroke-width:1px,color:#000000 %% Warm Coral for Docker
style Cron fill:#DBEAFE,stroke:#2563EB,stroke-width:1px,color:#000000 %% Cool Blue for CleverCloud
style AutoScale fill:#DBEAFE,stroke:#2563EB,stroke-width:1px,color:#000000 %% Cool Blue for CleverCloud
style Logs fill:#DBEAFE,stroke:#2563EB,stroke-width:1px,color:#000000 %% Cool Blue for CleverCloud
style FRONT fill:#FEF3C7,stroke:#D97706,stroke-width:1px,color:#000000 %% Soft Amber for Frontend
Poetry est un gestionnaire de paquets pour Python. Il permet d'installer, de mettre à jour et de gérer les dépendances.
On utilise Poetry dans les repertoires backend, data_pipeline et analytics. Chaque repertoire a un fichier pyproject.toml
qui contient les dépendances spécifiques à chaque subprojet.
Il y a aussi un fichier projet pyproject.toml
à la racine du projet qui contient les dépendances globales du projet.
Installer les dépendances:
Il faut être dans le répertoire backend, data_pipeline ou analytics et exécuter la commande suivante:
poetry install
Ajouter une dépendance (par répertoire):
poetry add pandas
Mettre à jour les dépendances (par répertoire):
poetry update
Plusieurs méthodes d'installation sont décrites dans la documentation de poetry dont:
- avec pipx
- avec l'installateur officiel
Chaque méthode a ses avantages et inconvénients. Par exemple, la méthode pipx nécessite d'installer pipx au préable, l'installateur officiel utilise curl pour télécharger un script qui doit ensuite être exécuté et comporte des instructions spécifiques pour la completion des commandes poetry selon le shell utilisé (bash, zsh, etc...).
L'avantage de pipx est que l'installation de pipx est documentée pour linux, windows et macos. D'autre part, les outils installées avec pipx bénéficient d'un environment d'exécution isolé, ce qui est permet de fiabiliser leur fonctionnement. Finalement, l'installation de poetry, voire d'autres outils est relativement simple avec pipx.
Cependant, libre à toi d'utiliser la méthode qui te convient le mieux ! Quelque soit la méthode choisie, il est important de ne pas installer poetry dans l'environnement virtuel qui sera créé un peu plus tard dans ce README pour les dépendances de la base de code de ce repo git.
Suivre les instructions pour installer pipx selon ta plateforme (linux, windows, etc...)
Par exemple pour Ubuntu 23.04+:
sudo apt update
sudo apt install pipx
pipx ensurepath
pipx install poetry
L'installation avec l'installateur officiel nécessitant quelques étapes supplémentaires, se référer à la documentation officielle.
python3 -m venv .venv
source .venv/bin/activate
poetry run pre-commit run --all-files
Les secrets partagés entre les membres sont stockés dans une base de données keepass.
Pour installer keepass suivez ce lien.
Un mot de passe est nécessaire pour ouvrir la base de données, lire ou modifier les secrets. Pour récuperer le mot de passe contactez directement les responsables de sous-équipes.
Considérez la base de données keepass comme étant la golden source de tous les secrets du projet.
Chaque secret utilisés dans le projet doit être référencés dans le keepass.
Exemples de secrets à utiliser dans la base : mot de passe du compte gérant l'infrastructure cloud, CI/CD, clés d'API, chaines de connection pour base de données etc ...