v0.2 ke v0.3
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
| Aspek | v0.2.x | v0.3.0 (Terkini) |
|---|---|---|
| Mesin Inferensi Inti | Alibaba MNN (memerlukan C++ / CMake) | Pure Rust RTen (tanpa toolchain C++) |
| Format Model | Format .mnn proprietari | FlatBuffers .rten atau standar .onnx |
| API Sesi Inferensi | MnnSession | EngineSession (mengimplementasikan InferenceSession) |
| Model Konfigurasi | Blok preprocessing bersarang di konfigurasi statis | Pemisahan InitializeConfig & OcrRunOptions |
| Nama Paket NPM | Mandiri (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:
InitializeConfig: Inisialisasi statis satu kali untuk path model, kamus kosakata, dan alokasi thread.OcrRunOptions: Opsi per permintaan gambar yang diteruskan kedetect_text(...)ataurun_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-native | Jembatan native JNI/TurboModule |
rusto-web | @rustors/web | Engine WASM RTen untuk peramban |
react-rusto | @rustors/react | Hook 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.rtenatau.onnx. - Langkah 2: Perbarui versi dependensi ke
0.3.0(gunakan lingkup@rustors/*untuk npm). - Langkah 3: Ganti referensi
MnnSessionkeEngineSession. - Langkah 4: Pisahkan inisialisasi statis
InitializeConfigdari opsi per gambarOcrRunOptions. - Langkah 5: Sesuaikan konfigurasi (ganti
preprocessing.*bersarang denganoptions.detection.*danoptions.postprocess.*). - Langkah 6: Uji dan verifikasi hasil pembacaan teks dan koordinat kotak pembatas.