Application mobile Flutter de détection des ravageurs agricoles en Afrique du Nord (Tunisie, Maroc, Algérie). On photographie une feuille, une plante ou un insecte, et l'application identifie, via Google Gemini, lequel des 40 ravageurs connus il s'agit, puis affiche des conseils de traitement et une fiche complète. Disponible en français, anglais et arabe, avec mode clair et sombre.
- Analyse par IA (Gemini 2.5 Flash) adaptée à la culture scannée
- Bibliothèque de 40 ravageurs : taxonomie, cycle de vie, symptômes, dégâts, prévention, lutte biologique / chimique / mécanique
- Filtres par culture, ordre, milieu et statut (favoris, quarantaine, polyphage)
- Historique des analyses local (hors-ligne, Drift / SQLite)
- 3 langues (FR / EN / AR) et thème sombre
- Flutter SDK (Dart
^3.11.3) - Une clé API Google Gemini — https://aistudio.google.com/app/apikey
git clone https://github.com/AymenJeddou/AgroScan.git
cd AgroScan
flutter pub getLa clé n'est jamais stockée dans le code source : elle est injectée à la
compilation via --dart-define.
# Copier le modèle puis y coller votre vraie clé
cp key.env.example key.env # PowerShell : Copy-Item key.env.example key.env
# éditer key.env -> GEMINI_KEY=votre_vraie_cle
key.envest ignoré par Git et ne doit jamais être commité.
flutter run --dart-define=GEMINI_KEY=votre_vraie_cleflutter testLes tests utilisent MockInferenceRepository (aucune clé Gemini nécessaire).
Le script lit la clé depuis key.env, génère des APK séparés par architecture
et obfusque le code :
.\build_release.ps1Sortie : build/app/outputs/flutter-apk/
À partager : app-arm64-v8a-release.apk (compatible avec la quasi-totalité
des téléphones récents).
L'historique reste local par défaut. Pour activer la synchronisation Supabase,
ajoutez à la commande flutter run / flutter build :
--dart-define=SUPABASE_URL=https://votre-projet.supabase.co --dart-define=SUPABASE_ANON_KEY=votre_cle_anonSans ces deux valeurs, Supabase n'est pas initialisé et l'application reste 100 % hors-ligne.
compress_pest_images.py <dossier_dataset>: redimensionne et compresse les photos du dataset versassets/images/pests/(nécessite Pillow)patch_pests_json.py: met à jourassets/data/pests.jsonavec les chemins d'images générés (pest_image_mapping.json)
- Clean Architecture, structure par fonctionnalité (
feature-first) - UI : Flutter (Dart) · État : Riverpod · IA : Gemini 2.5 Flash (HTTP)
- Base locale : Drift / SQLite
L'APK de release contient la clé compilée (obfusquée). L'obfuscation n'est pas du chiffrement : une personne déterminée peut toujours l'extraire. C'est acceptable pour partager des builds de test en privé, mais ne publiez pas l'APK ni la clé. Pour une diffusion large, déplacez la clé derrière un backend.