Flutter Indonesian ID Card OCR
Experimental Flutter plugin for extracting text from Indonesian identity cards (e.g. KTP, NPWP) using native OCR engines on Android and iOS.
Why I Built This
Tech Stack
Technical Approach
Developed a custom Flutter plugin that bridges Dart with native OCR engines on Android and iOS, focusing on feasibility, accuracy, and cross-platform interoperability.
Flutter Plugin Architecture
Designed a Flutter plugin structure separating Dart-facing APIs from native platform implementations.
Native OCR Integration
Integrated Google ML Kit on Android and Apple Vision on iOS to perform on-device text recognition.
Platform Channel Communication
Implemented Dart-to-native communication using platform channels to pass image data and receive OCR results.
Result Normalization
Explored basic normalization of OCR output to make extracted text usable for downstream processing.
Key Learnings
What worked, what didn't, and what I'd do differently.
What Worked
- Native OCR engines provide better accuracy than generic OCR libraries
- Flutter plugin architecture enables reusable cross-platform capabilities
- On-device OCR avoids dependency on external services
Challenges Faced
- OCR accuracy varies significantly depending on image quality
- Text structure extraction for Indonesian ID cards requires domain-specific tuning
- API design needs refinement before public consumption
Key Insights
The bigger lessons that go beyond this specific experiment.
Flutter Beyond UI
Flutter can act as a bridge to advanced native capabilities, not just a UI framework.
OCR Is Domain-Specific
Generic text recognition is insufficient; structured documents require tailored parsing logic.
R&D Before Generalization
Exploration and validation are critical steps before publishing a stable public package.
What's Next
Interested in this experiment?
I'm always happy to discuss technical details, share learnings, or collaborate on similar explorations.