בניית מערכות HTR לכתב יד: TrOCR ו-PaddleOCR

טקסט בכתב יד מציב אתגרי זיהוי שמערכות OCR סטנדרטיות אינן יכולות להתמודד איתם. אנו בונים פתרונות HTR מלאים המבוססים על TrOCR ו-PaddleOCR, החל מעיבוד מקדים ועד לפריסה, ומבטיחים דיוק ואמינות עם מסמכים בכל רמת מורכבות.

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

טקסט בכתב יד מורכב משמעותית יותר מטקסט מודפס במכונה: מגוון אינסופי של סגנונות כתיבה, ליגטורות (כתיבה מחוברת), גבולות מטושטשים בין תווים, שונות בלחץ ובזווית. אנו נתקלים בכך בכל פרויקט. לקוחות מגיעים פעמים רבות עם משימה: לזהות אלפי טפסים במילוי ידני בחודש עם שיעור שגיאה שאינו עולה על 5%. מערכות OCR סטנדרטיות חסרות אונים כאן. במשך 5 שנים, יישמנו יותר מ-30 פרויקטים לזיהוי טקסט בכתב יד עבור לקוחות ארכיוניים, רפואיים וארגוניים. הניסיון שלנו מאשר: עיבוד מקדים נכון ובחירת ארכיטקטורה פותרים 80% מההצלחה. בפרויקט אחד עבור מרכז רפואי, החלפנו הזנה ידנית של 5000 טפסים ביום בזיהוי אוטומטי — דבר שהפחית את עלויות עיבוד המסמכים ביותר מ-60%, וחסך כ-20,000 דולר בשנה. מערכת ה-HTR שלנו השיגה CER מתחת ל-5% במשימות זיהוי טפסים רפואיים אלה.

בחירת מודל לטקסט רוסי בכתב יד

בחירת ארכיטקטורה תלויה בשפה ובכמות הנתונים. TrOCR (מיקרוסופט) הוא מקודד-מפענח טרנספורמר ל-OCR. מקודד: עיבוד תמונה ViT, מפענח: יצירת טקסט אוטורגרסיבית. מתקדם ביותר על מערך הנתונים IAM לכתב יד: CER 2.89% (מודל גדול). עם זאת, TrOCR מאומן בעיקר על אנגלית, ולכן עבור OCR קירילי עדיף להשתמש ב-PaddleOCR עם הארכיטקטורה SVTR_LCNet שלו, המנצלת רשתות טרנספורמציה מרחביות ומנגנוני קשב לזיהוי חזק. PaddleOCR עולה על TrOCR בקירילית פי 2 ב-CER, מה שהופך אותו לבחירה טובה יותר עבור טקסט רוסי בכתב יד.

from transformers import TrOCRProcessor, VisionEncoderDecoderModel
from PIL import Image
import torch

class HandwritingRecognizer:
    def __init__(self, model_name: str = 'microsoft/trocr-large-handwritten'):
        self.processor = TrOCRProcessor.from_pretrained(model_name)
        self.model = VisionEncoderDecoderModel.from_pretrained(model_name)
        self.model.eval()
        self.device = 'cuda' if torch.cuda.is_available() else 'cpu'
        self.model.to(self.device)

    @torch.no_grad()
    def recognize(self, image: Image.Image) -> str:
        """Распознавание одной строки текста"""
        pixel_values = self.processor(
            images=image,
            return_tensors='pt'
        ).pixel_values.to(self.device)
        generated_ids = self.model.generate(
            pixel_values,
            max_new_tokens=128,
            num_beams=4
        )
        return self.processor.batch_decode(
            generated_ids,
            skip_special_tokens=True
        )[0]

PaddleOCR לטקסט קירילי בכתב יד עולה משמעותית על TrOCR:

from paddleocr import PaddleOCR
ocr = PaddleOCR(
    use_angle_cls=True,
    lang='ru',
    rec_algorithm='SVTR_LCNet',
    rec_model_dir='./models/handwriting_rec'
)

