Tutorial Surya OCR: Document AI untuk Text Detection, OCR, dan Layout Analysis
Surya adalah library Document AI open-source yang powerful untuk melakukan OCR (Optical Character Recognition), text detection, layout analysis, reading order detection, dan table recognition. Dikembangkan oleh Vik Paruchuri (creator Marker), Surya mendukung lebih dari 90 bahasa dan memberikan akurasi yang sangat kompetitif dibandingkan solusi komersial seperti Google Cloud Vision.
Dalam tutorial ini, kita akan mempelajari cara menggunakan Surya untuk berbagai task document AI, mulai dari instalasi hingga penggunaan lanjutan untuk memproses dokumen kompleks.
Mengapa Surya?
Sebelum kita mulai, berikut beberapa alasan mengapa Surya layak dipertimbangkan:
- Multi-bahasa: Mendukung 90+ bahasa termasuk Bahasa Indonesia, CJK, Arabic, dan lainnya
- Akurasi tinggi: Benchmark menunjukkan akurasi setara atau lebih baik dari Google Cloud Vision pada banyak bahasa
- Open-source: Lisensi GPL-3.0, gratis untuk penggunaan non-komersial
- Fitur lengkap: OCR, text detection, layout analysis, table recognition, dan reading order detection dalam satu package
- GPU acceleration: Mendukung CUDA untuk pemrosesan yang lebih cepat
- Mudah digunakan: API yang sederhana dan intuitif
Instalasi
Persyaratan Sistem
- Python 3.9 atau lebih baru
- PyTorch (akan diinstal otomatis)
- GPU NVIDIA dengan CUDA (opsional, tapi sangat direkomendasikan untuk performa)
Instalasi via pip
pip install surya-ocr
Instalasi dari Source (untuk development)
git clone https://github.com/VikParuchuri/surya.git
cd surya
pip install -e .
Verifikasi Instalasi
import surya
print(surya.version)
Instalasi Dependensi Tambahan
Untuk memproses file PDF, instal juga:
pip install pypdfium2
Basic Usage
1. Text Detection
Text detection adalah langkah pertama dalam pipeline OCR. Surya mendeteksi area di mana teks berada dalam gambar.
from surya.detection import DetectionPredictor
from PIL import Image
Load image
image = Image.open("dokumen.png")
Inisialisasi detector
detector = DetectionPredictor()
Deteksi teks
predictions = detector([image])
Lihat hasil deteksi
for prediction in predictions:
for bbox in prediction.bboxes:
print(f"Bounding box: {bbox.bbox}")
print(f"Confidence: {bbox.confidence:.4f}")
print(f"Polygon: {bbox.polygon}")
print()
2. OCR (Optical Character Recognition)
Setelah mendeteksi area teks, kita bisa melakukan OCR untuk mengekstrak teks dari gambar.
from surya.recognition import RecognitionPredictor
from surya.detection import DetectionPredictor
from surya.ocr import OCRPredictor
from PIL import Image
Load image
image = Image.open("dokumen.png")
Inisialisasi predictor
detpredictor = DetectionPredictor()
recpredictor = RecognitionPredictor()
ocrpredictor = OCRPredictor(detpredictor, recpredictor)
Jalankan OCR
predictions = ocrpredictor([image])
Tampilkan hasil
for prediction in predictions:
for textline in prediction.textlines:
print(f"Text: {textline.text}")
print(f"Confidence: {textline.confidence:.4f}")
print(f"BBox: {textline.bbox}")
print()
3. Menentukan Bahasa
Surya bisa mendeteksi bahasa secara otomatis, tapi kamu juga bisa menentukan bahasa secara eksplisit untuk hasil yang lebih akurat:
from surya.recognition import RecognitionPredictor
from surya.detection import DetectionPredictor
from surya.ocr import OCRPredictor
from PIL import Image
image = Image.open("dokumenindonesia.png")
detpredictor = DetectionPredictor()
recpredictor = RecognitionPredictor()
ocrpredictor = OCRPredictor(detpredictor, recpredictor)
Tentukan bahasa: Indonesian
predictions = ocrpredictor([image], langs=[["id"]])