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

5.3 KiB
Raw Blame History

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

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 :

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/ :

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 :

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 :

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

python3 -m pytest tests/