first commit
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
# 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/
|
||||
```
|
||||
Reference in New Issue
Block a user