OCR Maju untuk Cabaran Dokumen Moden
Ekstrak teks dengan tepat daripada dokumen scan, foto dan PDF menggunakan pengenalan berkuasa pembelajaran mendalam
Apa itu EasyOCR?
EasyOCR ialah pustaka Pengenalan Aksara Optik (OCR) sumber terbuka dibangunkan oleh Jaided AI, direka untuk mengekstrak teks daripada imej dan dokumen scan dengan ketepatan tinggi. Dibina atas PyTorch, ia menyokong lebih 80 bahasa termasuk Latin, Cina, Arab dan banyak lagi. EasyOCR terkenal dengan kemudahan penggunaannya, hanya memerlukan beberapa baris kod untuk dilaksanakan, menjadikannya pilihan terbaik untuk pembangun dan penyelidik yang bekerja pada projek pengenalan teks. Dengan model pembelajaran mendalam pra-latihnya, ia dapat mengesan dan mengenali teks dengan cekap dalam pelbagai fon, gaya tulisan tangan dan latar belakang kompleks. Sama ada untuk pemprosesan dokumen automatik, pengenalan plat lesen atau pengekstrakan teks berasaskan imej, EasyOCR menyediakan penyelesaian yang berkuasa dan ringan. Sistem ini menggabungkan:
- Pengesanan pelbagai model: Penyetempatan teks berasaskan CRAFT dipertingkat dengan tulang belakang ResNet
- Pengenalan adaptif: Model khusus skrip (CRNN untuk Latin, Transformer untuk CJK)
- Pemprosesan sedar konteks: Pembinaan semula perenggan dan pemeliharaan susunan bacaan
Penanda aras prestasi menunjukkan hasil yang konsisten merentas jenis dokumen:
Jenis Dokumen | Ketepatan | Kelancaran | Perkakasan |
---|---|---|---|
Dokumen perniagaan | 98.6% | 42 muka/min | NVIDIA T4 |
Imej tangkapan mudah alih | 94.2% | 28 imej/min | Google Colab GPU |
Arkib sejarah | 89.1% | 15 muka/min | Kluster CPU |
Seni bina memproses dokumen melalui tiga peringkat dioptimumkan:
- Pengesanan: Segmentasi wilayah teks pada peringkat piksel
- Pengenalan: Ramalan jujukan dengan pemodelan bahasa
- Pembinaan semula: Pemetaan hubungan spatial
Keupayaan Teknikal Teras
1. Pengesanan Teks Maju
Subsistem pengesanan mempunyai:
- Penjanaan peta haba peringkat aksara
- Pengendalian wilayah teks berbentuk arbitrari
- Sokongan multi-orientasi (0-360°)
- Penindasan bunyi latar belakang
2. Sistem Pengenalan Hibrid
Model pengenalan dioptimumkan mengikut jenis skrip:
- Latin/Cyrillic: CRNN dengan 7 lapisan CNN + BiLSTM
- Cina/Jepun/Korea: Transformer dengan 12 kepala perhatian
- Arab/Hebrew: BiLSTM kanan-ke-kiri dengan tokenisasi tersuai
3. Ciri Perusahaan
- Anggaran kualiti automatik
- Pertukaran ketepatan/recall boleh dikonfigurasi
- Peruntukan sumber sedar perkakasan
Pemasangan & Konfigurasi
Keperluan Sistem
Komponen | Pembangunan | Pengeluaran |
---|---|---|
Python | 3.6+ | 3.8+ |
Memori | 8GB | 16GB+ |
GPU | Pilihan | NVIDIA (CUDA 11.8+) |
Pilihan Pemasangan
Pemasangan Asas
pip install easyocr # Memasang kebergantungan CPU sahaja
Sokongan GPU (Linux/Windows)
pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118
Docker (Pelaksanaan Pengeluaran)
docker run -it --gpus all -v $(pwd):/data \
-e LANG_LIST="en,fr,es" \
jaidedai/easyocr
Contoh Pelaksanaan Praktikal
1. Saluran Paip Dokumen Pengeluaran
Aliran kerja OCR lengkap dengan pra-pemprosesan dan pengesahan:
Pemprosesan Sedia Pengeluaran
from easyocr import Reader
import cv2
import numpy as np
class DocumentOCR:
def __init__(self, languages=['en']):
self.reader = Reader(languages, gpu=True)
def preprocess(self, image):
# Penambahbaikan kontras
lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8,8))
limg = cv2.merge([clahe.apply(l), a, b])
return cv2.cvtColor(limg, cv2.COLOR_LAB2BGR)
def process(self, image_path):
img = cv2.imread(image_path)
processed = self.preprocess(img)
results = self.reader.readtext(processed,
batch_size=4,
paragraph=True,
min_size=50,
text_threshold=0.8)
return {
'text': [r[1] for r in results],
'confidence': np.mean([r[2] for r in results])
}
# Penggunaan
ocr = DocumentOCR(languages=['en','fr'])
result = ocr.process('legal_contract.jpg')
print(f"Purata Keyakinan: {result['confidence']:.2%}")
2. Pemprosesan Invois Kelompok
Ekstrak medan utama daripada pelbagai format invois:
Pengekstrakan Data Invois
import easyocr
import re
from pathlib import Path
reader = easyocr.Reader(['en'])
INVOICE_PATTERNS = {
'invoice_no': r'Invoice\s*Number[:#]?\s*([A-Z0-9-]+)',
'date': r'Date[:]?\s*(\d{2}[/-]\d{2}[/-]\d{4})',
'amount': r'Total\s*Due[:]?\s*\$?(\d+\.\d{2})'
}
def process_invoices(folder):
results = []
for invoice in Path(folder).glob('*.pdf'):
text = '\n'.join(reader.readtext(str(invoice), detail=0))
extracted = {field: re.search(pattern, text)
for field, pattern in INVOICE_PATTERNS.items()}
results.append({
'file': invoice.name,
'data': {k: v.group(1) if v else None
for k, v in extracted.items()}
})
return results
invoices_data = process_invoices('/invoices/')
3. Pengesanan Teks dalam Masa Nyata
Contoh pelaksanaan untuk aplikasi masa nyata:
Pengesanan Masa Nyata dengan Kamera
import easyocr
import cv2
reader = easyocr.Reader(['en'])
cap = cv2.VideoCapture(0)
while True:
_, frame = cap.read()
results = reader.readtext(frame, detail=0)
for text in results:
print("Teks dikesan:", text)
cv2.imshow('OCR Masa Nyata', frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
Pengoptimuman Prestasi
Pecutan GPU
- Pemprosesan Kelompok: Saiz kelompok optimum (4-16 bergantung pada memori GPU)
- Pengurusan Memori: Pengecualian automatik untuk dokumen besar
- Ketepatan Campuran: Inferens FP16 dengan Tensor Cores
Penalaan Ketepatan
- Ambang Kontras: Laraskan
contrast_ths
untuk scan berkualiti rendah - Penapisan Saiz Teks: Tetapkan
min_size
untuk mengabaikan teks kecil - Keutamaan Bahasa: Susun bahasa mengikut prevalens dijangkakan