Ce projet propose une solution complète pour la détection, la classification et le comptage automatique de poissons dans des vidéos sous-marines, à l'aide de modèles d'intelligence artificielle (YOLOv8 pour la détection, ResNet18 pour la classification).
- Détection et classification de poissons parmi 22 espèces méditerranéennes
- Comptage automatique et suivi des individus pour éviter le double comptage
- Interface graphique intuitive permettant :
- Lancement/arrêt de l'analyse vidéo (webcam ou fichier)
- Visualisation en temps réel des détections et classifications
- Affichage du comptage par espèce
- Réglage du seuil de confiance
- Export des résultats au format CSV
- Génération de rapports graphiques
| Espèce | Nom scientifique | Famille |
|---|---|---|
| Anthias | Anthias anthias | Serranidae |
| Atherine | Atherina hepsetus | Atherinidae |
| Bar européen | Dicentrarchus labrax | Moronidae |
| Bogue | Boops boops | Sparidae |
| Carangue | Trachurus trachurus | Carangidae |
| Daurade Royale | Sparus aurata | Sparidae |
| Daurade rose | Pagellus bogaraveo | Sparidae |
| Éperlan | Osmerus eperlanus | Osmeridae |
| Girelle | Coris julis | Labridae |
| Gobie | Gobius niger | Gobiidae |
| Grande raie pastenague | Dasyatis pastinaca | Dasyatidae |
| Grande vive | Trachinus draco | Trachinidae |
| Grondin | Chelidonichthys lucerna | Triglidae |
| Maquereau | Scomber scombrus | Scombridae |
| Mérou | Epinephelus marginatus | Serranidae |
| Mostelle | Phycis phycis | Phycidae |
| Mulet cabot | Mugil cephalus | Mugilidae |
| Murène | Muraena helena | Muraenidae |
| Orphie | Belone belone | Belonidae |
| Poisson scorpion | Scorpaena scrofa | Scorpaenidae |
| Rouget | Mullus surmuletus | Mullidae |
| Sole commune | Solea solea | Soleidae |
- Python 3.11 ou 3.12 (Python 3.13 n'est pas encore supporté)
- uv (gestionnaire de paquets Python moderne)
- Git pour cloner le dépôt
Si vous n'avez pas encore installé uv, suivez les instructions ci-dessous :
curl -LsSf https://astral.sh/uv/install.sh | shpowershell -c "irm https://astral.sh/uv/install.ps1 | iex"-
Cloner le dépôt
git clone <url-du-depot> cd PPE-Classification
-
Installer les dépendances
uv sync
Cette commande va :
- Créer automatiquement un environnement virtuel
- Installer toutes les dépendances nécessaires
- Configurer Python 3.12 (requis pour la compatibilité tkinter)
-
Vérifier l'installation
uv run python --version
Vous devriez voir
Python 3.12.x
uv run run_app.py-
Choisir la source vidéo :
- Webcam : Cliquez sur "Utiliser Webcam"
- Fichier vidéo : Cliquez sur "Charger Vidéo" et sélectionnez votre fichier
-
Configurer les paramètres :
- Ajustez le seuil de confiance avec le curseur (0.1 à 1.0)
- Un seuil plus élevé = détections plus précises mais moins nombreuses
-
Démarrer l'analyse :
- Cliquez sur "Démarrer" pour lancer la détection
- Observez les détections en temps réel
- Le comptage par espèce s'affiche dans l'onglet "Comptage"
-
Contrôler l'analyse :
- Arrêter : Pause l'analyse
- Réinitialiser Compteurs : Remet les compteurs à zéro
- Effacer CSV : Supprime les données exportées
- Générer rapport : Lance l'analyse des performances
Les résultats sont automatiquement sauvegardés dans :
data/fish_counts.csv: Comptage par espèce avec timestampsassets/: Graphiques et visualisations générés
PPE-Classification/
├── src/
│ └── ppe_classification/
│ ├── __init__.py
│ ├── models/
│ │ ├── __init__.py
│ │ └── fish_classifier.py # Modèle de classification
│ ├── ui/
│ │ ├── __init__.py
│ │ └── app.py # Interface graphique
│ └── utils/
│ ├── __init__.py
│ ├── fish_counter.py # Comptage et suivi
│ ├── metrics.py # Métriques et performances
│ └── performances.py # Analyses de performance
├── models/
│ ├── fish_classifier.pt # Modèle de classification PyTorch
│ ├── class_names.txt # Noms des espèces
│ └── yolov8n.pt # Modèle de détection YOLOv8
├── data/
│ ├── fish_counts.csv # Données de comptage
│ └── temp_video.mp4 # Vidéos temporaires
├── config/
│ ├── dataset.yaml # Configuration du dataset
│ └── train_config.yaml # Configuration d'entraînement
├── assets/
│ └── *.png # Graphiques et visualisations
├── docs/ # Documentation
├── run_app.py # Script de lancement principal
├── pyproject.toml # Configuration du projet
├── uv.lock # Versions exactes des dépendances
└── README.md # Ce fichier
# Installer de nouvelles dépendances
uv add <package-name>
# Mettre à jour les dépendances
uv sync --upgrade
# Exécuter des scripts
uv run <script.py>
# Lancer l'application en mode développement
uv run --reload run_app.py- Ajouter de nouvelles espèces : Modifiez
models/class_names.txt - Changer les seuils : Ajustez les paramètres dans
src/ppe_classification/models/fish_classifier.py - Modifier l'interface : Éditez
src/ppe_classification/ui/app.py
Une démonstration vidéo du système est disponible ici : Lien Google Drive
-
Erreur tkinter :
# Sur macOS brew install python-tk@3.12 # Recréer l'environnement rm -rf .venv uv sync
-
Webcam non détectée :
- Vérifiez que la webcam n'est pas utilisée par une autre application
- Accordez les permissions d'accès à la webcam
-
Modèles non trouvés :
- Assurez-vous que les fichiers
.ptsont dans le dossiermodels/ - Vérifiez les chemins dans la configuration
- Assurez-vous que les fichiers
-
Performances lentes :
- Réduisez le seuil de confiance
- Utilisez une résolution vidéo plus faible
- Fermez les autres applications gourmandes en ressources
Pour signaler un bug ou demander de l'aide :
- Créez une nouvelle issue avec :
- Description détaillée du problème
- Version de Python (
python --version) - Système d'exploitation
- Logs d'erreur complets
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Projet réalisé par Nicolas Lambropoulos dans le cadre d'un projet scolaire (PPE) à l'ECE paris.
- YOLOv8 par Ultralytics pour la détection d'objets
- PyTorch pour le framework de deep learning
- OpenCV pour le traitement d'images
- Supervision pour les utilitaires de vision par ordinateur