- 📌 Overview
- 📁 Structure du projet
- 🧪 1. Dataset Analysis — Distributionpy
- 🔄 2. Data Augmentation — Augmentationpy
- 🎨 3. Image Transformation — Transformationpy
- 🧠 4. Classification — trainpy
- 🔍 5. Prediction — predictpy
- 🔐 6. Signature SHA1 — signaturetxt
- 🧩 Norme Python (42)
- 🛠️ Installation & environnement Poetry
▶️ Exemples de commandes- ✅ Qualité logicielle
- 📚 Stack technique
- 🎯 Objectifs pédagogiques
- © Licence
- 👤 Auteur
Leaffliction est un projet de Computer Vision visant à détecter automatiquement les maladies présentes sur des feuilles de plantes à partir d’images.
Il suit le sujet Leaffliction de l’École 42 et implémente un pipeline complet :
- 📊 Analyse du dataset
- 🔄 Data augmentation (≥ 6 techniques pour équilibrer les classes)
- 🎨 Transformations d’images (≥ 6 transformations)
- 🧠 Classification par Deep Learning (CNN)
- ✔️ Accuracy ≥ 90 %
- 🔐 Signature SHA1 pour validation
- 📂 Compatible avec toutes les plantes du dataset (tous les sous-dossiers)
- 🗂️ Les scripts doivent fonctionner avec n’importe quelle organisation du dataset
- 🚫 Le dataset, les images augmentées ou les modèles ne doivent jamais être commit
Développé en Python 3.10+, géré via Poetry, avec une stack qualité complète : pytest, ruff, mypy, mutmut, black, bandit, pre-commit, GitHub Actions & Codecov.
Leaffliction/
├── src/leaffliction/
│ ├── __init__.py
│ ├── distribution.py
│ ├── augmentation.py
│ ├── transformation.py
│ ├── training.py
│ ├── prediction.py
│ └── cli.py
│
├── scripts/
│ ├── Distribution.py
│ ├── Augmentation.py
│ ├── Transformation.py
│ ├── train.py
│ └── predict.py
│
├── tests/
│ ├── test_distribution.py
│ ├── test_augmentation.py
│ ├── test_transformation.py
│ ├── test_training.py
│ └── test_prediction.py
│
├── .github/workflows/ci.yml
├── .pre-commit-config.yaml
├── .ruff.toml
├── mypy.ini
├── .coveragerc
├── codecov.yml
├── pyproject.toml
├── poetry.lock
├── LICENSE
└── signature.txt
- Le dataset NE DOIT PAS apparaître dans le dépôt (sinon 0 direct).
- Les images augmentées, transformées et le modèle entraîné NE DOIVENT PAS être commit.
- Seul
signature.txtdoit être présent.
Objectifs :
- Explorer la structure du dataset
- Calculer la répartition par maladies
- Générer pie charts & bar charts
- Le programme doit fonctionner avec toutes les plantes du dataset
- Le nom des colonnes doit correspondre exactement au nom des dossiers des classes
- Les images doivent être correctement détectées même si les chemins contiennent des espaces
Exemple d’exécution :
poetry run python scripts/Distribution.py ./AppleRépartition des images par catégories pour la plante Apple.
Utilisé pour analyser l’équilibre du dataset avant augmentation.
Objectifs :
- Équilibrer les classes
- Appliquer ≥ 6 augmentations :
- Flip, Rotate, Skew, Shear, Crop, Distortion
- Les images augmentées doivent être enregistrées dans le même dossier que l’original
- Une fois l’augmentation terminée, un dataset équilibré doit être produit dans :
augmented_directory/
Exemple :
poetry run python scripts/Augmentation.py ./Apple/apple_healthy/image.jpgExemples des 6 augmentations appliquées (Flip, Rotate, Skew, Shear, Crop, Distortion) sur une feuille healthy de la classe apple_healthy.
Transformations possibles :
- Gaussian blur
- Mask
- ROI
- Object analysis
- Pseudolandmarks
- Color histograms
- Le script doit accepter une seule image (affichage)
- Et un dossier complet (sauvegarde des résultats dans un dossier destination)
- Une aide doit être disponible via :
Exemples :
poetry run python scripts/Transformation.py ./Apple/apple_healthy/image.jpgPipeline des transformations appliquées : original, Gaussian blur, mask, ROI objects,
analyse d’objet, pseudolandmarks et histogramme de couleurs.
Batch mode :
poetry run python scripts/Transformation.py -src ./Apple/apple_healthy -dst out/Objectifs :
- Entraîner un CNN
- Gérer train/validation
- Atteindre ≥ 90 % accuracy
- Exporter un
.zipconforme au sujet - Le modèle doit être entraîné sur un dataset équilibré et transformé
- Le set de validation doit contenir au moins 100 images
- Le
.zipfinal doit contenir :- le modèle entraîné
- les images nécessaires
- toutes les métadonnées utiles pour recharger le modèle
- Le modèle doit pouvoir être rechargé uniquement à partir du
.zip
Commande :
poetry run python scripts/train.py ./Applepoetry run python scripts/predict.py ./Apple/apple_healthy/image.jpgExemple complet du script predict.py :
image originale (gauche), image transformée (droite)
→ Classe prédite : peach_bacterial_spot.
Affiche :
-
image originale
-
transformation
-
prédiction
-
L’image prédite doit appartenir à une plante utilisée pour l’entraînement
-
Le script doit afficher la classe prédite de manière lisible
sha1sum leaffliction_dataset_model.zipCopier la valeur dans :
signature.txt
- Le
.zipdoit inclure exactement :- le dataset préparé (augmenté et transformé)
- le modèle entraîné
- les fichiers nécessaires à la prédiction
- Le hash SHA1 fourni doit correspondre exactement au
.ziputilisé pendant la soutenance - Toute différence → 0 point
Le sujet impose :
pip install flake8
alias norminette_python="flake8"norminette_python src/ scripts/flake8 est requis pour le module 42, même si le projet utilise aussi
ruff, black, mypy, bandit & mutmut pour une qualité industrielle.
git clone https://github.com/raveriss/Leaffliction
cd Leafflictionpoetry installpoetry shellou :
poetry run <commande>Analyse :
poetry run python scripts/Distribution.py ./AppleAugmentation :
poetry run python scripts/Augmentation.py ./Apple/apple_healthy/image.jpgTransformations :
poetry run python scripts/Transformation.py -src ./Apple/apple_healthy -dst out/Training :
poetry run python scripts/train.py ./ApplePrediction :
poetry run python scripts/predict.py ./Apple/apple_healthy/image.jpg
entraîne l’arrêt immédiat de l’évaluation (note potentiellement 0).
Tests :
poetry run pytestCoverage :
poetry run pytest --cov=leaffliction --cov-report=term-missingMutation testing :
poetry run mutmut runLint:
poetry run ruff check src testsFormat :
poetry run black src testsTyping :
poetry run mypy srcSécurité :
poetry run bandit -r srcPre-commit :
poetry run pre-commit run --all-files-
- Python 3.10+
- Poetry (gestion des dépendances & scripts)
-
- PyTorch (CNN de classification)
- NumPy / Pandas
- Pillow / OpenCV / PlantCV
-
- pytest, coverage, Codecov
- flake8 (norme 42 via norminette_python)
- ruff, black, mypy
- mutmut (mutation testing)
- bandit (analyse de sécurité)
- pre-commit (orchestration des hooks)
-
- GitHub Actions (lint + tests + coverage + upload Codecov)
- Pipeline complet de Computer Vision
- Data augmentation avancée
- CNN robuste avec >90% accuracy
- Projet reproductible via Poetry
- CI/CD & qualité logicielle niveau entreprise
MIT License.
Rafael Verissimo
Étudiant IA/Data — École 42 Paris
GitHub : https://github.com/raveriss
LinkedIn : https://www.linkedin.com/in/verissimo-rafael/



