Pažangus OCR šiuolaikiniams dokumentų iššūkiams
Tiksliai iÅ¡gaukite tekstÄ iÅ¡ nuskaitytų dokumentų, nuotraukų ir PDF naudodami giluminio mokymo technologijas
Kas yra EasyOCR?
EasyOCR yra atviro kodo optinio simbolių atpažinimo (OCR) biblioteka, kuriÄ sukÅ«rÄ Jaided AI, skirta tekstui iÅ¡gauti iÅ¡ vaizdų ir nuskaitytų dokumentų su dideliu tikslumu. Sukurta naudojant PyTorch, ji palaiko daugiau nei 80 kalbų, įskaitant lotynų, kinų, arabų ir kitas. EasyOCR žinoma dÄl savo paprastumo - reikia tik kelių kodo eiluÄių, kad bÅ«tų galima jÄ naudoti, todÄl ji puikiai tinka kÅ«rÄjams ir mokslininkams, dirbantiems su teksto atpažinimo projektais. TurÄdama iÅ¡ anksto apmokytus giluminio mokymo modelius, ji gali efektyviai aptikti ir atpažinti tekstÄ Ä¯vairiais Å¡riftais, rankraÅ¡Äio stiliais ir sudÄtingame fone. Nesvarbu, ar tai automatizuotas dokumentų apdorojimas, valstybinio numerio atpažinimas, ar teksto iÅ¡gavimas iÅ¡ vaizdų - EasyOCR siÅ«lo galingÄ ir lengvÄ sprendimÄ . Sistema apima:
- Daugelio modelių aptikimas: CRAFT pagrįstas teksto lokalizavimas su ResNet pagrindu
- Adaptyvus atpažinimas: Rašto specifiniai modeliai (CRNN lotynų kalboms, Transformer CJK kalboms)
- KontekstiÅ¡kai sÄ moningas apdorojimas: Pastraipų rekonstravimas ir skaitymo eilÄs iÅ¡saugojimas
Našumo rezultatai rodo nuoseklius rezultatus tarp skirtingų dokumentų tipų:
| Dokumento tipas | Tikslumas | Sparta | AparatinÄ Ä¯ranga |
|---|---|---|---|
| Verslo dokumentai | 98,6% | 42 puslapiai/min | NVIDIA T4 |
| Mobiliojo telefono nuotraukos | 94,2% | 28 vaizdai/min | Google Colab GPU |
| Istoriniai archyvai | 89,1% | 15 puslapių/min | CPU grupÄ |

Architektūra apdoroja dokumentus trimis optimizuotais etapais:
- Aptikimas: Teksto sriÄių segmentavimas pikselių lygmenyje
- Atpažinimas: Sekų prognozavimas su kalbos modeliavimu
- Rekonstravimas: Erdvinių santykių atvaizdavimas
PagrindinÄs techninÄs galimybÄs
1. Pažangus teksto aptikimas
Aptikimo posistemÄ apima:
- Simbolių lygio Å¡iluminio žemÄlapio generavimÄ
- Savivaldos formos teksto sriÄių apdorojimÄ
- Daugiakryptį palaikymÄ (0-360°)
- Fono triukÅ¡mo slopinimÄ
2. HibridinÄ atpažinimo sistema
Atpažinimo modeliai optimizuoti pagal raÅ¡to tipÄ :
- Lotynų/Kirilicos: CRNN su 7 CNN sluoksniais + BiLSTM
- Kinų/Japonų/KorÄjieÄių: Transformer su 12 dÄmesio galvų
- Arabų/Ivritas: IÅ¡ deÅ¡inÄs į kairÄ BiLSTM su specialiu žetonizavimu
3. Įmonių funkcijos
- Automatinis kokybÄs įvertinimas
- Konfigūruojamas tikslumo/atšaukimo balansas
- AparatinÄs įrangos sÄ moningas iÅ¡teklių paskirstymas
Diegimas ir konfigūravimas
Sistemos reikalavimai
| Komponentas | PlÄtra | Gamyba |
|---|---|---|
| Python | 3.6+ | 3.8+ |
| Atmintis | 8GB | 16GB+ |
| GPU | Neprivaloma | NVIDIA (CUDA 11.8+) |
Diegimo parinktys
Pagrindinis diegimas
pip install easyocr # Diegia tik CPU palaikymÄ
GPU palaikymas (Linux/Windows)
pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118
Docker (Gamybinis diegimas)
docker run -it --gpus all -v $(pwd):/data \
-e LANG_LIST="en,fr,es" \
jaidedai/easyocr
Praktiniai įgyvendinimo pavyzdžiai
1. Gamybinis dokumentų tinklas
Pilnas OCR darbotvarkÄ su iÅ¡ankstiniu apdorojimu ir patikrinimu:
Gamybai parinktas apdorojimas
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):
# Kontrasto didinimas
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])
}
# Naudojimas
ocr = DocumentOCR(languages=['en','fr'])
result = ocr.process('legal_contract.jpg')
print(f"Vidutinis patikimumas: {result['confidence']:.2%}")
2. SÄ skaitų faktÅ«rų grupinis apdorojimas
Pagrindinių laukų iÅ¡gavimas iÅ¡ įvairių sÄ skaitų faktÅ«rų formatų:
SÄ skaitų faktÅ«rų duomenų iÅ¡gavimas
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/')
Našumo optimizavimas
GPU pagreitinimas
- Grupinis apdorojimas: OptimalÅ«s grupÄs dydžiai (4-16 priklausomai nuo GPU atminties)
- Atminties valdymas: Automatinis didelių dokumentų skaidymas
- Mišrūs tikslumai: FP16 išvados su Tensor branduoliais
Tikslumo derinimas
- Kontrasto slenksÄiai: Reguliuokite
contrast_thsprastos kokybÄs nuskaitymams - Teksto dydžio filtravimas: Nustatykite
min_size, kad ignoruotumÄte maÅ¾Ä tekstÄ - Kalbų prioritetai: IÅ¡dÄstykite kalbas pagal tikÄtinÄ paplitimÄ