Advance Guide

Pra-pemrosesan & Tuning Gambar

Panduan penyetelan pra-pemrosesan per permintaan, deteksi DBNet, dilatasi morfologi, dan rasio unclip.

RustO! memberikan kontrol terperinci pada tingkat permintaan (request-local) terhadap skala ukuran gambar, ambang batas detektor DBNet, operator morfologi, dan pemotongan poligon.

🛠️ Alur Lengkap Pra-pemrosesan

Rendering diagram...

🎛️ Referensi Parameter

Seluruh parameter dapat dikonfigurasi per panggilan deteksi di dalam OcrRunOptions:

const options = {
  // 1. Batas Penskalaan Gambar
  minSideLen: 64, // Batas sisi minimum (piksel)
  maxSideLen: 1600, // Batas sisi maksimum (piksel) - mencegah OOM pada foto 48MP
  minHeight: 32, // Batas tinggi minimum
  widthHeightRatio: -1, // -1 mempertahankan rasio aspek asli

  // 2. Penyetelan Detektor DBNet
  detection: {
    limitSideLen: 960, // Target dimensi penskalaan detektor
    limitType: 'max', // 'min' (perbesar teks kecil) atau 'max' (batasi foto besar)
    mean: [0.485, 0.456, 0.406],
    std: [0.229, 0.224, 0.225],
  },

  // 3. Pascapemrosesan Poligon & Binarisasi
  postprocess: {
    threshold: 0.3, // Ambang probabilitas binarisasi piksel (0.0 hingga 1.0)
    boxThreshold: 0.6, // Ambang kepercayaan poligon teks (0.0 hingga 1.0)
    maxCandidates: 1000, // Jumlah maksimum kandidat poligon
    unclipRatio: 2.0, // Faktor ekspansi batas poligon
    useDilation: true, // Dilatasi morfologi 2x2 untuk teks pudar/terputus
  },
};

💡 Lembar Praktis Optimasi Kasus Nyata

1. Struk Termal Pudar & Cetakan Dot-Matrix

Kertas termal dan cetakan dot-matrix sering memiliki goresan karakter yang terputus-putus:

const faintReceiptOptions = {
  textScore: 0.45,
  postprocess: {
    useDilation: true, // Menyambungkan kembali goresan karakter yang terputus
    threshold: 0.25, // Menurunkan ambang binarisasi untuk cetakan abu-abu terang
    unclipRatio: 2.2, // Memperluas area kotak teks
  },
};

2. Foto Kamera Ponsel Resolusi Tinggi (48MP - 108MP)

Foto kamera mentah berukuran raksasa dapat menghabiskan memori jika tidak dibatasi sebelum inferensi:

const mobileCameraOptions = {
  maxSideLen: 1600, // Menurunkan skala sebelum alokasi memori inferensi
  detection: {
    limitSideLen: 960,
    limitType: 'max',
  },
};

3. Pemindaian Dokumen Teks Kecil & Padat (Kontrak / Tabel Rapat)

Memastikan teks berukuran 6pt/8pt tetap tajam dan terbaca jelas oleh detektor:

const denseScanOptions = {
  detection: {
    limitSideLen: 1200,
    limitType: 'min', // Menaikkan sisi terpendek agar karakter kecil terlihat jelas
  },
  postprocess: {
    useDilation: false, // Mencegah karakter yang berdekatan saling bertumpuk
    unclipRatio: 1.6,
  },
};