Files
classement-image-cyberharce…/README.md
T
2026-06-28 20:21:40 +02:00

127 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Classement Automatique de Captures d'Écran de Tweets par Harcèlement
Ce projet permet d'automatiser le classement de captures d'écran de tweets, en analysant leur contenu textuel pour détecter des types de harcèlement en français.
Il utilise **EasyOCR** pour extraire le texte des images et un modèle d'apprentissage profond Zero-Shot multilingue de **Hugging Face** (par défaut `MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7`) pour classer le texte extrait. Le système s'appuie sur une base de données **CSV** pour suivre l'état de traitement de chaque fichier.
---
## Fonctionnalités
- 🔎 **Extraction de texte (OCR)** : Reconnaissance optique de caractères robuste et multilingue grâce à EasyOCR.
- 🏷️ **Classification Zero-Shot** : Classification automatique de texte en catégories de harcèlement (*Cyberharcèlement*, *Insulte*, *Menace*, *Non-harcèlement*).
- 💾 **Base de données CSV** : Suivi persistant de chaque fichier (`pending`, `processed`, `error`).
- 📁 **Organisation automatique** : Déplacement (ou copie) des images dans des dossiers `ok/{catégorie}/`.
- 📊 **Rapport Web** : Génération d'un rapport HTML interactif (filtres, recherche, tri, lightbox) pour consulter les résultats.
- 🧪 **Mode simulation** : Option `--dry-run` pour prévisualiser le classement sans déplacer de fichiers.
- 💻 **CLI complète** : Contrôle total via la ligne de commande.
---
## Catégories de classification
Chaque image se voit attribuer l'une des catégories suivantes :
| Catégorie | Origine |
|---|---|
| `Cyberharcèlement`, `Insulte`, `Menace`, `Non-harcèlement` | Labels Zero-Shot retenus lorsque le score dépasse le seuil. |
| `Inclassable` | Le meilleur score est en dessous du seuil de confiance (`--threshold`). |
| `Sans_Texte` | Aucun texte n'a pu être extrait de l'image. |
| `Non-classifié` | Valeur de repli en cas de résultat inattendu. |
---
## Structure du Projet
```text
classement-image/
├── requirements.txt # Dépendances du projet
├── main.py # Point d'entrée principal
├── captures/ # Dossier d'entrée des captures à traiter
│ └── ok/ # Sortie par défaut : images classées + CSV + rapports
│ ├── tweets.csv # Base de données de suivi (générée automatiquement)
│ ├── report_*.html # Rapports visuels horodatés (--generate-report)
│ └── {catégorie}/ # Images classées par catégorie
├── tweet_classifier/ # Package principal
│ ├── ocr.py # Extraction de texte (EasyOCR)
│ ├── classifier.py # Classification Zero-Shot (Hugging Face)
│ ├── organizer.py # Orchestrateur du traitement
│ ├── database_manager.py # Gestionnaire de la base CSV
│ ├── web_generator.py # Générateur de rapport HTML (Jinja2)
│ └── cli.py # Interface en ligne de commande
└── tests/ # Suite de tests unitaires
```
---
## Installation
Installez les dépendances :
```bash
pip install -r requirements.txt
```
> ️ Au premier lancement, EasyOCR et Hugging Face téléchargent automatiquement
> leurs modèles (quelques centaines de Mo). Un GPU est utilisé s'il est
> disponible, sinon le traitement s'effectue sur CPU.
---
## Utilisation
Le script `main.py` gère le traitement des images et la génération de rapports.
### 1. Traitement des images
Pour traiter les images du dossier `captures/` :
```bash
python main.py -i ./captures
```
Les images sont classées dans des sous-dossiers de `./captures/ok/` (par défaut)
selon la catégorie détectée, et leur état est mis à jour dans
`captures/ok/tweets.csv`.
Pour choisir un autre dossier de destination :
```bash
python main.py -i ./captures -o ./resultats
```
### 2. Génération du rapport Web
Une fois le traitement terminé, générez un rapport HTML depuis la base de données :
```bash
python main.py --generate-report
```
Un fichier `report_{horodatage}.html` est créé dans le dossier de sortie
(`captures/ok/` par défaut). Ouvrez-le dans votre navigateur pour consulter la
galerie des tweets classés avec leurs images, textes et catégories détectées.
### Options de la ligne de commande
| Option | Raccourci | Description | Défaut |
|---|---|---|---|
| `--input-dir` | `-i` | Dossier contenant les captures à classer. | *Requis pour le traitement* |
| `--output-dir` | `-o` | Dossier de destination des images classées. | `{input-dir}/ok` |
| `--db` | *Aucun* | Chemin du fichier base de données CSV. | `captures/ok/tweets.csv` |
| `--generate-report` | *Aucun* | Génère un rapport HTML depuis le CSV (n'effectue pas de traitement). | `False` |
| `--model` | `-m` | Modèle Hugging Face Zero-Shot à utiliser. | `MoritzLaurer/mDeBERTa-v3-base-xnli-multilingual-nli-2mil7` |
| `--languages` | `-l` | Langues EasyOCR, séparées par des virgules. | `fr,en` |
| `--threshold` | `-t` | Seuil de confiance de classification (0.0 à 1.0). | `0.35` |
| `--copy` | *Aucun* | Copie les images au lieu de les déplacer. | `False` |
| `--dry-run` | *Aucun* | Simulation : ne modifie ni ne déplace les fichiers. | `False` |
| `--verbose` | `-v` | Active les logs de débogage. | `False` |
---
## Exécuter les Tests
```bash
python3 -m pytest tests/
```