Repères visuels

Comprendre ARGUS en trois schémas

Du signal observé jusqu’à la décision, voici comment les différentes couches du projet collaborent.

01
Pipeline générale de protectionDeux entrées, un moteur de décision, une réponse explicable.
Partage volontaireImage · audio · vidéo · document
Bouclier réseauURL · domaine · IP · protocole
événements normalisés
Event Bus + Decision EngineFusion des règles, de la réputation et des scores IA
décision justifiée
AutoriserScore 0–34
AvertirScore 35–69
BloquerScore 70–100
02
L’Orchestrateur IAIl choisit l’ordre des analyses et confronte trois regards spécialisés.
Orchestrateur ARGUSContexte · batterie · connexion · type de menace
Modèle forensiqueFalsification, ELA et OCR
Modèle médiaDeepfake, image, voix et vidéo
Modèle linguistiqueFrançais, camfranglais et langues locales
Fusion des verdicts
Verdict explicableUn score, des raisons et une action recommandée
03
Architecture distribuéeLes composants restent spécialisés mais partagent le même système de vigilance.
Application ARGUSAnalyse et protection citoyenne
Backend & IAFastAPI · règles · modèles · décisions
SupabaseSignalements et stockage
ERP DIVLABSupervision et sensibilisation

#Projet ARGUS

Bouclier numérique citoyen développé par DIVLAB pour aider à vérifier les contenus, comprendre les risques et signaler les menaces numériques.

Projet ARGUS, est un écosystème camerounais de cybersécurité assistée par intelligence artificielle. Il associe une application mobile Flutter, une API FastAPI, des moteurs d’analyse spécialisés et des services de persistance pour offrir au citoyen un parcours simple : voir, vérifier, comprendre et protéger.

Le dépôt contient l’application mobile et son backend. La landing page de présentation est maintenue séparément dans la documentation suivante ai-shield-landing.

Sommaire

Pourquoi ARGUS ?

Dans la mythologie grecque, Argus Panoptès est un gardien aux cent yeux. Le projet reprend cette image de vigilance continue : plusieurs outils observent des signaux différents, confrontent leurs résultats et produisent une décision compréhensible.

ARGUS répond à quatre enjeux concrets :

Le système fournit des indices et des niveaux de risque. Il ne remplace pas une expertise judiciaire, administrative ou journalistique.

Fonctionnalités

1. Authentification de documents

L’application mobile utilise le pipeline orchestré pour obtenir un dossier d’analyse complet. Une route directe de vérification documentaire reste également disponible dans l’API.

2. Filtre média intelligent

3. Vérification de provenance

Une première observation dans l’index ne prouve pas qu’un contenu est authentique. Le rapport indique explicitement cette limite.

4. Sentinelle linguistique

5. Signalement citoyen

6. Bouclier réseau

7. Automatisation mobile

Architecture

Utilisateur
   |
   v
Application Flutter (Android / iOS / Web)
   |  Dio, multipart, JSON
   v
API FastAPI /api/v1
   |
   +-- Analyse orchestrée
   |     +-- identification et extraction
   |     +-- classification documentaire
   |     +-- détection IA
   |     +-- provenance
   |     +-- analyse de fraude et de risque
   |
   +-- Services spécialisés
   |     +-- document, média, audio, réseau
   |     +-- signalement, notifications, VPN
   |
   +-- Persistance locale SQLite
   +-- Supabase optionnel
   +-- Qdrant optionnel
   +-- Fournisseurs IA externes optionnels

Principes de fonctionnement :

Organisation du dépôt

AI-SHIELD-main/
├── ai_shield/                 Application Flutter
│   ├── lib/core/              API, modèles, défense et widgets communs
│   ├── lib/features/          Modules fonctionnels et écrans
│   ├── lib/services/          VPN et services transversaux
│   ├── android/               Intégration Android, VPN et partage
│   ├── ios/                   Projet iOS
│   └── test/                  Tests Flutter
├── backend/                   API et moteurs d’analyse
│   ├── app/routes/            Contrats HTTP FastAPI
│   ├── app/services/          Logique métier et orchestration
│   ├── app/extractors/        Extraction image, PDF, audio et vidéo
│   ├── app/classifiers/       Classification et détection
│   ├── app/inference/         Politique locale/API et fournisseurs
│   ├── app/database/          Modèles SQLAlchemy et SQLite
│   ├── deploy/vpn/            Déploiement du relais VPN optionnel
│   ├── tests/                 Tests backend
│   ├── Dockerfile
│   └── docker-compose.yml
├── BACKEND_GUIDE.md           Guide backend historique détaillé
└── AI_SHIELD_CYBER_DEFENSE_ARCHITECTURE.md

Technologies