מדוע עיבוד מקדים חשוב יותר מארכיטקטורה

טקסט בכתב יד דורש עיבוד מקדים אגרסיבי יותר. הסרת רקע משורטט, בינאריזציה, ניקוי חפצים — שלבים אלה משפיעים באופן קריטי על ה-CER הסופי. להלן צינור עיבוד מקדים טיפוסי לכתב יד.

import cv2
import numpy as np
from skimage import morphology

def preprocess_handwriting(image: np.ndarray) -> np.ndarray:
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    # Удаление фоновых линий (линованная бумага)
    horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (40, 1))
    horizontal_lines = cv2.morphologyEx(gray, cv2.MORPH_OPEN, horizontal_kernel)
    gray = cv2.subtract(gray, horizontal_lines)
    # Otsu бинаризация
    _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
    # Удаление маленьких артефактов
    cleaned = morphology.remove_small_objects(
        binary.astype(bool), min_size=50
    ).astype(np.uint8) * 255
    return cleaned

כיצד אנו מבצעים כוונון עדין של המודל

כדי להתאים לנתונים ארגוניים, אנו משתמשים בצינור העבודה הבא לכוונון עדין של רשתות עצביות:

  1. סימון נתונים. אנו אוספים 500–2000 שורות של טקסט בכתב יד, מתמללים אותן ב-Label Studio. כל שורה היא קובץ נפרד עם תווית טקסט. סימון ב-Label Studio מבטיח אמת בסיס איכותית.
  2. הרחבה. אנו מיישמים הזזה אקראית, סיבוב עד 5°, קנה מידה 0.9–1.1, הוספת רעש ועיוות אלסטי — זה מגביר את העמידות לשונות בכתב יד באמצעות משימות מקדימות בלמידה עצמית.
  3. כוונון עדין. עבור PaddleOCR אנו משתמשים ב-RecModel עם SVTR_LCNet, גודל אצווה 32, קצב למידה 1e-4, 100 עידנים, תוך שימוש ב-CTC loss ליישור. אנו עוקבים אחר מדד CER על נתוני אימות.
  4. אימות. אנו בודקים על 10% מהנתונים (לא בשימוש באימון). אם CER גבוה מ-10%, אנו מוסיפים נתונים או משנים היפרפרמטרים.
  5. ייצוא. המודל מומר ל-ONNX או נשמר בפורמט PaddleOCR להסקה עם פענוח חיפוש אלומה.

פילוח שורות מסמך למסמכים רב-שורתיים

לפני הזיהוי, יש לפצל מסמך רב-שורתי לשורות. פילוח שורות המסמך שלנו משתמש בהקרנה אופקית:

def segment_lines(binary_image: np.ndarray) -> list[np.ndarray]:
    """Горизонтальная проекция для сегментации строк"""
    horizontal_projection = binary_image.sum(axis=1)
    threshold = horizontal_projection.max() * 0.05
    in_line = horizontal_projection > threshold
    lines = []
    start = None
    for i, active in enumerate(in_line):
        if active and start is None:
            start = max(0, i - 5)
        elif not active and start is not None:
            end = min(len(in_line), i + 5)
            line_img = binary_image[start:end, :]
            if end - start > 10:
                lines.append(line_img)
            start = None
    return lines
דוגמאות לעיבוד מקדים

עבור מסמכים עם קווים צבעוניים (רשומות רפואיות), אנו משתמשים בבינאריזציה אדפטיבית עם גודל בלוק 21. עבור טפסים עם רקע אפור, אנו מפחיתים את הרקע באמצעות קרנל מעגלי בקוטר=15. הפרמטרים נבחרים עבור התבנית הספציפית.

כוונון עדין על נתוני כתב יד ארגוניים

