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_ths
prastos 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ą