The application distinguishes between faces and documents. If a face is detected, it automatically extracts the facial bounding box, applies a grayscale filter using pure Dart image manipulation, and composites it back onto the original image. All processed files and original captures are persisted locally for offline access.
- Smart Auto-Detection: Uses Google ML Kit for accurate, on-device face and text recognition.
- Face Processing: Extracts facial coordinates, applies a B&W filter, and composites the result directly onto the original image.
- PDF Generation: Automatically converts standard document photos into clean, PDF files.
- Local History Dashboard: Persists all scanned items to the device storage using Hive, complete with a sorting and management interface.
- EXIF Normalization: Automatically handles iOS and Android camera sensor rotation data to ensure the ML Kit always analyzes upright images.
- Reactive UI: Built entirely with GetX for reactive state management, seamless routing, and dependency injection.
This project follows a decoupled architecture separating Presentation, Domain (No usecases just entities and repository blueprint), and Data layers.
- State Management & Routing:
get(GetX) - Machine Learning:
google_mlkit_face_detection,google_mlkit_text_recognition - Local Storage:
hive,hive_flutter,path_provider - Camera & Media:
camera,image_picker - Image & Document Manipulation:
image,pdf - File Viewing:
open_file
Youtube Link: https://youtube.com/shorts/7KXI8qKtdm8?si=3uIQdNiZBgDovg_G
- Flutter SDK:
^3.11.1or higher - Dart SDK:
^3.11.1or higher - An iOS Simulator, Android Emulator, or a physical device. (Note: Camera capture requires a physical device).
git clone https://github.com/RasKemal/image-processing-flutter-app.gitflutter pub getTo run the app on iOS, you must install the native CocoaPods dependencies required by the Google ML Kit and Camera plugins
cd ios
pod installThe generated Hive adapter (history_model.g.dart) is already committed to the repository so you can run the application immediately.
However, if you ever modify the HistoryModel class, you will need to regenerate this file by running:
flutter pub run build_runner build --delete-conflicting-outputsYou can launch the app directly from your IDE (VS Code / Android Studio) or by using the terminal commands below.
flutter runlib/core/: Application theme, routing bindings.
lib/data/: Hive local data sources, ML Kit processing services, and repository implementations.
lib/domain/: Core business entities and abstract repository contracts.
lib/presentation/: GetX Controllers and Views for Home, Processing, Result, and History details.