CoucheTechnologies principales
MobileFlutter, Dart, Provider, Dio
Android natifKotlin, VpnService, tunnel SOCKS5 natif
APIPython 3.11+, FastAPI, Pydantic, Uvicorn
Image et documentPillow, OpenCV, Tesseract, PyMuPDF, pypdf
Audio et vidéoFFmpeg, librosa, soundfile, Whisper
IAPyTorch, Transformers, CLIP et adaptateurs spécialisés
PersistanceSQLite/SQLAlchemy, Supabase optionnel
Recherche vectorielleQdrant optionnel
Testspytest, Flutter Test
ConteneursDocker, Docker Compose

Démarrage rapide

Prérequis

Les modèles locaux peuvent nécessiter plusieurs gigaoctets. Un GPU est facultatif ; le mode CPU et les mécanismes de repli restent disponibles.

1. Lancer le backend sous Windows

cd backend
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
Copy-Item .env.example .env
uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload

2. Lancer le backend sous Linux ou macOS

cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env
uvicorn app.main:app --host 0.0.0.0 --port 8080 --reload

Vérifications utiles :

3. Lancer l’application Flutter

cd ai_shield
flutter pub get
flutter run --dart-define=API_BASE_URL=http://localhost:8080

Pour un téléphone physique, remplacez localhost par l’adresse IP locale de l’ordinateur qui exécute FastAPI :

flutter run --dart-define=API_BASE_URL=http://192.168.1.20:8080

Le téléphone et l’ordinateur doivent être sur le même réseau, et le pare-feu doit autoriser le port 8080.

Configuration du frontend

Les contrôles sont définis à la compilation avec --dart-define.

VariableValeur par défautRôle
API_BASE_URLhttp://localhost:8080Adresse de l’API FastAPI
USE_MOCK_APIfalseUtilise des réponses locales de démonstration
SUBSCRIPTIONS_ENABLEDfalseActive le parcours réel d’abonnement
GRANT_ALL_PREMIUM_FEATUREStrueDébloque les fonctions Premium pour la démonstration
SHOW_DEV_UNLOCKED_BADGEStrueAffiche l’indication du mode débloqué
REMOTE_SENSIBILISATIONS_ENABLEDtrueCharge les sensibilisations depuis l’API
DEVICE_NOTIFICATIONS_ENABLEDtrueActive les notifications de l’appareil
SUBSCRIPTION_TEST_PLANpremiumPlan de test : auto, free ou premium

Exemple de démonstration totalement locale :

flutter run --dart-define=USE_MOCK_API=true

Exemple connecté au backend avec accès Premium de démonstration :

