How To

Menggunakan Flutter & Dart

Panduan penggunaan mesin OCR RustO! di aplikasi mobile, desktop Flutter, dan Dart murni via FFI.

RustO! menyediakan binding FFI untuk Dart murni (rusto) serta plugin Flutter (rusto_flutter) dengan integrasi platform bawaan untuk Android dan iOS.

Instalasi

Untuk Proyek Flutter

flutter pub add rusto_flutter

Untuk Proyek Dart Murni / Server

dart pub add rusto

1. Inisialisasi Engine

Inisialisasi engine dengan memberikan konfigurasi jalur model dan kamus:

import 'package:rusto/rusto.dart';

final config = '''
{
  "detection": { "model_path": "assets/models/PPOCR_v6/det.rten" },
  "recognition": { "model_path": "assets/models/PPOCR_v6/rec.rten", "dict_path": "assets/models/PPOCR_v6/dict.txt" }
}
''';

final engine = RustO.initialize(config);

2. Pengenalan Teks

Pengenalan Terstruktur

// Jalankan pengenalan pada file gambar lokal
final results = engine.detectTextFile('receipt.jpg');

for (final line in results) {
  print('[${line.score.toStringAsFixed(2)}] ${line.text}');
  print('  Frame: left=${line.frame.left}, top=${line.frame.top}, w=${line.frame.width}, h=${line.frame.height}');
}

// Lepaskan sumber daya native setelah selesai
engine.close();

Dari Byte Gambar Uint8List

import 'dart:io';

final bytes = File('document.png').readAsBytesSync();
final results = engine.detectTextData(bytes);

3. Rekonstruksi Tata Letak Spasial

final spatialText = engine.detectTextFileSpatial('invoice.png');
print('--- Tata Letak Dokumen Spasial ---');
print(spatialText);

4. Praktik Terbaik Pengujian di Flutter

Saat menulis testWidgets yang berinteraksi dengan loop FFI native, selalu muat file pengujian menggunakan operasi berkas sinkron (File(path).readAsBytesSync()) dan hindari pembacaan asinkron await File(path).readAsBytes(). Hal ini mencegah kemacetan penjadwalan antrean event pada zona pengujian FakeAsync milik Flutter.