Розробка OCR-системи розпізнавання тексту на зображеннях

Клієнт попросив розпізнавати рукописні медичні рецепти з фотографій — точність готових рішень не перевищувала 60%. Типова ситуація: OCR-пайплайн дає збій на нахилених або засвічених знімках, а специфічні терміни (назви ліків) спотворюються. Ми — команда AI-інженерів з 5+ роками досвіду в комп'ютерно

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1439
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    997
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1264
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    712
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1002

Клієнт попросив розпізнавати рукописні медичні рецепти з фотографій — точність готових рішень не перевищувала 60%. Типова ситуація: OCR-пайплайн дає збій на нахилених або засвічених знімках, а специфічні терміни (назви ліків) спотворюються. Ми — команда AI-інженерів з 5+ роками досвіду в комп'ютерному зорі, яка реалізувала понад 50 проєктів з розпізнавання тексту — зібрали кастомну OCR-модель, яка підняла точність до 93%. Розповідаємо, як влаштований сучасний OCR і як ми його адаптуємо під бізнес-завдання. Наші клієнти економлять до 40% бюджету (до $15,000 на рік) на обробці документів завдяки автоматизації.

OCR (Optical Character Recognition) — вилучення тексту із зображень. Сучасний пайплайн складається з трьох етапів: детекція текстових областей → випрямлення тексту (rectification) → розпізнавання символів. Кожен етап впливає на підсумкову точність, і слабка ланка в будь-якому місці погіршує результат. Ми використовуємо PaddleOCR як базовий фреймворк у 80% проєктів для кирилиці — він дає найкращий баланс швидкості та якості серед open-source рішень. PaddleOCR працює в 2-3 рази швидше за EasyOCR на CPU.

Який OCR-фреймворк обрати для кирилиці?

Ми перебрали всі популярні open-source рішення. Для російської мови в кожного свої сильні сторони:

  • PaddleOCR (PP-OCRv4) — точність 92.8% на ICDAR2015, найкраща підтримка кирилиці серед open-source. Підходить для production: швидко працює на CPU, легко донавчається.
  • EasyOCR — простий API, але для російської точність на 5-10% нижча, а швидкість на CPU — у 2-3 рази повільніше (PaddleOCR відповідно швидший).
  • TrOCR (Microsoft) — transformer-based, дає CER 2.89% на друкованому тексті. Але потребує GPU, а для кирилиці потрібне донавчання.
  • Tesseract 5 — класика, налаштовується під будь-який шрифт, але без кастомного тренінгу програє PaddleOCR на складних документах.
Фреймворк Кирилиця Швидкість (CPU) Найкращий для
PaddleOCR Відмінна Швидко Загальний OCR, виробництво
EasyOCR Хороша Повільно Прототипи
TrOCR Хороша Середньо Друковані документи
Tesseract 5 Хороша Середньо On-premise, кастомні шрифти

Згідно з офіційним бенчмарком, PaddleOCR показує точність 92.8% на ICDAR2015 (PaddleOCR GitHub).

Чому важлива попередня обробка зображень?

Якість OCR безпосередньо залежить від того, що подається на вхід моделі. Фотографія з мобільного телефону — низький контраст, шум, нахил. Ми застосовуємо ланцюжок перетворень:

def preprocess_for_ocr(image: np.ndarray) -> np.ndarray: # Виправлення нахилу (deskewing) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) angle = detect_skew_angle(gray) if abs(angle) > 0.5: image = rotate_image(image, -angle) # Видалення шуму denoised = cv2.fastNlMeansDenoisingColored(image, h=10) # Підвищення контрасту (CLAHE) lab = cv2.cvtColor(denoised, cv2.COLOR_BGR2LAB) l, a, b = cv2.split(lab) clahe = cv2.createCLAHE(clipLimit=3.0, tileGridSize=(8, 8)) l = clahe.apply(l) denoised = cv2.cvtColor(cv2.merge([l, a, b]), cv2.COLOR_LAB2BGR) return denoised 

Навіть простий deskew піднімає accuracy на 3-5%. Для старих сканів із жовтим фоном використовуємо адаптивну бінаризацію — Otsu або Sauvola. Попередня обробка особливо критична для рукописного тексту: вона підвищує точність розпізнавання на 15-20%. Наша кастомна OCR-модель використовує попередню обробку зображень, корекцію помилок OCR та донавчання OCR для досягнення високої точності.

Додаткові методи підвищення точності
  • Використання мовної моделі для корекції контекстуальних помилок (наприклад, плутанина «0» та «O»).
  • Застосування ансамблю моделей для розпізнавання складних шрифтів.
  • Аугментація даних: повороти, шум, розмиття для покращення стійкості.

Як ми робимо: кейс розпізнавання медичних рецептів

Розгорнемо один реальний проєкт нашого клієнта з нашої практики. Завдання: приймати фото рецептів з мобільного додатку, розпізнавати назву ліків, дозування та інструкцію. Проблеми: рукописний текст лікарів, розмиті знімки, накладення штампів.

Рішення:

  1. Попередня обробка: CLAHE + бінаризація + видалення тіней через морфологію.
  2. Детекція: донавчена PaddleOCR detection model на 2000 розмічених рецептах (розмітка bbox).
  3. Розпізнавання: recognition model на основі PP-OCRv4, донавчена на 50000 синтетичних рецептах (згенеровані з різними почерками).
  4. Постобробка: словник ліків (10000 найменувань) + LanguageTool для корекції помилок OCR + LLM для контекстної корекції (плутанина 0/O).

Результат: точність на тестовій вибірці — 93% (Character Error Rate 0.07). Час обробки одного зображення — 1.5 секунди на CPU. Для порівняння: Tesseract 5 без донавчання дав би близько 40-50% на таких даних — наш пайплайн виявився в 2 рази точнішим.

Процес роботи

Будь-який проєкт з OCR у нас проходить 5 етапів:

  1. Аналітика: оцінка даних, типові дефекти, доменний словник.
  2. Проєктування: вибір фреймворку, архітектура пайплайну (черги, кешування).
  3. Реалізація: написання коду, донавчання моделей, інтеграція з вашою системою.
  4. Тестування: вимірювання точності на валідаційній вибірці, A/B тест на бойових даних.
  5. Деплой та підтримка: упаковка в Docker, REST API або gRPC, моніторинг метрик.

Що входить в роботу

  • Розгорнута документація пайплайну з описом всіх компонентів.
  • Навчена модель (weights + model card).
  • Вихідний код з інструкцією по запуску.
  • Інтеграція з вашим сховищем (S3, MinIO) та чергами (RabbitMQ, Kafka).
  • Навчання вашої команди роботі з системою.
  • Гарантія на точність (фіксуємо метрики в договорі).

Терміни

Завдання Термін
OCR через готовий фреймворк + API 1–2 тижні
Складні документи з попередньою обробкою 2–4 тижні
Кастомний шрифт / рукописний текст 4–8 тижнів

Вартість розраховується індивідуально після аналізу даних. Отримайте консультацію — оцінимо ваш проєкт за один день. Зв'яжіться з нами, щоб обговорити деталі та приблизну вартість.