Spaces:
Runtime error
Runtime error
YassmineNouisser
Verify — multimodal disinformation detection platform (6 modules + chatbot)
179d606 | # Modules — Détails techniques | |
| Chaque module est un sous-paquet `backend/modules/ioN_*/` indépendant. Tous suivent le même contrat : | |
| - `pipeline.py` — fonctions de chargement (`init()`) et d'inférence (`analyze_*`) | |
| - `router.py` — `APIRouter` FastAPI exposant les endpoints | |
| - `__init__.py` — réexporte `router`, `init_models`, `MODULE_INFO` | |
| --- | |
| ## io1 — Fake Media Detection (deepfake & AI-generated) | |
| **Responsable** : Islem · **Statut** : production | |
| ### Pipeline | |
| 1. **MTCNN** (facenet-pytorch) — détection visage, crop 224×224 avec marge 20px (matche exactement | |
| l'entraînement d'Islem) | |
| 2. **ResNet50 ensemble** — moyenne des `prob_fake` de : | |
| - `io1_resnet50.pth` (best_ResNet50.pth d'Islem, linear head, idx 0=FAKE) | |
| - `io1_resnet50_deepfake.pth` (Model X d'Islem, dropout+linear head, idx 0=REAL) | |
| Le seuil de décision est **0.60** (au-dessus du naïf 0.50 pour compenser le biais OOD) | |
| 3. **AI consensus** (escalation REAL→FAKE) — pour rattraper les visages GAN/diffusion : | |
| - **Tier 1** : Organika/sdxl-detector ≥0.95 ET umm-maybe/AI-image-detector ≥0.20 → escalade | |
| - **Tier 2** : Organika ≥0.90 ET umm-maybe ≥0.40 → escalade | |
| ### XAI | |
| - **Grad-CAM** sur `layer4[-1]` du ResNet50 → heatmap visualisant les régions qui ont pesé | |
| - **Geometric heatmap analysis** → texte explicatif sans jargon ("zones concentrées au centre du visage") | |
| - Optionnel : **LLaVA 1.5 7B** (4-bit, GPU requis) pour un commentaire libre | |
| ### Limites connues | |
| - ~66% de recall sur TPDNE (StyleGAN3) — meilleur sur diffusion/DALL-E | |
| - Modèles d'Islem entraînés sur FaceForensics → faux positifs possibles sur photos OOD | |
| --- | |
| ## io2 — Visual Manipulation / Persuasion | |
| **Responsable** : Malek · **Statut** : production (modèles HF spécialisés en remplacement des poids | |
| fine-tunés non livrés) | |
| ### Pipeline | |
| 1. **TrOCR** (microsoft/trocr-base-printed) — extraction du texte visible | |
| 2. **DistilRoBERTa fine-tuned clickbait** (valurank/distilroberta-clickbait) — score manipulation NLP | |
| 3. **CLIP ViT-B/32 zero-shot** — score visuel "clickbait/sensational" vs "ordinary informational" | |
| en comparant les similarités à 3 prompts positifs et 3 prompts négatifs | |
| 4. **EasyOCR + regex urgence** (FR/EN, 15 patterns) — détecte "LIMITED TIME", "ONLY 3 LEFT", | |
| countdown timers, "X% OFF", "SHOCKING", excès de ponctuation, etc. | |
| 5. **Fusion heuristique** : `0.45×nlp + 0.30×clickbait + 0.25×urgence` | |
| 6. **Optionnel** : MarianMT FR→EN pour faire passer le texte français au classifieur anglais | |
| ### XAI | |
| - **Gradient saliency** sur CLIP (backprop de la différence positif-négatif) | |
| - **Bounding boxes** sur les keywords d'urgence détectés par OCR | |
| ### Verdicts (4 bandes) | |
| | Score | Label | Couleur | | |
| |---|---|---| | |
| | 0.0 - 0.4 | AUTHENTIC | vert | | |
| | 0.4 - 0.6 | SUSPECT | jaune | | |
| | 0.6 - 0.8 | MANIPULATIVE | orange | | |
| | ≥ 0.8 | HIGHLY MANIPULATIVE | rouge | | |
| --- | |
| ## io3 — Image-Caption Coherence | |
| **Responsable** : Youssef · **Statut** : production | |
| ### Pipeline (5 signaux fusionnés) | |
| 1. **CLIP ViT-L/14** (laion2b) — similarité directe image↔texte | |
| 2. **YOLOv8m** — détection d'objets, vérifie que les objets nommés dans le texte sont présents | |
| 3. **EasyOCR** — extraction du texte écran, cross-check avec la légende | |
| 4. **SAM ViT-B** (optional) — segmentation, score d'incohérence régionale ; fallback grille 3×3 sinon | |
| 5. **Whisper small** — transcription audio (vidéos uniquement) | |
| ### Fusion | |
| - **Image** : `0.40×CLIP + 0.25×SAM + 0.15×Whisper + 0.10×YOLO + 0.10×OCR` | |
| - **Vidéo** : pondération différente avec ajout de scores temporels et audio↔image | |
| ### XAI | |
| - **Grad-CAM CLIP** sur `transformer.resblocks[-1].ln_1` | |
| - **Waterfall chart** matplotlib des contributions des 5 modules | |
| - **SHAP-style attribution** dictionary | |
| --- | |
| ## io4 — Image Tampering (Photoshop forensics) | |
| **Responsable** : Rayen · **Statut** : production (forensique pure — pas de poids requis) | |
| ### Pipeline (3 signaux indépendants) | |
| 1. **ELA (Error-Level Analysis)** — re-sauvegarde JPEG quality=90, diff amplifié → détecte les | |
| régions ré-encodées différemment (splicing) | |
| 2. **Noise residual** — soustraction d'un filtre médian 3×3, std par bloc 32×32 → détecte les zones | |
| avec un bruit de capteur étranger (inpainting/paste) | |
| 3. **JPEG ghost** — re-save à 6 qualités (60-90), détecte les régions avec un minimum d'erreur à une | |
| qualité différente du reste (compression mismatch) | |
| ### Décision | |
| - Fusion pondérée : `0.45×ELA + 0.30×noise + 0.25×ghost` | |
| - Bonus +0.10 si ≥2 signaux accord (≥0.40 chacun) | |
| - Verdict : | |
| - `< 0.35` → AUTHENTIC | |
| - `0.35-0.55` → AUTHENTIC sauf si ≥2 signaux accord → FAKE | |
| - `≥ 0.55` → FAKE | |
| ### Classes | |
| - `Inpainting` — région remplie algorithmiquement | |
| - `Copy-move` — partie dupliquée et collée | |
| - `Splicing` — contenu d'une autre image inséré | |
| - `Enhancement` — ajustements globaux (luminosité, contraste) cachant une édition | |
| ### Endpoint compare | |
| `POST /api/io4/analyze/compare` — diff pixel-à-pixel entre suspect et original. Verdict très fiable | |
| quand l'original est disponible. | |
| --- | |
| ## io5 — Caption Fidelity | |
| **Responsable** : Verify team · **Statut** : production (nouveau) | |
| ### Pipeline (4 signaux) | |
| 1. **CLIP ViT-B/32** — similarité globale image↔caption (calibrée via sigmoid centré sur 0.20) | |
| 2. **CLIP per-phrase** — découpe la caption en noun phrases, score chaque fragment séparément → | |
| identifie quelles parties ne sont pas supportées par l'image | |
| 3. **EasyOCR cross-check** — mots de la caption qui apparaissent dans le texte écran de l'image | |
| 4. **Tone gap** — caption alarmiste sur image neutre = signal de fidélité dégradée | |
| ### Décision | |
| - `score = calibrated_sim` | |
| - Bonus +0.15×ocr_overlap si overlap ≥30% | |
| - Malus -0.20×tone_gap si tone_gap ≥30% | |
| - Verdict : | |
| - `≥ 0.60` → FAITHFUL | |
| - `0.40-0.60` → PARTIAL | |
| - `< 0.40` → MISLEADING | |
| ### Output | |
| Le champ `unsupported_phrases` liste les fragments de la caption qui n'ont pas trouvé d'écho dans | |
| l'image — particulièrement utile pour expliquer pourquoi une caption est jugée MISLEADING. | |
| --- | |
| ## io6 — Cosmetic Ads Fact-Check | |
| **Responsable** : Yassmine · **Statut** : production | |
| ### Pipeline (4 phases) | |
| 1. **ffmpeg** — extraction audio (16 kHz mono WAV) et frames (1 par 1.4s, max 12) | |
| 2. **Whisper tiny** — transcription audio | |
| 3. **YOLOv8n** — détection objets + **EasyOCR** sur les frames pour texte écran | |
| 4. **Extraction de claims** : | |
| - Fallback : sentence-split + filtrage par longueur (mode rapide, défaut) | |
| - Optionnel : Phi-3 mini 4k (extraction LLM, mode `IO6_ENABLE_PHI3=on`) | |
| ### Vérification (5 sources) | |
| - **KB Excel patterns** : 25 regex pour patterns globaux | |
| - **KB Excel fake_claims** : 33 phrases mensongères connues + regex | |
| - **MiniLM semantic** : similarité sémantique avec la base de fake claims pré-encodées | |
| - **KB ingredients/brands** : whitelist de 145 ingrédients INCI et 93 marques cosmétiques validées | |
| - **Decisive Post-Processor** : 15 patterns FAUX (interdits EU 655/2013, ex: "in 7 days", "100% effective", | |
| "miracle", "reduce wrinkles by X%") + 8 patterns VRAI (vocabulaire acceptable, marques connues) | |
| ### Trust score | |
| Moyenne pondérée par confiance des verdicts TRUE/FALSE : | |
| - ≥ 50 → RELIABLE | |
| - < 50 → MISLEADING | |
| ### Articles EU cités | |
| Chaque claim FALSE peut citer un article EU spécifique (ex: `EU 655/2013 art. 4.2` pour les claims | |
| quantifiées non-substantiées, `EU 1223/2009` pour les claims médicales interdites). Le champ | |
| `eu_articles_cited` agrège tous les articles violés. | |
| ### KB Excel | |
| La base de connaissances est dans `backend/data/IO6_Base_Reference_V3_FULL.xlsx`, 8 feuilles : | |
| `Global_Patterns`, `Global_Fake_Claims`, `Products`, `Synonyms`, `Category_Rules`, | |
| `Extended_Ingredients`, `Extended_Brands`, `Extended_Certifications`. | |