РозÑиÑене OCR Ð´Ð»Ñ ÑÑÑаÑÐ½Ð¸Ñ Ð·Ð°Ð²Ð´Ð°Ð½Ñ ÑобоÑи з докÑменÑами
ТоÑно виÑÑгÑйÑе ÑекÑÑ Ñз ÑÐºÐ°Ð½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾ÐºÑменÑÑв, ÑоÑогÑаÑÑй Ñа PDF за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ ÑозпÑÐ·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð° оÑÐ½Ð¾Ð²Ñ Ð³Ð»Ð¸Ð±Ð¾ÐºÐ¾Ð³Ð¾ навÑаннÑ
Що Ñаке EasyOCR?
EasyOCR â Ñе бÑблÑоÑека опÑиÑного ÑозпÑÐ·Ð½Ð°Ð²Ð°Ð½Ð½Ñ ÑимволÑв (OCR) з вÑдкÑиÑим Ð²Ð¸Ñ Ñдним кодом, ÑозÑоблена Jaided AI, пÑизнаÑена Ð´Ð»Ñ Ð²Ð¸ÑÑгÑÐ²Ð°Ð½Ð½Ñ ÑекÑÑÑ Ð· зобÑÐ°Ð¶ÐµÐ½Ñ Ñа ÑÐºÐ°Ð½Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾ÐºÑменÑÑв з виÑÐ¾ÐºÐ¾Ñ ÑоÑнÑÑÑÑ. ÐобÑдована на PyTorch, вона пÑдÑÑимÑÑ Ð¿Ð¾Ð½Ð°Ð´ 80 мов, вклÑÑаÑÑи лаÑиниÑÑ, киÑайÑÑкÑ, аÑабÑÑÐºÑ Ñа ÑнÑÑ. EasyOCR вÑдомий ÑвоÑÑ Ð¿ÑоÑÑоÑÐ¾Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ â Ð´Ð»Ñ ÑобоÑи поÑÑÑбно лиÑе кÑлÑка ÑÑдкÑв кодÑ, Ñо ÑобиÑÑ Ð¹Ð¾Ð³Ð¾ вÑдмÑнним вибоÑом Ð´Ð»Ñ ÑозÑобникÑв Ñа доÑлÑдникÑв, ÑÐºÑ Ð¿ÑаÑÑÑÑÑ Ð½Ð°Ð´ пÑоекÑами ÑозпÑÐ·Ð½Ð°Ð²Ð°Ð½Ð½Ñ ÑекÑÑÑ. Рйого попеÑеднÑо навÑеними моделÑми глибокого навÑÐ°Ð½Ð½Ñ Ð²Ñн може еÑекÑивно виÑвлÑÑи Ñа ÑозпÑзнаваÑи ÑекÑÑ Ñ ÑÑÐ·Ð½Ð¸Ñ ÑÑиÑÑÐ°Ñ , ÑÑкопиÑÐ½Ð¸Ñ ÑÑилÑÑ Ñа ÑÐºÐ»Ð°Ð´Ð½Ð¸Ñ ÑÐ»Ð°Ñ . Ðезалежно вÑд Ñого, Ñи Ñе авÑомаÑизована обÑобка докÑменÑÑв, ÑозпÑÐ·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð¼ÐµÑÐ½Ð¸Ñ Ð·Ð½Ð°ÐºÑв або виÑÑгÑÐ²Ð°Ð½Ð½Ñ ÑекÑÑÑ Ð· зобÑаженÑ, EasyOCR Ð½Ð°Ð´Ð°Ñ Ð¿Ð¾ÑÑжне Ñа легке ÑÑÑеннÑ. СиÑÑема поÑднÑÑ:
- ÐагаÑомоделÑне виÑвленнÑ: ÐокалÑзаÑÑÑ ÑекÑÑÑ Ð½Ð° оÑÐ½Ð¾Ð²Ñ CRAFT з аÑÑ ÑÑекÑÑÑÐ¾Ñ ResNet
- ÐдапÑивне ÑозпÑзнаваннÑ: СпеÑиÑÑÑÐ½Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ Ð´Ð»Ñ ÑÑÐ·Ð½Ð¸Ñ Ð¿Ð¸ÑемноÑÑей (CRNN Ð´Ð»Ñ Ð»Ð°ÑиниÑÑ, Transformer Ð´Ð»Ñ CJK)
- ÐонÑекÑÑна обÑобка: ÐÑÐ´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð·Ð°ÑÑв Ñа збеÑÐµÐ¶ÐµÐ½Ð½Ñ Ð¿Ð¾ÑÑÐ´ÐºÑ ÑиÑаннÑ
ТеÑÑи пÑодÑкÑивноÑÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑÑÑÑ ÑÑабÑлÑÐ½Ñ ÑезÑлÑÑаÑи Ð´Ð»Ñ ÑÑÐ·Ð½Ð¸Ñ ÑипÑв докÑменÑÑв:
| Тип докÑменÑа | ТоÑнÑÑÑÑ | ÐÑопÑÑкна здаÑнÑÑÑÑ | ÐÐ±Ð»Ð°Ð´Ð½Ð°Ð½Ð½Ñ |
|---|---|---|---|
| ÐÑзнеÑ-докÑменÑи | 98.6% | 42 ÑÑоÑ./Ñ Ð² | NVIDIA T4 |
| ФоÑогÑаÑÑÑ Ð· мобÑлÑÐ½Ð¸Ñ Ð¿ÑиÑÑÑоÑв | 94.2% | 28 зобÑаженÑ/Ñ Ð² | Google Colab GPU |
| ÐÑÑоÑиÑÐ½Ñ Ð°ÑÑ Ñви | 89.1% | 15 ÑÑоÑ./Ñ Ð² | CPU клаÑÑÐµÑ |

