Back to R&D
researchexperimental

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.

FlutterOCRR&DPluginComputer Vision

Why I Built This

Many applications require identity data input, yet manual entry is error-prone and inefficient. This project explores how Flutter can leverage native OCR engines to extract structured text from Indonesian ID cards in a reusable and extensible way.

Tech Stack

FlutterCross-platform framework
DartPlugin API & logic
Google ML KitAndroid OCR engine
Apple VisioniOS OCR engine
Platform ChannelsDart–Native interop

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.

1

Flutter Plugin Architecture

Designed a Flutter plugin structure separating Dart-facing APIs from native platform implementations.

2

Native OCR Integration

Integrated Google ML Kit on Android and Apple Vision on iOS to perform on-device text recognition.

3

Platform Channel Communication

Implemented Dart-to-native communication using platform channels to pass image data and receive OCR results.

4

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

Planned next steps include: • Improving OCR result normalization for Indonesian ID formats • Adding clearer public APIs and documentation • Publishing an initial experimental release to pub.dev • Opening contribution guidelines for community involvement

Interested in this experiment?

I'm always happy to discuss technical details, share learnings, or collaborate on similar explorations.