How To
Menggunakan React
Integrasi @rustors/react hooks, provider, dan komponen overlay.
Menggunakan React
Paket @rustors/react menyediakan komponen deklaratif untuk React: <RustoProvider />, useOcr(), <OcrOverlay />, dan <OcrDropzone />.
Instalasi
npm install @rustors/react @rustors/web @rustors/model-ppocrv6-tiny
# atau
yarn add @rustors/react @rustors/web @rustors/model-ppocrv6-tiny
# atau
pnpm add @rustors/react @rustors/web @rustors/model-ppocrv6-tiny
Konfigurasi Provider
Bungkus aplikasi Anda dengan RustoProvider untuk mengelola daur hidup engine dan konfigurasi model. Anda dapat memuat model dari aset lokal publik atau langsung dari CDN jsDelivr:
import React from 'react';
import { RustoProvider } from '@rustors/react';
import { getModelUrls } from '@rustors/model-ppocrv6-tiny';
// Opsi A: Aset lokal di folder public/
// const modelUrls = getModelUrls('/models/ppocrv6-tiny');
// Opsi B: Dihosting langsung via CDN jsDelivr (tanpa perlu bundling aset lokal)
const modelUrls = getModelUrls('https://cdn.jsdelivr.net/npm/@rustors/model-ppocrv6-tiny');
export function App() {
return (
<RustoProvider
config={{
preset: 'ppv6',
wasmUrl: 'https://cdn.jsdelivr.net/npm/@rustors/web/dist/wasm/rusto_rten_wasm_bg.wasm',
models: {
detection: modelUrls.detection,
recognition: modelUrls.recognition,
dictionary: modelUrls.dictionary,
},
}}
>
<OcrScanner />
</RustoProvider>
);
}
Memindai dengan useOcr dan <OcrOverlay />
import React, { useState } from 'react';
import { useOcr, OcrOverlay, OcrDropzone } from '@rustors/react';
export function OcrScanner() {
const [imageSrc, setImageSrc] = useState<string | null>(null);
const { detect, results, isProcessing } = useOcr();
const handleFileSelect = async (file: File) => {
setImageSrc(URL.createObjectURL(file));
await detect(file);
};
return (
<div>
<OcrDropzone onFileSelect={handleFileSelect} />
{isProcessing && <p>Memindai dokumen...</p>}
{imageSrc && results.length > 0 && (
<OcrOverlay
imageSrc={imageSrc}
results={results}
onItemClick={(item) => console.log('Kotak diklik:', item.text)}
/>
)}
</div>
);
}
Pemecahan Masalah Kebijakan Keamanan Konten (CSP)
Saat mengintegrasikan @rustors/react pada aplikasi React, Vite, Next.js, atau Remix dengan aturan CSP yang ketat:
Content-Security-Policy:
script-src 'self' 'wasm-unsafe-eval' https://cdn.jsdelivr.net;
connect-src 'self' https://cdn.jsdelivr.net blob:;
worker-src 'self' blob:;
img-src 'self' data: blob:;
- Jika muncul
EvalError: Refused to compile or instantiate WebAssembly module, tambahkan'wasm-unsafe-eval'padascript-src. - Jika berkas model gagal diunduh dari jsDelivr, tambahkan
https://cdn.jsdelivr.netpadaconnect-src. - Jika pembuatan Web Worker gagal dengan
SecurityError, tambahkanworker-src 'self' blob:.