ÐÑÑ ÑÑекÑÑÑа обÑоблÑÑ Ð´Ð¾ÐºÑменÑи в ÑÑи опÑимÑÐ·Ð¾Ð²Ð°Ð½Ñ ÐµÑапи:
- ÐиÑвленнÑ: ÐÑкÑелÑна ÑегменÑаÑÑÑ ÑекÑÑÐ¾Ð²Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑей
- РозпÑзнаваннÑ: ÐÑогнозÑÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑлÑдовноÑÑей з моделÑваннÑм мови
- РеконÑÑÑÑкÑÑÑ: ÐÑдобÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¿ÑоÑÑоÑÐ¾Ð²Ð¸Ñ Ð²ÑдноÑин
ÐлÑÑÐ¾Ð²Ñ ÑÐµÑ Ð½ÑÑÐ½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑÑ
1. РозÑиÑене виÑÐ²Ð»ÐµÐ½Ð½Ñ ÑекÑÑÑ
ÐÑдÑиÑÑема виÑÐ²Ð»ÐµÐ½Ð½Ñ Ð²ÐºÐ»ÑÑаÑ:
- ÐенеÑаÑÑÑ ÑÐµÐ¿Ð»Ð¾Ð²Ð¸Ñ ÐºÐ°ÑÑ Ð½Ð° ÑÑÐ²Ð½Ñ ÑимволÑв
- ÐбÑÐ¾Ð±ÐºÑ ÑекÑÑÐ¾Ð²Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑей довÑлÑÐ½Ð¾Ñ ÑоÑми
- ÐÑдÑÑÐ¸Ð¼ÐºÑ Ð¼Ð½Ð¾Ð¶Ð¸Ð½Ð½Ð¾Ñ Ð¾ÑÑÑнÑаÑÑÑ (0-360°)
- ÐÑидÑÑÐµÐ½Ð½Ñ Ñонового ÑÑмÑ
2. ÐÑбÑидна ÑиÑÑема ÑозпÑзнаваннÑ
ÐÐ¾Ð´ÐµÐ»Ñ ÑозпÑÐ·Ð½Ð°Ð²Ð°Ð½Ð½Ñ Ð¾Ð¿ÑимÑÐ·Ð¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ ÑÑÐ·Ð½Ð¸Ñ Ð¿Ð¸ÑемноÑÑей:
- ÐаÑиниÑÑ/ÐиÑилиÑÑ: CRNN з 7 ÑаÑами CNN + BiLSTM
- ÐиÑайÑÑка/ЯпонÑÑка/ÐоÑейÑÑка: Transformer з 12 головами Ñваги
- ÐÑабÑÑка/ÐвÑиÑ: BiLSTM ÑпÑава налÑво з коÑиÑÑÑваÑÑÐºÐ¾Ñ ÑокенÑзаÑÑÑÑ
3. ФÑнкÑÑÑ Ð´Ð»Ñ Ð¿ÑдпÑиÑмÑÑв
- ÐвÑомаÑиÑна оÑÑнка ÑкоÑÑÑ
- ÐалаÑÑовÑваний Ð±Ð°Ð»Ð°Ð½Ñ ÑоÑноÑÑÑ/повноÑи
- ÐпаÑаÑно-залежний ÑозподÑл ÑеÑÑÑÑÑв
ÐÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ñа налаÑÑÑваннÑ
СиÑÑÐµÐ¼Ð½Ñ Ð²Ð¸Ð¼Ð¾Ð³Ð¸
| ÐÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ | РозÑобка | ÐиÑобниÑÑво |
|---|---|---|
| Python | 3.6+ | 3.8+ |
| Ðам'ÑÑÑ | 8GB | 16GB+ |
| GPU | Ðеобов'Ñзково | NVIDIA (CUDA 11.8+) |
ÐаÑÑанÑи вÑÑановленнÑ
Ðазове вÑÑановленнÑ
pip install easyocr # ÐÑÑановлÑÑ Ð»Ð¸Ñе CPU-залежноÑÑÑ
ÐÑдÑÑимка GPU (Linux/Windows)
pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118
Docker (РозгоÑÑÐ°Ð½Ð½Ñ Ñ Ð²Ð¸ÑобниÑÑвÑ)
docker run -it --gpus all -v $(pwd):/data \
-e LANG_LIST="en,fr,es" \
jaidedai/easyocr
ÐÑакÑиÑÐ½Ñ Ð¿Ñиклади впÑовадженнÑ
1. Ðайплайн обÑобки докÑменÑÑв Ð´Ð»Ñ Ð²Ð¸ÑобниÑÑва
Ðовний OCR-пÑоÑÐµÑ Ð· попеÑеднÑÐ¾Ñ Ð¾Ð±ÑÐ¾Ð±ÐºÐ¾Ñ Ñа валÑдаÑÑÑÑ:
ÐоÑове до виÑобниÑÑва ÑÑÑеннÑ
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):
# ÐокÑаÑÐµÐ½Ð½Ñ ÐºÐ¾Ð½ÑÑаÑÑÑ
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])
}
# ÐикоÑиÑÑаннÑ
ocr = DocumentOCR(languages=['en','fr'])
result = ocr.process('legal_contract.jpg')
print(f"СеÑÐµÐ´Ð½Ñ Ð²Ð¿ÐµÐ²Ð½ÐµÐ½ÑÑÑÑ: {result['confidence']:.2%}")
2. ÐакеÑна обÑобка ÑÐ°Ñ ÑнкÑв
ÐиÑÑÐ³Ð½ÐµÐ½Ð½Ñ ÐºÐ»ÑÑÐ¾Ð²Ð¸Ñ Ð¿Ð¾Ð»Ñв з ÑÐ°Ñ ÑнкÑв ÑÑÐ·Ð½Ð¸Ñ ÑоÑмаÑÑв:
ÐиÑÑÐ³Ð½ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ Ð· ÑÐ°Ñ ÑнкÑв
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/')
ÐпÑимÑзаÑÑÑ Ð¿ÑодÑкÑивноÑÑÑ
ÐÑиÑкоÑÐµÐ½Ð½Ñ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ GPU
- ÐакеÑна обÑобка: ÐпÑималÑÐ½Ñ ÑозмÑÑи пакеÑÑв (4-16 залежно вÑд пам'ÑÑÑ GPU)
- УпÑавлÑÐ½Ð½Ñ Ð¿Ð°Ð¼'ÑÑÑÑ: ÐвÑомаÑиÑне ÑоздÑÐ»ÐµÐ½Ð½Ñ Ð²ÐµÐ»Ð¸ÐºÐ¸Ñ Ð´Ð¾ÐºÑменÑÑв
- ÐмÑÑана ÑоÑнÑÑÑÑ: ÐиÑновок FP16 з Tensor Cores
ÐалаÑÑÑÐ²Ð°Ð½Ð½Ñ ÑоÑноÑÑÑ
- ÐоÑоги конÑÑаÑÑÑ: ÐалаÑÑÑйÑе
contrast_thsÐ´Ð»Ñ Ð½ÐµÑкÑÑÐ½Ð¸Ñ ÑканÑв - ФÑлÑÑÑаÑÑÑ Ð·Ð° ÑозмÑÑом ÑекÑÑÑ: ÐÑÑановÑÑÑ
min_sizeÐ´Ð»Ñ ÑгноÑÑÐ²Ð°Ð½Ð½Ñ Ð´ÑÑбного ÑекÑÑÑ - ÐÑÑоÑиÑезаÑÑÑ Ð¼Ð¾Ð²: УпоÑÑдкÑйÑе мови за оÑÑкÑÐ²Ð°Ð½Ð¾Ñ ÑаÑÑоÑоÑ
ÐодÑÐ±Ð½Ñ ÐÑодÑкÑи
- API PyMuPDF Python | РозÑиÑений аналÑз Ñ Ð²Ð¸Ð»ÑÑÐµÐ½Ð½Ñ PDF
- docTR API - ÐпÑиÑне ÑозпÑÐ·Ð½Ð°Ð²Ð°Ð½Ð½Ñ ÑимволÑв (OCR) Ñ Python
- PaddleOCR API â ÐиÑокопÑодÑкÑивне опÑиÑне ÑозпÑÐ·Ð½Ð°Ð²Ð°Ð½Ð½Ñ ÑимволÑв
- pdfminer.six ÐÑблÑоÑека Python | ÐиÑÑгнÑÑÑ ÑекÑÑ Ñз PDF-ÑайлÑв