OCR nâng cao cho các thách thức tài liệu hiện đại

Trích xuất chính xác văn bản từ tài liệu scan, ảnh chụp và PDF với công nghệ nhận dạng học sâu

EasyOCR là gì?

EasyOCR là thư viện Nhận dạng Ký tự Quang học (OCR) mã nguồn mở được phát triển bởi Jaided AI, thiết kế để trích xuất văn bản từ hình ảnh và tài liệu scan với độ chính xác cao. Được xây dựng trên PyTorch, nó hỗ trợ hơn 80 ngôn ngữ bao gồm Latin, Trung, Ả Rập và nhiều hơn nữa. EasyOCR nổi tiếng với tính dễ sử dụng, chỉ cần vài dòng code để triển khai, là lựa chọn tuyệt vời cho các nhà phát triển và nhà nghiên cứu làm việc với dự án nhận dạng văn bản. Với các mô hình học sâu được đào tạo trước, nó có thể phát hiện và nhận dạng văn bản hiệu quả trong nhiều phông chữ, kiểu chữ viết tay và nền phức tạp. Dù cho xử lý tài liệu tự động, nhận dạng biển số xe hay trích xuất văn bản từ ảnh, EasyOCR cung cấp giải pháp mạnh mẽ và nhẹ nhàng. Hệ thống kết hợp:

  • Phát hiện đa mô hình: Định vị văn bản dựa trên CRAFT với nền tảng ResNet
  • Nhận dạng thích ứng: Mô hình đặc thù theo ngôn ngữ (CRNN cho Latin, Transformer cho CJK)
  • Xử lý theo ngữ cảnh: Tái tạo đoạn văn và bảo toàn thứ tự đọc

Đo lường hiệu suất cho kết quả ổn định trên các loại tài liệu:

Loại tài liệuĐộ chính xácTốc độPhần cứng
Tài liệu kinh doanh98.6%42 trang/phútNVIDIA T4
Ảnh chụp từ điện thoại94.2%28 ảnh/phútGoogle Colab GPU
Tài liệu lịch sử89.1%15 trang/phútCPU cluster

EasyOCR cho nhận dạng và trích xuất văn bản OCR

Kiến trúc xử lý tài liệu qua 3 giai đoạn tối ưu:

  1. Phát hiện: Phân vùng vùng văn bản ở mức pixel
  2. Nhận dạng: Dự đoán chuỗi với mô hình ngôn ngữ
  3. Tái tạo: Ánh xạ quan hệ không gian
GitHub

Thống kê GitHub

Tên:
Ngôn ngữ:
Ngôi sao:
Nĩa:
Giấy phép:
Kho lưu trữ được cập nhật lần cuối lúc

Khả năng kỹ thuật cốt lõi

1. Phát hiện văn bản nâng cao

Hệ thống phát hiện bao gồm:

  • Tạo bản đồ nhiệt ở cấp độ ký tự
  • Xử lý vùng văn bản hình dạng bất kỳ
  • Hỗ trợ đa hướng (0-360°)
  • Giảm nhiễu nền

2. Hệ thống nhận dạng lai

Mô hình nhận dạng được tối ưu theo loại ngôn ngữ:

  • Latin/Cyrillic: CRNN với 7 lớp CNN + BiLSTM
  • Trung/Nhật/Hàn: Transformer với 12 attention heads
  • Ả Rập/Do Thái: BiLSTM phải sang trái với token hóa tùy chỉnh

3. Tính năng doanh nghiệp

  • Ước lượng chất lượng tự động
  • Cân bằng chính xác/recall có thể cấu hình
  • Phân bổ tài nguyên theo phần cứng

Cài đặt & Cấu hình

Yêu cầu hệ thống

Thành phầnPhát triểnSản xuất
Python3.6+3.8+
Bộ nhớ8GB16GB+
GPUTùy chọnNVIDIA (CUDA 11.8+)

Tùy chọn cài đặt

Cài đặt cơ bản


pip install easyocr  # Cài đặt chỉ các phụ thuộc CPU

Hỗ trợ GPU (Linux/Windows)


pip install easyocr torch torchvision --index-url https://download.pytorch.org/whl/cu118

Docker (Triển khai sản xuất)


docker run -it --gpus all -v $(pwd):/data \
  -e LANG_LIST="en,fr,es" \
  jaidedai/easyocr

Ví dụ triển khai thực tế

1. Quy trình xử lý tài liệu sản xuất

Quy trình OCR hoàn chỉnh với tiền xử lý và xác thực:

Xử lý sẵn sàng sản xuất


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):
        # Tăng cường độ tương phản
        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])
        }

# Sử dụng
ocr = DocumentOCR(languages=['en','fr'])
result = ocr.process('legal_contract.jpg')
print(f"Độ tin cậy trung bình: {result['confidence']:.2%}")

2. Xử lý hàng loạt hóa đơn

Trích xuất trường dữ liệu chính từ nhiều định dạng hóa đơn:

Trích xuất dữ liệu hóa đơn


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/')

Tối ưu hiệu suất

Tăng tốc GPU

  • Xử lý hàng loạt: Kích thước lô tối ưu (4-16 tùy bộ nhớ GPU)
  • Quản lý bộ nhớ: Tự động chia nhỏ tài liệu lớn
  • Độ chính xác hỗn hợp: Suy luận FP16 với Tensor Cores

Điều chỉnh độ chính xác

  • Ngưỡng tương phản: Điều chỉnh contrast_ths cho ảnh scan chất lượng thấp
  • Lọc kích thước văn bản: Đặt min_size để bỏ qua văn bản nhỏ
  • Ưu tiên ngôn ngữ: Sắp xếp ngôn ngữ theo tần suất dự kiến

Sản Phẩm Tương Tự

 Vietnamese