עבור כתב יד ספציפי (רשומות רפואיות של בית חולים מסוים, טפסים ארגוניים), נדרש כוונון עדין. בלעדיו, CER יכול להגיע ל-20-30%, דבר שאינו מקובל בזרימת מסמכים. אנו מבטיחים שלאחר כוונון עדין על 500–2000 שורות, הדיוק יעלה ל-90-95%. כוונון עדין של TrOCR דורש בדרך כלל כמה מאות תמונות מסומנות, בעוד שכוונון עדין של PaddleOCR לכתב יד יכול לנצל נקודות ביקורת מאומנות מראש.

  • סימון של 500–2000 שורות באמצעות Label Studio או CVAT.
  • כוונון עדין של TrOCR או PaddleOCR rec_model.
  • CER יורד מ-15–25% ל-5–10% על נתונים ספציפיים לתחום.
מערך נתונים שפה CER SOTA
IAM Online/Offline אנגלית 2.89% (TrOCR-Large)
CVL Database אנגלית/גרמנית 3.1%
Bentham Collection אנגלית 4.5%
HWR200 (רוסית) רוסית ~8%

הבנת CER (שיעור שגיאות תווים)

CER (שיעור שגיאות תווים) הוא שיעור השגיאות ברמת התווים. אנו משתמשים במדד CER להערכת דיוק. עבור תהליכים עסקיים, אפילו 5% יכול להיות מאות ספרות שזוהו שגוי בדוחות. בפרויקט אחד עבור מרכז רפואי, הפחתנו את CER מ-18% ל-4% על ידי שילוב של בינאריזציה אדפטיבית וכוונון עדין של PaddleOCR. התוצאה — עיבוד אוטומטי של 5000 טפסים ביום במקום הזנה ידנית, והפחתת עלויות עיבוד המסמכים ביותר מ-60%. ערכי CER התייחסותיים על מערכי נתונים ציבוריים (IAM Handwriting Database) הם ~2.89%, אך על נתונים אמיתיים נדרש כוונון עדין.

תדירות עדכון המודל

אם כתב היד של המפעיל משתנה או מתווספים שדות חדשים, יש לאמן מחדש את המודל כל חצי שנה. אנו מספקים צינור למידה מצטבר המאפשר עדכון משקלים תוך מספר שעות ללא אימון מלא מחדש. כאשר תבנית המסמך משתנה משמעותית (למשל, מעבר לטופס חדש), הוספת 200–500 שורות מסומנות חדשות והרצת כוונון עדין מספיקה.

תוצרי עבודה

  • ניתוח דרישות והרצת ניסיון על 50 עמודים.
  • בחירת ארכיטקטורה (TrOCR / PaddleOCR / משולב).
  • פיתוח צינור עיבוד מקדים ופילוח.
  • כוונון עדין של המודל (במידת הצורך) עם אימות.
  • אינטגרציה באמצעות REST API או gRPC.
  • תיעוד (התייחסות API, מדריך פריסה).
  • גישה למאגר המודלים וסקריפטי האימון.
  • הדרכת מפעילים (עד 4 שעות).
  • תמיכה ל-3 חודשים לאחר הפריסה.

לוח זמנים ועלות

משימה מסגרת זמן
אינטגרציית TrOCR לאנגלית שבוע אחד
זיהוי כתב יד קירילי 2–3 שבועות
כוונון עדין למסמכים ארגוניים 4–7 שבועות

העלות מחושבת באופן אישי — תלויה בכמות הנתונים, בדיוק הנדרש ובמורכבות האינטגרציה. עלות פרויקט טיפוסית: 5,000–15,000 דולר עבור מערכת HTR מלאה. בפריסה אחת, קיצצנו את עלויות עיבוד המסמכים השנתיות ב-20,000 דולר. הערכת פרויקט מתבצעת לאחר ניתוח הדרישות. צרו קשר להרצת ניסיון על הדגימות שלכם. המהנדסים שלנו ינתחו את המסמכים בכתב יד שלכם ויציעו את הפתרון האופטימלי. קבלו ייעוץ עוד היום.