Skip to content

theobizet/Projet-blackbox

Repository files navigation

🎥 Système de Vérification d'Authenticité Vidéo Dashcam

Solution complète de détection de fraude vidéo pour les assurances automobiles

📋 Vue d'ensemble

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

📦 Téléchargement Rapide

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

Installation rapide

Android (Dashcam)

  1. Copiez DashcamBlackbox.apk sur votre téléphone
  2. Activez "Sources inconnues" dans les paramètres
  3. Installez l'APK

Windows (Insurance Interface)

  1. Copiez tout le dossier InsuranceInterface/ sur votre PC
  2. Lancez flutter_application_insurance_interface.exe
  3. ⚠️ 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.

🔐 Principe de fonctionnement

┌─────────────────────────────────────────────────────────────────────────┐
│                        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

💡 Installation rapide : Utilisez les fichiers du dossier releases/ si vous voulez juste tester. Les instructions ci-dessous sont pour compiler depuis les sources.

Prérequis

1️⃣ Configuration Supabase

  1. Créez un nouveau projet sur Supabase

  2. 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));
  1. Notez votre URL Supabase et votre clé anon (Settings → API)

2️⃣ Application Android (Dashcam)

# 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

3️⃣ Application Windows (Assureur)

# 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.


📱 Utilisation

Côté Conducteur (Android)

  1. Lancez l'application Dashcam Blackbox
  2. Accordez les permissions (caméra, stockage)
  3. Appuyez sur "Démarrer" pour commencer l'enregistrement
  4. Conduisez normalement - l'application capture automatiquement des frames toutes les 5 secondes
  5. Appuyez sur "Arrêter" pour terminer
  6. La vidéo est sauvegardée dans Download/Dashcam-Videos/
  7. Les hashes sont uploadés automatiquement sur Supabase

Côté Assureur (Windows)

  1. Lancez l'application Insurance Interface
  2. Cliquez sur "Sélectionner une vidéo"
  3. Choisissez la vidéo reçue du client
  4. Entrez le Session ID (fourni par le client)
  5. Cliquez sur "Vérifier"
  6. Consultez le résultat :
    • ≥90% : Vidéo authentique
    • <90% : Vidéo potentiellement falsifiée

🔧 Architecture Technique

Algorithme de Hash (aHash)

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

Extraction des Frames

Plateforme Méthode Paramètres
Android video_thumbnail 640×480, PNG, qualité 100%
Windows FFmpeg 640×480, RGB24, PNG

Synchronisation des Timestamps

Les frames sont extraites à intervalles exacts de 5 secondes :

  • Frame 1 → 0s
  • Frame 2 → 5s
  • Frame 3 → 10s
  • ...

📁 Structure du Projet

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

🛡️ Sécurité et Conformité

Les 6 Consignes Implémentées

# 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

Gestion Hors-Ligne

L'application Android gère automatiquement les coupures réseau :

Perte connexion → Stockage SQLite local → Reconnexion → Sync automatique

🔍 Dépannage

Problème : "Similarité faible (~50%)"

Cause : Vidéo enregistrée avec une ancienne version de l'app

Solution : Faire un nouvel enregistrement avec la version mise à jour

Problème : "FFmpeg non trouvé" (Windows)

Solution :

  1. Télécharger FFmpeg depuis ffmpeg.org
  2. Extraire dans C:\ffmpeg
  3. Ajouter C:\ffmpeg\bin au PATH système

Problème : "Erreur Gradle" (Android)

Solution :

$env:JAVA_HOME = "C:\Program Files\Eclipse Adoptium\jdk-17.0.16.8-hotspot"
flutter clean
flutter pub get
flutter build apk --debug

Problème : "Session ID non trouvé"

Cause : Le session ID a expiré ou n'existe pas

Solution : Vérifier que les hashes ont bien été uploadés (voir logs Android)


🏗️ Compilation depuis les sources

Pour recompiler les applications avec vos propres clés Supabase :

Générer l'APK Android

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.apk

Générer l'EXE Windows

cd "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/

📊 Résultats Attendus

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

📄 Licence

Ce projet est destiné à un usage éducatif et professionnel dans le cadre de la détection de fraude à l'assurance.


👥 Support

Pour toute question ou problème :

  1. Vérifiez la section Dépannage
  2. Consultez les logs de l'application
  3. Vérifiez la connexion à Supabase

Développé avec ❤️ et Flutter

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors