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 |
โครงสร้างระบบประมวลผลเอกสารใน 3 ขั้นตอนที่ได้รับการปรับปรุง:
- การตรวจจับ: การแบ่งส่วนพื้นที่ข้อความระดับพิกเซล
- การรู้จำ: การทำนายลำดับด้วยการสร้างแบบจำลองภาษา
- การสร้างใหม่: การทำแผนที่ความสัมพันธ์เชิงพื้นที่
ความสามารถทางเทคนิคหลัก
1. การตรวจจับข้อความขั้นสูง
ระบบย่อยการตรวจจับมีคุณสมบัติ:
- การสร้างแผนที่ความร้อนระดับตัวอักษร
- การจัดการพื้นที่ข้อความรูปร่างต่างๆ
- รองรับการวางแนวหลายแบบ (0-360°)
- การลดสัญญาณรบกวนพื้นหลัง
2. ระบบการรู้จำแบบไฮบริด
โมเดลการรู้จำได้รับการปรับให้เหมาะสมตามประเภทสคริปต์:
- ละติน/ซีริลลิก: CRNN พร้อมชั้น CNN 7 ชั้น + 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
เพื่อละเว้นข้อความขนาดเล็ก - การจัดลำดับความสำคัญของภาษา: เรียงลำดับภาษาตามความถี่ที่คาดหวัง