Spaces:
Building
Building
| title: KAMY Vision AI | |
| emoji: 🛡️ | |
| colorFrom: purple | |
| colorTo: blue | |
| sdk: docker | |
| app_port: 8000 | |
| pinned: false | |
| # AuthenticVision: Détection Deepfake & IA Générative | |
| Outil complet de détection de contenus synthétiques (images, vidéos, audio) générés par IA. | |
| Disponible en API REST, CLI et interface web. | |
| --- | |
| ## Architecture v3.0 | |
| ``` | |
| AuthenticVision | |
| ├── api.py — API FastAPI (images + vidéos + audio) | |
| ├── video_analyzer.py — Module d'analyse vidéo multi-couches | |
| ├── cli.py — Interface ligne de commande | |
| ├── verify_robustness.py — Script de benchmark avec métriques | |
| └── frontend/ — Interface web HTML/CSS/JS | |
| ``` | |
| ### Modèles utilisés | |
| **Images (ensemble de 3 modèles ViT fusionnés) :** | |
| | Modèle | Rôle | Poids | | |
| |--------|------|-------| | |
| | `prithivMLmods/Deep-Fake-Detector-Model` | Deepfake faces | 35% | | |
| | `prithivMLmods/AI-vs-Deepfake-vs-Real` | 3 classes : AI / Deepfake / Real | 40% | | |
| | `Ateeqq/ai-vs-human-image-detector` | AI vs Humain (120k images) | 25% | | |
| **Audio :** `MelodyMachine/Deepfake-audio-detection-V2` | |
| **Optionnel :** `openai/clip-vit-base-patch32` (analyse sémantique, activable via `?use_clip=true`) | |
| ### Couches forensiques: Images | |
| - Ensemble 3 modèles ViT (score fusionné pondéré) | |
| - Analyse EXIF étendue (19 sources IA détectées : Gemini, DALL-E, Firefly, Flux, SynthID...) | |
| - Spectre FFT (détection sur-lissage et pics GAN) | |
| - Texture & Bruit (uniformité anormale) | |
| - Palette chromatique (entropie couleur artificielle) | |
| - Détection filtre social (Snapchat/Instagram) avec seuils adaptatifs | |
| ### Couches forensiques: Vidéo | |
| - Ensemble modèles sur frames extraites (crop visage prioritaire) | |
| - Cohérence temporelle inter-frames (variation anormalement faible = deepfake) | |
| - Cohérence de teinte de peau entre visages (incohérence = manipulation) | |
| --- | |
| ## Installation | |
| ```bash | |
| # Dépendances de base | |
| pip install fastapi uvicorn torch transformers pillow piexif librosa python-multipart | |
| # Support vidéo (requis pour analyser des vidéos) | |
| pip install opencv-python-headless | |
| # Support HEIC (photos iPhone) | |
| pip install pillow-heif | |
| ``` | |
| ### Lancer l'API | |
| ```bash | |
| python api.py | |
| # API disponible sur http://localhost:8000 | |
| ``` | |
| ### Lancer l'interface web | |
| Ouvrir `frontend/index.html` dans un navigateur (l'API doit être lancée). | |
| --- | |
| ## API: Endpoints | |
| ### `POST /predict`: Analyse complète | |
| Supporte : images (JPEG, PNG, WebP, HEIC), vidéos (MP4, MOV, AVI, WebM), audio (WAV, MP3, M4A) | |
| ```bash | |
| # Image | |
| curl -X POST http://localhost:8000/predict \ | |
| -F "file=@photo.jpg" \ | |
| -F "sensitivity=50" \ | |
| -F "robust_mode=false" | |
| # Vidéo | |
| curl -X POST http://localhost:8000/predict \ | |
| -F "file=@video.mp4" \ | |
| -F "sensitivity=50" | |
| # Avec CLIP (GPU recommandé) | |
| curl -X POST "http://localhost:8000/predict?use_clip=true" \ | |
| -F "file=@photo.jpg" | |
| ``` | |
| ### `POST /predict/fast`: Mode rapide | |
| Modèle principal seul, sans couches forensiques complètes (~5-15s CPU). | |
| ```bash | |
| curl -X POST http://localhost:8000/predict/fast \ | |
| -F "file=@photo.jpg" \ | |
| -F "sensitivity=50" | |
| ``` | |
| ### `GET /health`: Statut de l'API | |
| ```bash | |
| curl http://localhost:8000/health | |
| ``` | |
| **Exemple de réponse (image) :** | |
| ```json | |
| { | |
| "status": "success", | |
| "verdict": "DEEPFAKE", | |
| "fake_prob": 0.8731, | |
| "real_prob": 0.1269, | |
| "media_type": "IMAGE", | |
| "ai_source": "Google Gemini", | |
| "forensic_details": { | |
| "fusion_profile": "EXIF_IA_DETECTE", | |
| "layer_scores": { | |
| "ensemble": 0.82, | |
| "exif": 0.97, | |
| "fft": 0.61, | |
| "texture": 0.55, | |
| "color": 0.70 | |
| } | |
| } | |
| } | |
| ``` | |
| --- | |
| ## CLI | |
| ```bash | |
| # Installation globale | |
| pip install authenticvision-cli | |
| # Analyse d'une image | |
| deepfake photo.jpg | |
| # Avec options | |
| deepfake photo.jpg --sensitivity 70 --robust --audit | |
| # Sortie JSON (pour scripts/pipelines) | |
| deepfake photo.jpg --json | |
| # Mode rapide (ViT seul) | |
| deepfake photo.jpg --fast | |
| # Audio | |
| deepfake voix.mp3 --sensitivity 60 | |
| ``` | |
| **Exemple de sortie :** | |
| ``` | |
| ================================================== | |
| RÉSULTAT DE L'ANALYSE - AuthenticVision v2.0 | |
| ================================================== | |
| Fichier : photo.jpg | |
| Type : IMAGE | |
| Sensibilité: 50% | Robustesse: OFF | |
| -------------------------------------------------- | |
| VERDICT : AUTHENTIQUE | |
| Confiance : 96.0% réel | |
| ================================================== | |
| ``` | |
| --- | |
| ## Benchmark | |
| Le script `verify_robustness.py` évalue les performances sur un dataset local. | |
| ```bash | |
| # Benchmark complet avec rapport | |
| python verify_robustness.py \ | |
| --real_dir datasets/real \ | |
| --fake_dir datasets/fake \ | |
| --output rapport.json | |
| # Mode rapide | |
| python verify_robustness.py \ | |
| --real_dir datasets/real \ | |
| --fake_dir datasets/fake \ | |
| --mode fast | |
| # Test unitaire sur une image | |
| python verify_robustness.py --image photo.jpg | |
| ``` | |
| **Métriques calculées :** Accuracy, Precision, Recall, F1, AUC-ROC, TP/TN/FP/FN | |
| --- | |
| ## Datasets de test recommandés | |
| ### Images | |
| | Dataset | Contenu | Accès | Lien | | |
| |---------|---------|-------|------| | |
| | **Deepfake-Eval-2024** | 759 réelles + 1191 fakes "in-the-wild" (réseaux sociaux 2024) | Direct HuggingFace | [lien](https://huggingface.co/datasets/nuriachandra/Deepfake-Eval-2024) | | |
| | **CIFAKE** | 60k réelles vs générées (Stable Diffusion) | Kaggle | [lien](https://www.kaggle.com/datasets/birdy654/cifake-real-and-ai-generated-synthetic-images) | | |
| | **DeepfakeJudge** | Benchmark VLM avec labels réel/fake + reasoning | HuggingFace | [lien](https://huggingface.co/datasets/MBZUAI/DeepfakeJudge-Dataset) | | |
| ```bash | |
| # Télécharger CIFAKE via Kaggle CLI | |
| pip install kaggle | |
| kaggle datasets download -d birdy654/cifake-real-and-ai-generated-synthetic-images | |
| unzip cifake-real-and-ai-generated-synthetic-images.zip -d datasets/cifake | |
| # Lancer le benchmark | |
| python verify_robustness.py \ | |
| --real_dir datasets/cifake/test/REAL \ | |
| --fake_dir datasets/cifake/test/FAKE \ | |
| --output rapport_cifake.json | |
| ``` | |
| ### Vidéos | |
| | Dataset | Contenu | Accès | Lien | | |
| |---------|---------|-------|------| | |
| | **DFDC (Facebook)** | 128k clips 10s, acteurs consentants, très diversifié | Kaggle (gratuit) | [lien](https://www.kaggle.com/competitions/deepfake-detection-challenge/data) | | |
| | **FaceForensics++** | 1000 vidéos originales + 4 méthodes de manipulation (Deepfakes, Face2Face, FaceSwap, NeuralTextures) | Formulaire Google (gratuit) | [lien](https://github.com/ondyari/FaceForensics) | | |
| | **Celeb-DF v2** | 5639 deepfakes haute qualité de célébrités | Formulaire (gratuit) | [lien](https://github.com/yuezunli/celeb-deepfakeforensics) | | |
| | **Deepfake-Eval-2024** | 45h de vidéos "in-the-wild" 2024 | HuggingFace | [lien](https://huggingface.co/datasets/nuriachandra/Deepfake-Eval-2024) | | |
| | **UniDataPro deepfake-videos** | 10k+ fichiers, 7k+ personnes | HuggingFace | [lien](https://huggingface.co/datasets/UniDataPro/deepfake-videos-dataset) | | |
| **Vidéos de test rapides (sans inscription) :** | |
| Pour tester immédiatement sans télécharger un dataset complet, tu peux utiliser ces sources : | |
| 1. **Vidéos réelles**: télécharge quelques clips depuis [Pexels](https://www.pexels.com/videos/) (licence gratuite, visages réels) | |
| 2. **Vidéos deepfake**: le repo [deepfakes-in-the-wild](https://github.com/jmpu/webconf21-deepfakes-in-the-wild) contient des liens vers des exemples publics | |
| 3. **Générer tes propres tests** avec [Deep-Live-Cam](https://github.com/hacksider/Deep-Live-Cam) (open source) sur une vidéo Pexels | |
| ```bash | |
| # Tester une vidéo directement via l'API | |
| curl -X POST http://localhost:8000/predict \ | |
| -F "file=@ma_video.mp4" \ | |
| -F "sensitivity=50" | python -m json.tool | |
| ``` | |
| --- | |
| ## Paramètres | |
| | Paramètre | Valeurs | Description | | |
| |-----------|---------|-------------| | |
| | `sensitivity` | 1-99 (défaut: 50) | Rigueur de détection. 80+ = strict, 20- = indulgent | | |
| | `robust_mode` | true/false | Compense les filtres Snap/Insta, réduit les faux positifs | | |
| | `use_clip` | true/false | Active l'analyse sémantique CLIP (GPU recommandé) | | |
| --- | |
| ## Profils de fusion | |
| L'API adapte automatiquement les poids selon le contexte détecté : | |
| | Profil | Déclencheur | Comportement | | |
| |--------|-------------|--------------| | |
| | `EXIF_IA_DETECTE` | Source IA trouvée dans les métadonnées | EXIF = 60% du score | | |
| | `FILTRE_SOCIAL` | Filtre Snap/Insta détecté | EXIF ignoré, ensemble ViT prioritaire | | |
| | `EXIF_FIABLE` | Appareil photo identifié dans EXIF | EXIF = 32% du score | | |
| | `EXIF_ABSENT` | Pas de métadonnées (strip réseau social) | FFT + texture renforcés | | |
| | `STANDARD` | Cas général | Pondération équilibrée | | |
| --- | |
| ## Structure du projet | |
| ``` | |
| deepfake_detection/ | |
| ├── api.py — API FastAPI v3.0 (image + vidéo + audio) | |
| ├── video_analyzer.py — Analyse vidéo multi-couches | |
| ├── cli.py — CLI (commande globale `deepfake`) | |
| ├── verify_robustness.py — Benchmark avec métriques complètes | |
| ├── setup.py — Configuration PyPI | |
| ├── frontend/ | |
| │ ├── index.html — Interface web (tabs Image / Audio / Vidéo / Texte) | |
| │ ├── script.js — Logique frontend | |
| │ └── style.css — Styles | |
| └── README.md | |
| ``` | |
| --- | |
| ## Corrections & Améliorations récentes | |
| ### v2.1: Garde-fous filtre social (correctif faux positifs) | |
| Problème identifié : avec `--sensitivity 85`, le shift de +0.18 était appliqué **avant** les garde-fous, ce qui pouvait faire passer une photo filtrée (Snapchat/Instagram) en DEEPFAKE. | |
| Corrections apportées dans `cli.py` et `api.py` : | |
| 1. Les garde-fous sont maintenant appliqués sur le **score brut** (avant le shift sensitivity) | |
| 2. Seuil filtre social élargi : `vit_fake < 0.70` (au lieu de `< 0.55`) pour couvrir la zone grise | |
| 3. Seuil de déclenchement filtre abaissé : `fc > 0.45` (au lieu de `> 0.60`) | |
| Comportement attendu après correction : | |
| - Photo réelle avec filtre Snap + sensitivity=85 → AUTHENTIQUE (score brut plafonné à 0.46, final ≤ 0.64) | |
| - Image Gemini/DALL-E + sensitivity=85 → DEEPFAKE maintenu (vit_fake > 0.70, garde-fou inactif) | |
| --- | |
| ## Vidéos de test recommandées | |
| ### Sans inscription (accès immédiat) | |
| | Source | Type | Lien | | |
| |--------|------|------| | |
| | **Pexels** | Vidéos réelles (visages, portraits), licence gratuite | [pexels.com/videos](https://www.pexels.com/videos/) | | |
| | **Pixabay** | Vidéos réelles libres de droits | [pixabay.com/videos](https://pixabay.com/videos/) | | |
| | **FaceForensics++ samples** | Exemples deepfake publics (GitHub) | [github.com/ondyari/FaceForensics](https://github.com/ondyari/FaceForensics) | | |
| | **Deepfakes-in-the-wild** | Liens vers deepfakes publics collectés | [github.com/jmpu/webconf21-deepfakes-in-the-wild](https://github.com/jmpu/webconf21-deepfakes-in-the-wild) | | |
| ### Datasets complets (formulaire ou Kaggle) | |
| | Dataset | Contenu | Accès | Lien | | |
| |---------|---------|-------|------| | |
| | **DFDC (Facebook)** | 128k clips 10s, très diversifié | Kaggle (gratuit) | [lien](https://www.kaggle.com/competitions/deepfake-detection-challenge/data) | | |
| | **FaceForensics++** | 1000 vidéos + 4 méthodes (Deepfakes, Face2Face, FaceSwap, NeuralTextures) | Formulaire Google | [lien](https://github.com/ondyari/FaceForensics) | | |
| | **Celeb-DF v2** | 5639 deepfakes haute qualité de célébrités | Formulaire gratuit | [lien](https://github.com/yuezunli/celeb-deepfakeforensics) | | |
| | **UniDataPro deepfake-videos** | 10k+ fichiers, 7k+ personnes | HuggingFace | [lien](https://huggingface.co/datasets/UniDataPro/deepfake-videos-dataset) | | |
| ### Tester rapidement une vidéo | |
| ```bash | |
| # Via l'API | |
| curl -X POST http://localhost:8000/predict \ | |
| -F "file=@ma_video.mp4" \ | |
| -F "sensitivity=50" | python -m json.tool | |
| # Mode rapide (moins de modèles, plus rapide) | |
| curl -X POST http://localhost:8000/predict/fast \ | |
| -F "file=@ma_video.mp4" \ | |
| -F "sensitivity=50" | |
| ``` | |
| **Vidéos de test suggérées (Pexels, téléchargement direct) :** | |
| - Portrait femme en intérieur : [pexels.com/video/3209828](https://www.pexels.com/video/3209828/) (réelle) | |
| - Portrait homme en extérieur : [pexels.com/video/3195394](https://www.pexels.com/video/3195394/) (réelle) | |
| - Pour les deepfakes : utilise les samples du repo FaceForensics++ (lien ci-dessus) | |
| --- | |
| ## Roadmap | |
| - [x] Détection image multi-couches (ViT + EXIF + FFT + Texture + Palette) | |
| - [x] Ensemble 3 modèles ViT | |
| - [x] Détection sources IA génératives (Gemini, DALL-E, Flux, Firefly...) | |
| - [x] Analyse vidéo (cohérence temporelle + ensemble frames) | |
| - [x] Détection audio (voix clonée) | |
| - [x] Interface web avec tab Vidéo | |
| - [x] Script de benchmark (Accuracy / F1 / AUC-ROC) | |
| - [x] Correctif garde-fous filtre social (v2.1) | |
| - [ ] Détection texte LLM (DeepSeek, ChatGPT, Claude): en cours | |
| - [ ] Support streaming vidéo temps réel | |
| - [ ] Fine-tuning sur Deepfake-Eval-2024 | |