Advance Guide

v0.2 ke v0.3

Panduan peningkatan dari RustO v0.2 ke v0.3: Engine RTen pure Rust, format model .rten, EngineSession, opsi runtime terpisah, dan namespace @rustors.

RustO! v0.3.0 merupakan pembaruan arsitektural besar yang mentransisikan seluruh mesin inferensi inti ke pure Rust, menghapus ketergantungan toolchain C++/CMake, serta menyederhanakan API konfigurasi di seluruh bahasa yang didukung.


⚡ Ringkasan Pembaruan

Aspekv0.2.xv0.3.0 (Terkini)
Mesin Inferensi IntiAlibaba MNN (memerlukan C++ / CMake)Pure Rust RTen (tanpa toolchain C++)
Format ModelFormat .mnn proprietariFlatBuffers .rten atau standar .onnx
API Sesi InferensiMnnSessionEngineSession (mengimplementasikan InferenceSession)
Model KonfigurasiBlok preprocessing bersarang di konfigurasi statisPemisahan InitializeConfig & OcrRunOptions
Nama Paket NPMMandiri (react-rusto, rusto-web)Lingkup @rustors/* (@rustors/react, @rustors/web)

1. Arsitektur Engine & Format Model

Tanpa Toolchain C++ / CMake

Pada v0.2, RustO bergantung pada Alibaba MNN melalui binding C FFI. Hal ini memerlukan CMake, kompilator C++ per platform, dan integrasi toolchain NDK/Xcode yang rumit.

Pada v0.3, mesin inferensi bawaan 100% menggunakan pure Rust yang didukung oleh RTen. Mengompilasi RustO kini hanya memerlukan Cargo standar (cargo build), tanpa dependensi library eksternal pada saat kompilasi.

Transisi Format Model

Model format .mnn kini tidak lagi digunakan. Perbarui path model Anda ke format .rten (FlatBuffers) atau .onnx:

- det_model: "models/det.mnn"
- rec_model: "models/rec.mnn"
+ det_model: "models/det.rten"
+ rec_model: "models/rec.rten"

Berkas model .rten dan .onnx siap pakai tersedia di GitHub Releases, npm, dan NuGet.


2. API Sesi: EngineSession

Struktur konkret MnnSession telah digantikan oleh EngineSession, yang mengimplementasikan trait generik InferenceSession.

Sebelum (v0.2)

use rusto::session::MnnSession;

let det_session = MnnSession::from_file("models/det.mnn")?;

Sesudah (v0.3)

use rusto::session::EngineSession;

// Menggunakan backend bawaan RTen:
let det_session = EngineSession::from_det_config(&config.det)?;
let rec_session = EngineSession::from_rec_config(&config.rec)?;

// Atau membungkus engine kustom pihak ketiga (misal ONNX Runtime ort, Tract):
let custom_session = EngineSession::from_custom(my_session_box);
let ocr = RustO::with_custom_engines(config, det_session, rec_session)?;

3. Refaktorisasi Konfigurasi & Opsi Runtime

Pada v0.2, batas ambang preprocessing dan parameter post-processing digabungkan dalam struktur konfigurasi statis. Pada v0.3, opsi dipisahkan menjadi dua bagian:

  1. InitializeConfig: Inisialisasi statis satu kali untuk path model, kamus kosakata, dan alokasi thread.
  2. OcrRunOptions: Opsi per permintaan gambar yang diteruskan ke detect_text(...) atau run_ocr(...).

Struktur Opsi yang Disederhanakan

Blok preprocessing lama yang bersarang telah dihapus. Parameter deteksi dan post-processing kini menjadi field langsung pada OcrRunOptions:

Sebelum (v0.2)

// v0.2: Parameter runtime mengubah konfigurasi mesin statis
let mut config = Config::from_files("det.mnn", "rec.mnn", "dict.txt")?;
config.preprocessing.det_db_thresh = 0.3;
config.preprocessing.det_db_box_thresh = 0.6;
config.preprocessing.det_db_unclip_ratio = 1.6;

let mut ocr = RustO::new(config)?;
let result = ocr.run(&image)?;

Sesudah (v0.3)

use rusto::{InitializeConfig, OcrRunOptions, OutputGranularity, RustO};

// 1. Inisialisasi statis (thread-safe, muat sekali)
let mut ocr = RustO::initialize(InitializeConfig::ppv6(
    "models/det.rten",
    "models/rec.rten",
    "models/dict.txt",
))?;

// 2. Opsi per-permintaan (stateless, aman untuk konkurensi)
let mut options = OcrRunOptions::default();
options.detection.box_threshold = 0.6;
options.postprocess.unclip_ratio = 1.6;
options.output_granularity = OutputGranularity::Lines;

// Opsional: Kalibrasi dokumen & penskalaan resolusi
options.calibration.descreen = true;
options.optimization.max_side_len = 960;

let result = ocr.detect_text(&image, &options)?;

4. Migrasi Namespace Paket NPM (@rustors/*)

Seluruh paket npm telah dimigrasikan ke organisasi resmi @rustors:

Paket Lama (v0.2)Paket Resmi (v0.3)Keterangan
react-native-rusto@rustors/react-nativeJembatan native JNI/TurboModule
rusto-web@rustors/webEngine WASM RTen untuk peramban
react-rusto@rustors/reactHook dan context provider React
rusto-models-ppocrv6-*@rustors/model-ppocrv6-*Paket bundel model .rten siap pakai

Memperbarui package.json

  "dependencies": {
-   "react-native-rusto": "^0.2.4",
-   "rusto-models-ppocrv6-tiny": "^0.2.4"
+   "@rustors/react-native": "^0.3.0",
+   "@rustors/model-ppocrv6-tiny": "^0.3.0"
  }

5. Paket Mobile & Native

  • Android (JitPack / Gradle):
    // app/build.gradle
    implementation 'com.github.byrizki.rusto-rs:rusto-android:0.3.0'
    implementation 'com.github.byrizki.rusto-rs:rusto-models-ppocrv6-tiny:0.3.0'
    
  • iOS (CocoaPods):
    # Podfile
    pod 'RustO', '~> 0.3.0'
    pod 'RustO-Models-PPOCRv6-Tiny', '~> 0.3.0'
    
  • .NET (NuGet):
    dotnet add package RustODotnet --version 0.3.0
    dotnet add package RustODotnet.Models.PPOCRv6.Tiny --version 0.3.0
    

6. Daftar Periksa (Checklist) Migrasi

  • Langkah 1: Ganti berkas model (.mnn) dengan format .rten atau .onnx.
  • Langkah 2: Perbarui versi dependensi ke 0.3.0 (gunakan lingkup @rustors/* untuk npm).
  • Langkah 3: Ganti referensi MnnSession ke EngineSession.
  • Langkah 4: Pisahkan inisialisasi statis InitializeConfig dari opsi per gambar OcrRunOptions.
  • Langkah 5: Sesuaikan konfigurasi (ganti preprocessing.* bersarang dengan options.detection.* dan options.postprocess.*).
  • Langkah 6: Uji dan verifikasi hasil pembacaan teks dan koordinat kotak pembatas.