flutter run `
  --dart-define=API_BASE_URL=http://192.168.1.20:8080 `
  --dart-define=USE_MOCK_API=false `
  --dart-define=GRANT_ALL_PREMIUM_FEATURES=true

Les erreurs réseau sont traduites en messages utilisateur : connexion impossible, délai dépassé, erreur de certificat, refus métier ou indisponibilité temporaire.

Configuration du backend

Le backend lit backend/.env. Commencez toujours par copier .env.example, puis adaptez uniquement les services nécessaires.

Paramètres principaux

VariableDescription
PORTPort HTTP, 8080 par défaut
ENVEnvironnement d’exécution
CORS_ORIGINSOrigines Web autorisées, séparées par des virgules
MAX_UPLOAD_SIZE_MBTaille maximale d’un fichier
DATABASE_URLBase SQLAlchemy, SQLite par défaut
AI_EXECUTION_MODEauto, local, api ou offline
AI_MODEL_INFERENCE_ENABLEDAutorise les modèles locaux lourds
AUDIO_TRANSCRIPTION_ENABLEDAutorise la transcription Whisper
RISK_LLM_ENABLEDAutorise le LLM d’analyse du risque

Fournisseurs optionnels

ServiceVariables principalesUtilisation
GroqGROQ_API_KEYrisque JSON et transcription de secours
GeminiGEMINI_API_KEYanalyse structurée de secours
Cloudflare AICLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_IDtranscription de secours
Google VisionGOOGLE_VISION_API_KEYrecherche Web de provenance
SupabaseSUPABASE_URL, SUPABASE_SERVICE_KEYréplication, signalements et stockage
QdrantQDRANT_HOST, QDRANT_PORTrecherche vectorielle optionnelle

Ne placez jamais de vraie clé dans Git. La clé Supabase de service reste exclusivement côté backend.

Modes d’inférence

ModeComportement
autochoisit local ou API selon les ressources et clés disponibles
localprivilégie les modèles installés localement
apiprivilégie les fournisseurs externes configurés
offlinedésactive les appels externes et utilise les règles locales

Les étapes indisponibles retournent un résultat prudent plutôt que de faire échouer tout le pipeline.

Référence API

Toutes les routes métier utilisent le préfixe /api/v1.

MéthodeRouteFonction
GET/healthétat général de l’API
GET/health/inferencemode et fournisseurs d’inférence disponibles
POST/api/v1/analysis/analyzeanalyse orchestrée d’un fichier
GET/api/v1/analysis/reports/{report_id}récupération d’un rapport enregistré
POST/api/v1/document/verifyvérification directe d’une image documentaire
POST/api/v1/media/analyzeanalyse directe d’un média
POST/api/v1/provenance/checkprovenance d’une image ou d’un PDF
POST/api/v1/sentinel/audiotranscription et analyse linguistique
POST/api/v1/network/analyzescore et décision pour une URL
POST/api/v1/reportscréation d’un signalement citoyen
POST/api/v1/reports/attachmentenvoi d’une pièce jointe de signalement
POST/api/v1/report/submitancien contrat de signalement compatible
GET/api/v1/report/verdictsliste des verdicts disponibles
GET/api/v1/notifications/mobilesensibilisations destinées au mobile
POST/api/v1/subscriptionscréation d’un essai Premium
POST/api/v1/vpn/provisionidentifiants VPN d’une installation

Exemple d’analyse réseau :

curl -X POST http://localhost:8080/api/v1/network/analyze \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com","source":"manual"}'

Exemple d’analyse de fichier :

curl -X POST http://localhost:8080/api/v1/analysis/analyze \
  -F "file=@exemple.png"

Pipeline d’analyse

POST /api/v1/analysis/analyze exécute les étapes suivantes :

  1. calcul de l’identité, du hash et de la signature binaire ;
  2. détermination du type réel du média ;
  3. extraction des caractéristiques adaptées au fichier ;
  4. vérification structurelle ;
  5. détection de génération ou modification par IA ;
  6. collecte des indices de provenance ;
  7. classification documentaire ;
  8. transcription lorsque le contenu est audio et que le moteur est activé ;
  9. recherche de signaux de fraude ;
  10. fusion des résultats dans un dossier de risque explicable ;
  11. sauvegarde locale du rapport et réplication cloud optionnelle.

Les traitements OCR, FFmpeg et Whisper sont isolés de la boucle HTTP. Des délais maximums empêchent un fichier problématique de bloquer durablement le serveur.

Données et services externes

Stockage local

SQLite conserve les analyses, rapports opérationnels, signalements et identifiants VPN hachés. Cette configuration est adaptée au développement et à une démonstration sur une seule machine.

Supabase

Supabase est facultatif. Lorsqu’il est configuré :

Si Supabase est indisponible, les fonctions essentielles conservent un chemin local. Les tâches de réplication sont suivies et terminées proprement à l’arrêt de FastAPI.

Qdrant

Qdrant est prévu pour les recherches vectorielles et les extensions de provenance. Le MVP peut fonctionner sans lui pour les analyses qui utilisent les empreintes et règles locales.

Tests et qualité

Backend

cd backend
python -m pytest -q

État vérifié : 24 tests réussis. Ils couvrent notamment les routes, le pipeline, les mécanismes de repli, la provenance, Sentinel, le VPN et la correction OCR documentaire.

Frontend

cd ai_shield
flutter analyze
flutter test

État vérifié : le test Flutter passe. L’analyse statique ne contient aucune erreur bloquante ; les remarques restantes sont des recommandations de style.

Contrôle manuel recommandé

Préparer une démonstration

Pour une présentation devant un jury, le projet assume volontairement un accès simple :

Checklist avant la présentation :

Déploiement

Backend avec Docker Compose

cd backend
Copy-Item .env.example .env
docker compose up --build

Le compose démarre l’API sur le port 8080 et Qdrant sur le port 6333. Pour conserver durablement SQLite en dehors d’une démonstration, ajoutez un volume de données ou utilisez PostgreSQL.

Construction Android

cd ai_shield
flutter build apk --release `
  --dart-define=API_BASE_URL=https://api.example.com `
  --dart-define=USE_MOCK_API=false

Pour une diffusion publique, remplacez la signature Android de développement par une clé release privée et utilisez exclusivement HTTPS.

Production publique

Avant une ouverture Internet, prévoyez également :

Ces exigences ne bloquent pas une démonstration locale contrôlée.

Limites du MVP

Dépannage

Le téléphone ne joint pas l’API

Tesseract est introuvable

FFmpeg ne traite pas un média

Un modèle IA ne se charge pas

Supabase est indisponible

Confidentialité et licence

AI SHIELD / ARGUS est un projet propriétaire de DIVLAB. Le code, les modèles, l’architecture détaillée et les mécanismes de défense ne doivent pas être redistribués sans autorisation.

Lorsqu’un contenu sensible est analysé, appliquez les principes suivants : minimisation des données, consentement de l’utilisateur, durée de conservation limitée et accès réservé aux personnes autorisées.

À propos de DIVLAB

DIVLAB est une initiative camerounaise d’innovation numérique. Le Projet ARGUS traduit sa volonté de développer des technologies responsables, accessibles et ancrées dans les réalités locales.

Site : divlabs-tech.com