flutter_ocr_native 0.0.6 copy "flutter_ocr_native: ^0.0.6" to clipboard
flutter_ocr_native: ^0.0.6 copied to clipboard

A Flutter plugin for extracting text from images using native on-device OCR. Android uses ML Kit, iOS uses Apple Vision. Supports Aadhaar masking, handwriting detection, and English-only text extraction.

flutter_ocr_native #

A Flutter plugin for extracting text from images using native on-device OCR engines — no third-party Dart OCR packages required.

  • Android: Google ML Kit Text Recognition
  • iOS: Apple Vision Framework

Features #

  • Read text from image file path, File, or raw bytes
  • Structured results: blocks → lines → elements with bounding boxes & confidence scores
  • English-only extraction — non-Latin scripts auto-filtered
  • Aadhaar number masking (text + image) — configurable
  • Handwriting detection — rejects non-printed documents
  • Document viewer with pinch-to-zoom
  • Download with configurable watermark (Lead ID, Lat, Long, etc.)
  • Watermark auto-scales to image resolution — always readable
  • Platform-specific download paths handled internally
  • Fully on-device — no network calls, works offline

Getting Started #

dependencies:
  flutter_ocr_native: ^0.0.6

Android #

Minimum SDK 21. Add to android/app/build.gradle:

android {
    defaultConfig {
        minSdk 21
    }
}

iOS #

Minimum iOS 13.0. Set in ios/Podfile:

platform :ios, '13.0'

Usage #

Basic OCR #

import 'package:flutter_ocr_native/flutter_ocr_native.dart';

final reader = OcrReader();
final result = await reader.readFromPath('/path/to/image.jpg');
print(result.text);

// From File
final result = await reader.readFromFile(File('image.png'));

// From bytes
final result = await reader.readFromBytes(imageBytes);

// Structured data
for (final block in result.blocks) {
  for (final line in block.lines) {
    print('${line.text} (confidence: ${line.confidence})');
  }
}

await reader.dispose();

Validation & Aadhaar Masking #

final reader = OcrReader(
  validateDocument: true,  // reject empty & handwritten
  maskAadhaar: true,       // mask Aadhaar in text
);

try {
  final result = await reader.readFromPath('/path/to/aadhaar.jpg');

  // Masked text
  print(result.text); // "XXXX XXXX 2356"

  // Masked image (Aadhaar digits blacked out)
  if (result.hasAadhaar) {
    Image.memory(result.maskedImageBytes!);
  }
} on EmptyImageException {
  print('No text found');
} on HandwrittenTextException {
  print('Handwritten — not accepted');
}

Document Viewer #

// One-liner full-screen viewer with pinch-to-zoom
OcrDocumentViewer.show(
  context,
  result: result,
  originalFile: imageFile,
  title: 'My Document',
  watermark: OcrWatermark(lines: {
    'Lead ID': 'LD-20250101-001',
    'Lat': '12.9716',
    'Long': '77.5946',
  }),
  onSave: (bytes) async {
    await OcrDocumentSaver.downloadBytes(imageBytes: bytes);
  },
);

// Or use as a widget
OcrDocumentViewer(
  result: result,
  originalFile: imageFile,
  watermark: watermark,
  minScale: 0.5,
  maxScale: 5.0,
)

Download with Watermark #

final watermark = OcrWatermark(
  lines: {
    'Lead ID': 'LD-20250101-001',
    'Lat': '12.9716',
    'Long': '77.5946',
    'Agent': 'Ram Kumar',
    'Date': '2025-01-15 10:30',
  },
  // Optional styling:
  // textColor: Color(0xCCFFFFFF),
  // backgroundColor: Color(0xB3000000),
  // fontSize: 12,
);

// Auto downloads to platform-specific folder
// Android: /storage/emulated/0/Download/
// iOS: App Documents (visible in Files app)
final file = await OcrDocumentSaver.downloadFromPath(
  result: result,
  originalImagePath: imagePath,
  watermark: watermark,
);

// Or from bytes
final file = await OcrDocumentSaver.download(
  result: result,
  originalImageBytes: imageBytes,
  watermark: watermark,
);

// Save to custom directory
final file = await OcrDocumentSaver.save(
  result: result,
  originalImageBytes: imageBytes,
  directory: myDirectory,
  watermark: watermark,
);

// Download without watermark — just omit it
final file = await OcrDocumentSaver.downloadFromPath(
  result: result,
  originalImagePath: imagePath,
);

Custom Validator #

final reader = OcrReader(
  validateDocument: true,
  validator: OcrValidator(minTextLength: 20),
);

Toggle at Runtime #

reader.validateDocument = false;
reader.maskAadhaar = false;

Architecture #

lib/
├── flutter_ocr_native.dart               # Public barrel export
└── src/
    ├── models/
    │   ├── ocr_exception.dart             # EmptyImageException, HandwrittenTextException
    │   ├── ocr_result.dart                # OcrResult, TextBlock, TextLine, TextElement
    │   └── ocr_watermark.dart             # OcrWatermark config
    ├── utils/
    │   └── ocr_document_saver.dart        # Download & save with watermark
    ├── validators/
    │   └── ocr_validator.dart             # Document validation
    ├── widgets/
    │   └── ocr_document_viewer.dart       # Full-screen viewer widget
    ├── ocr_platform_interface.dart         # Abstract platform contract
    ├── ocr_method_channel.dart             # MethodChannel implementation
    └── ocr_reader.dart                    # Public API class

android/src/main/kotlin/com/flutter_ocr_native/
    └── OcrPlugin.kt                       # ML Kit OCR + Aadhaar masking + watermark

ios/Classes/
    └── OcrPlugin.swift                    # Vision OCR + Aadhaar masking + watermark

Supported Platforms #

Platform Min Version OCR Engine
Android SDK 21 Google ML Kit Text Recognition
iOS 13.0 Apple Vision Framework

Flutter Compatibility #

Requires Flutter 3.27.0+ (Dart SDK >=3.6.0 <4.0.0)

1
likes
0
points
635
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for extracting text from images using native on-device OCR. Android uses ML Kit, iOS uses Apple Vision. Supports Aadhaar masking, handwriting detection, and English-only text extraction.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, path_provider

More

Packages that depend on flutter_ocr_native

Packages that implement flutter_ocr_native