kamyvision-api / README.md
oyabun-dev's picture
deploy: 2026-03-30T04:25:24Z
0af0f05
---
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