Solution complète de détection de fraude vidéo pour les assurances automobiles
Ce projet comprend deux applications Flutter qui travaillent ensemble pour garantir l'authenticité des vidéos dashcam :
| Application | Plateforme | Rôle |
|---|---|---|
| Dashcam Blackbox | Android | Enregistre les vidéos et génère des empreintes numériques (hashes) |
| Insurance Interface | Windows | Vérifie l'authenticité des vidéos soumises |
Les applications pré-compilées sont disponibles dans le dossier releases/ :
| Application | Fichier | Taille |
|---|---|---|
| 📱 Android | releases/DashcamBlackbox.apk |
~48 MB |
| 💻 Windows | releases/InsuranceInterface/ |
~92 MB |
- Copiez
DashcamBlackbox.apksur votre téléphone - Activez "Sources inconnues" dans les paramètres
- Installez l'APK
- Copiez tout le dossier
InsuranceInterface/sur votre PC - Lancez
flutter_application_insurance_interface.exe ⚠️ Prérequis : FFmpeg doit être installé (télécharger)
💡 Ces builds utilisent l'instance Supabase de démonstration. Pour une utilisation en production, recompilez avec vos propres clés.
┌─────────────────────────────────────────────────────────────────────────┐
│ ENREGISTREMENT (Android) │
├─────────────────────────────────────────────────────────────────────────┤
│ 📱 Téléphone 📹 Vidéo .mp4 🔐 Hashes (aHash) │
│ │ │ │ │
│ │ Enregistrement │ Extraction frames │ Upload │
│ └─────────────────────┴────────────────────────┴──────────────────│
│ ↓ │
│ ☁️ Supabase Database │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ VÉRIFICATION (Windows) │
├─────────────────────────────────────────────────────────────────────────┤
│ 💻 PC Assureur 📹 Vidéo reçue 🔍 Comparaison │
│ │ │ │ │
│ │ Sélection vidéo │ Extraction frames │ ≥90% = ✅ │
│ └─────────────────────┴────────────────────────┴──────────────────│
│ ↑ │
│ ☁️ Récupération hashes originaux │
└─────────────────────────────────────────────────────────────────────────┘
💡 Installation rapide : Utilisez les fichiers du dossier
releases/si vous voulez juste tester. Les instructions ci-dessous sont pour compiler depuis les sources.
- Flutter SDK 3.x ou supérieur
- JDK 17 (pour Android) - Eclipse Adoptium
- FFmpeg (pour Windows) - Télécharger
- Compte Supabase - Créer un compte
-
Créez un nouveau projet sur Supabase
-
Exécutez ce SQL dans l'éditeur SQL de Supabase :
-- Table des frames avec leurs hashes
CREATE TABLE IF NOT EXISTS frames (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
device_id TEXT NOT NULL,
session_id TEXT NOT NULL,
frame_number INTEGER NOT NULL,
hash TEXT NOT NULL,
width INTEGER DEFAULT 640,
height INTEGER DEFAULT 480,
timestamp TIMESTAMPTZ DEFAULT NOW(),
created_at TIMESTAMPTZ DEFAULT NOW()
);
-- Index pour optimiser les requêtes
CREATE INDEX IF NOT EXISTS idx_frames_session ON frames(session_id);
CREATE INDEX IF NOT EXISTS idx_frames_device ON frames(device_id);
-- Fonction RPC pour configurer le device_id
CREATE OR REPLACE FUNCTION set_device_config(device_id_param TEXT)
RETURNS VOID AS $$
BEGIN
PERFORM set_config('app.device_id', device_id_param, false);
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
-- Activer RLS
ALTER TABLE frames ENABLE ROW LEVEL SECURITY;
-- Politique: tout le monde peut lire (pour la vérification)
CREATE POLICY "frames_select_all" ON frames FOR SELECT USING (true);
-- Politique: insertion avec device_id valide
CREATE POLICY "frames_insert_device" ON frames FOR INSERT
WITH CHECK (device_id = current_setting('app.device_id', true));- Notez votre URL Supabase et votre clé anon (Settings → API)
# Cloner et accéder au dossier
cd "flutter_application_blackbox"
# Installer les dépendances
flutter pub get
# Configurer JAVA_HOME (JDK 17 requis)
$env:JAVA_HOME = "C:\Program Files\Eclipse Adoptium\jdk-17.0.16.8-hotspot"
# Construire l'APK
flutter build apk --debug `
--dart-define=SUPABASE_URL=https://VOTRE_URL.supabase.co `
--dart-define=SUPABASE_KEY=VOTRE_CLE_ANON
# Installer sur le téléphone connecté
flutter install -d <DEVICE_ID> --debug# Accéder au dossier
cd "flutter_application_insurance_interface"
# Installer les dépendances
flutter pub get
# Lancer l'application
flutter run -d windows `
--dart-define=SUPABASE_URL=https://VOTRE_URL.supabase.co `
--dart-define=SUPABASE_KEY=VOTRE_CLE_ANON
⚠️ Important : FFmpeg doit être installé et accessible dans le PATH système.
- Lancez l'application Dashcam Blackbox
- Accordez les permissions (caméra, stockage)
- Appuyez sur "Démarrer" pour commencer l'enregistrement
- Conduisez normalement - l'application capture automatiquement des frames toutes les 5 secondes
- Appuyez sur "Arrêter" pour terminer
- La vidéo est sauvegardée dans
Download/Dashcam-Videos/ - Les hashes sont uploadés automatiquement sur Supabase
- Lancez l'application Insurance Interface
- Cliquez sur "Sélectionner une vidéo"
- Choisissez la vidéo reçue du client
- Entrez le Session ID (fourni par le client)
- Cliquez sur "Vérifier"
- Consultez le résultat :
- ✅ ≥90% : Vidéo authentique
- ❌ <90% : Vidéo potentiellement falsifiée
L'application utilise aHash (Average Hash) pour générer des empreintes perceptuelles :
Image → Resize 8×8 → Grayscale → Compare à moyenne → 64 bits → Hex (16 chars)
Avantages de aHash :
- ✅ Tolérant à la compression vidéo (H.264)
- ✅ Résistant aux variations de luminosité
- ✅ Insensible aux différences de décodeurs vidéo
- ✅ Rapide à calculer
| Plateforme | Méthode | Paramètres |
|---|---|---|
| Android | video_thumbnail |
640×480, PNG, qualité 100% |
| Windows | FFmpeg |
640×480, RGB24, PNG |
Les frames sont extraites à intervalles exacts de 5 secondes :
- Frame 1 → 0s
- Frame 2 → 5s
- Frame 3 → 10s
- ...
Projet blackbox/
├── releases/ # 📦 Applications pré-compilées
│ ├── DashcamBlackbox.apk # APK Android (~48 MB)
│ └── InsuranceInterface/ # App Windows
│ └── flutter_application_insurance_interface.exe
│
├── flutter_application_blackbox/ # App Android (Dashcam)
│ ├── lib/
│ │ ├── main.dart # Point d'entrée
│ │ ├── screens/
│ │ │ └── dashcam_screen.dart # Écran principal
│ │ └── services/
│ │ ├── dashcam_service.dart # Logique d'enregistrement
│ │ ├── offline_queue_service.dart # Queue hors-ligne SQLite
│ │ └── perceptual_hash_service.dart # Calcul aHash
│ └── pubspec.yaml
│
├── flutter_application_insurance_interface/ # App Windows (Assureur)
│ ├── lib/
│ │ ├── main.dart
│ │ ├── screens/
│ │ │ └── verification_screen.dart # Écran de vérification
│ │ └── services/
│ │ ├── video_verification_service.dart # Logique de vérification
│ │ └── perceptual_hash_service.dart # Calcul aHash (identique)
│ └── pubspec.yaml
│
└── README.md # Ce fichier
| # | Consigne | Implémentation |
|---|---|---|
| 1 | Envoi des hashes au serveur | ✅ Upload vers Supabase |
| 2 | Acquisition dynamique de frames | ✅ Toutes les 5 secondes pendant l'enregistrement |
| 3 | Génération des hashes après acquisition | ✅ aHash calculé après extraction |
| 4 | Support vérification intégrité | ✅ Frames numérotées + horodatées |
| 5 | Gestion des coupures réseau | ✅ Queue SQLite locale + sync auto |
| 6 | Préparation suppression automatique | ✅ Timestamps UTC pour TTL |
L'application Android gère automatiquement les coupures réseau :
Perte connexion → Stockage SQLite local → Reconnexion → Sync automatique
Cause : Vidéo enregistrée avec une ancienne version de l'app
Solution : Faire un nouvel enregistrement avec la version mise à jour
Solution :
- Télécharger FFmpeg depuis ffmpeg.org
- Extraire dans
C:\ffmpeg - Ajouter
C:\ffmpeg\binau PATH système
Solution :
$env:JAVA_HOME = "C:\Program Files\Eclipse Adoptium\jdk-17.0.16.8-hotspot"
flutter clean
flutter pub get
flutter build apk --debugCause : Le session ID a expiré ou n'existe pas
Solution : Vérifier que les hashes ont bien été uploadés (voir logs Android)
Pour recompiler les applications avec vos propres clés Supabase :
cd "flutter_application_blackbox"
$env:JAVA_HOME = "C:\Program Files\Eclipse Adoptium\jdk-17.0.16.8-hotspot"
flutter build apk --release `
--dart-define=SUPABASE_URL=https://VOTRE_URL.supabase.co `
--dart-define=SUPABASE_KEY=VOTRE_CLE_ANON
# APK généré dans: build/app/outputs/flutter-apk/app-release.apkcd "flutter_application_insurance_interface"
flutter build windows --release `
--dart-define=SUPABASE_URL=https://VOTRE_URL.supabase.co `
--dart-define=SUPABASE_KEY=VOTRE_CLE_ANON
# EXE généré dans: build/windows/x64/runner/Release/| Scénario | Similarité Attendue | Verdict |
|---|---|---|
| Vidéo originale non modifiée | 95-100% | ✅ Authentique |
| Vidéo légèrement compressée | 90-95% | ✅ Authentique |
| Vidéo éditée (frames coupées) | <50% | ❌ Fraude |
| Vidéo d'une autre session | ~50% | ❌ Fraude |
| Vidéo totalement différente | ~30-50% | ❌ Fraude |
Ce projet est destiné à un usage éducatif et professionnel dans le cadre de la détection de fraude à l'assurance.
Pour toute question ou problème :
- Vérifiez la section Dépannage
- Consultez les logs de l'application
- Vérifiez la connexion à Supabase
Développé avec ❤️ et Flutter