| # Application Flutter - Détection de Tuberculose Pulmonaire | |
| Cette application Flutter reproduit les fonctionnalités de votre application Streamlit pour la détection de tuberculose à partir de radiographies thoraciques. | |
| ## 🚀 Fonctionnalités | |
| - **Interface utilisateur moderne** : Design Material adapté pour mobile | |
| - **Prise de photos** : Caméra intégrée ou sélection depuis la galerie | |
| - **Intelligence artificielle** : Classification automatique avec TensorFlow Lite | |
| - **Détection de nodules** : Analyse visuelle des anomalies pulmonaires | |
| - **Partage d'images** : Export et partage des résultats d'analyse | |
| - **Interface intuitive** : Navigation par drawer et layout responsive | |
| ## 📋 Prérequis | |
| - Flutter SDK (version 3.0 ou supérieure) | |
| - Dart SDK (version 2.18 ou supérieure) | |
| - Android Studio / VS Code avec extensions Flutter | |
| - Un appareil Android/iOS ou émulateur | |
| ## 🛠️ Installation | |
| ### 1. Cloner le projet | |
| ```bash | |
| git clone <votre-repo> | |
| cd tuberculosis_detection | |
| ``` | |
| ### 2. Installer les dépendances | |
| ```bash | |
| flutter pub get | |
| ``` | |
| ### 3. Ajouter le modèle TensorFlow Lite | |
| Créez le dossier `assets/models/` dans votre projet et placez-y votre modèle : | |
| ``` | |
| assets/ | |
| models/ | |
| mon_modele_final.tflite | |
| ``` | |
| **Important** : Convertissez votre modèle Keras en format TensorFlow Lite : | |
| ```python | |
| # Script Python pour convertir le modèle | |
| import tensorflow as tf | |
| # Charger votre modèle Keras | |
| model = tf.keras.models.load_model('mon_modele_final.keras') | |
| # Convertir en TFLite | |
| converter = tf.lite.TFLiteConverter.from_keras_model(model) | |
| converter.optimizations = [tf.lite.Optimize.DEFAULT] | |
| tflite_model = converter.convert() | |
| # Sauvegarder | |
| with open('mon_modele_final.tflite', 'wb') as f: | |
| f.write(tflite_model) | |
| ``` | |
| ### 4. Configuration des permissions | |
| #### Android | |
| Le fichier `android/app/src/main/AndroidManifest.xml` doit contenir : | |
| ```xml | |
| <uses-permission android:name="android.permission.CAMERA" /> | |
| <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> | |
| <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> | |
| ``` | |
| #### iOS | |
| Ajoutez dans `ios/Runner/Info.plist` : | |
| ```xml | |
| <key>NSCameraUsageDescription</key> | |
| <string>Cette app a besoin d'accéder à la caméra pour prendre des photos de radiographies.</string> | |
| <key>NSPhotoLibraryUsageDescription</key> | |
| <string>Cette app a besoin d'accéder à la galerie pour sélectionner des radiographies.</string> | |
| ``` | |
| ### 5. Lancer l'application | |
| ```bash | |
| # Vérifier les appareils disponibles | |
| flutter devices | |
| # Lancer sur l'appareil connecté | |
| flutter run | |
| # Ou lancer en mode release | |
| flutter run --release | |
| ``` | |
| ## 📱 Utilisation | |
| 1. **Charger une image** : Utilisez les boutons "Galerie" ou "Caméra" | |
| 2. **Analyser** : Appuyez sur "🔍 Analyser l'image" | |
| 3. **Consulter les résultats** : Diagnostic, probabilité et nodules détectés | |
| 4. **Partager** : Exportez l'image analysée via le bouton "Partager" | |
| ## 🏗️ Architecture du Code | |
| ``` | |
| lib/ | |
| main.dart # Point d'entrée et interface principale | |
| assets/ | |
| models/ | |
| mon_modele_final.tflite # Modèle TensorFlow Lite | |
| ``` | |
| ### Classes principales | |
| - `TuberculosisDetectionApp` : Application principale | |
| - `TuberculosisDetectionScreen` : Écran principal avec logique métier | |
| - `_preprocessImage()` : Préprocessing des images pour le modèle | |
| - `_detectNodules()` : Détection simulée des nodules pulmonaires | |
| - `_analyzeImage()` : Pipeline complet d'analyse | |
| ## 🔧 Personnalisation | |
| ### 1. Modifier les paramètres du modèle | |
| ```dart | |
| // Dans _preprocessImage() | |
| final resized = img.copyResize(image, width: 224, height: 224); | |
| // Dans _analyzeImage() | |
| final isTB = prediction > 0.5; // Seuil de décision | |
| ``` | |
| ### 2. Personnaliser l'interface | |
| ```dart | |
| // Couleurs du thème | |
| theme: ThemeData( | |
| primarySwatch: Colors.blue, // Changer la couleur principale | |
| ), | |
| // Textes de l'interface | |
| title: Text('🩺 Votre Titre Personnalisé'), | |
| ``` | |
| ### 3. Ajouter de nouvelles fonctionnalités | |
| - Historique des analyses | |
| - Export PDF des rapports | |
| - Mode sombre/clair | |
| - Support multi-langues | |
| ## 🐛 Dépannage | |
| ### Problème de modèle TensorFlow Lite | |
| ```bash | |
| # Vérifier que le modèle est bien présent | |
| ls -la assets/models/ | |
| # Si le modèle n'est pas trouvé, l'app fonctionne en mode simulation | |
| ``` | |
| ### Problèmes de permissions | |
| ```bash | |
| # Réinitialiser les permissions de l'app | |
| flutter clean | |
| flutter pub get | |
| flutter run | |
| ``` | |
| ### Erreurs de build | |
| ```bash | |
| # Nettoyer le build | |
| flutter clean | |
| flutter pub get | |
| # Reconstruire | |
| flutter build apk --debug | |
| ``` | |
| ## 📦 Build de Production | |
| ### Android (APK) | |
| ```bash | |
| flutter build apk --release | |
| # Le fichier sera dans build/app/outputs/flutter-apk/ | |
| ``` | |
| ### Android (App Bundle) | |
| ```bash | |
| flutter build appbundle --release | |
| # Pour publication sur Google Play Store | |
| ``` | |
| ### iOS | |
| ```bash | |
| flutter build ios --release | |
| # Nécessite un compte développeur Apple | |
| ``` | |
| ## 🔒 Sécurité et Confidentialité | |
| - **Données locales** : Toutes les analyses sont effectuées sur l'appareil | |
| - **Pas de cloud** : Aucune image n'est envoyée vers des serveurs externes | |
| - **Permissions minimales** : Seuls caméra et stockage sont demandés | |
| - **Avertissement médical** : Interface claire sur les limitations de l'outil | |
| ## 📚 Ressources Supplémentaires | |
| - [Documentation Flutter](https://docs.flutter.dev/) | |
| - [TensorFlow Lite Flutter](https://pub.dev/packages/tflite_flutter) | |
| - [Image Picker Plugin](https://pub.dev/packages/image_picker) | |
| - [Material Design Guidelines](https://material.io/design) | |
| ## 🤝 Contribution | |
| Pour contribuer au projet : | |
| 1. Fork le repository | |
| 2. Créer une branche feature (`git checkout -b feature/AmazingFeature`) | |
| 3. Commit les changements (`git commit -m 'Add AmazingFeature'`) | |
| 4. Push sur la branche (`git push origin feature/AmazingFeature`) | |
| 5. Ouvrir une Pull Request | |
| ## 📄 Licence | |
| Ce projet est sous licence MIT. Voir le fichier `LICENSE` pour plus de détails. | |
| ## ⚠️ Avertissement Médical | |
| Cette application est destinée à l'aide au diagnostic uniquement. Elle ne remplace pas l'avis d'un professionnel de santé qualifié. Toujours consulter un médecin pour un diagnostic définitif. |