Spaces:
Runtime error
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—APIRouterFastAPI exposant les endpoints__init__.py— réexporterouter,init_models,MODULE_INFO
io1 — Fake Media Detection (deepfake & AI-generated)
Responsable : Islem · Statut : production
Pipeline
- MTCNN (facenet-pytorch) — détection visage, crop 224×224 avec marge 20px (matche exactement l'entraînement d'Islem)
- ResNet50 ensemble — moyenne des
prob_fakede :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)
- 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
- TrOCR (microsoft/trocr-base-printed) — extraction du texte visible
- DistilRoBERTa fine-tuned clickbait (valurank/distilroberta-clickbait) — score manipulation NLP
- 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
- EasyOCR + regex urgence (FR/EN, 15 patterns) — détecte "LIMITED TIME", "ONLY 3 LEFT", countdown timers, "X% OFF", "SHOCKING", excès de ponctuation, etc.
- Fusion heuristique :
0.45×nlp + 0.30×clickbait + 0.25×urgence - 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)
- CLIP ViT-L/14 (laion2b) — similarité directe image↔texte
- YOLOv8m — détection d'objets, vérifie que les objets nommés dans le texte sont présents
- EasyOCR — extraction du texte écran, cross-check avec la légende
- SAM ViT-B (optional) — segmentation, score d'incohérence régionale ; fallback grille 3×3 sinon
- 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)
- ELA (Error-Level Analysis) — re-sauvegarde JPEG quality=90, diff amplifié → détecte les régions ré-encodées différemment (splicing)
- 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)
- 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→ AUTHENTIC0.35-0.55→ AUTHENTIC sauf si ≥2 signaux accord → FAKE≥ 0.55→ FAKE
Classes
Inpainting— région remplie algorithmiquementCopy-move— partie dupliquée et colléeSplicing— 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)
- CLIP ViT-B/32 — similarité globale image↔caption (calibrée via sigmoid centré sur 0.20)
- 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
- EasyOCR cross-check — mots de la caption qui apparaissent dans le texte écran de l'image
- 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→ FAITHFUL0.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)
- ffmpeg — extraction audio (16 kHz mono WAV) et frames (1 par 1.4s, max 12)
- Whisper tiny — transcription audio
- YOLOv8n — détection objets + EasyOCR sur les frames pour texte écran
- 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.