Ce projet fait partie de mon đ PORTFOLIO orientĂ© Data / IA / Software Engineering
- đ 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/
Portfolio : https://raveriss.dev/



