Всем привет! Хочу поделиться недавним проектом, в котором я разрабатывал плагин для распознавания текста на иврите. Задача была непростая, особенно учитывая, что клиент уже пытался использовать Tesseract OCR, но точность распознавания оставляла желать лучшего. В этой статье расскажу о том, с какими трудностями я столкнулся и как их преодолел.

Проблемы с Tesseract OCR

Tesseract OCR — довольно мощный инструмент для OCR, поддерживающий множество языков, включая иврит. Однако клиент был разочарован его производительностью на иврите: Tesseract часто ошибался при распознавании символов, что делало результаты практически бесполезными. Основные проблемы, с которыми я столкнулся:

  • Отсутствие качественного датасета. Для эффективного обучения OCR-моделей нужны большие объемы данных, а хорошие датасеты для иврита редкость.

  • Отсутствие моделей в популярных фреймворках. В популярных OCR-фреймворках таких как MMOCR, EasyOCR, PadleOCR моделей для распознавания иврита найдено не было, хотя как правило присутствовала поддержка многих других языков.

Мое решение

Я решил разработать собственную модель с использованием PaddleOCR, так как этот фреймворк дает больше возможностей для настройки и обучения.

Создание искусственного датасета

Поскольку найти готовый датасет было нереально, я создал его сам. Вот что я сделал:

1. Собрал словарь. Взял большой словарь иврита, включающий как стандартные, так и специализированные термины.

2. Сгенерировал изображения слов. Использова Python-библиотеку PIL для создания изображений слов разными шрифтами и фонами. Это добавило разнообразия и улучшило обучение модели.

Рис. 1. искусственные изображения с ивритом
Рис. 1. искусственные изображения с ивритом

 

3. Аугментация данных. Применили разные техники аугментации — добавление шумов, изменение яркости и контрастности, повороты и искажения. Это увеличило объем данных и сделало модель более устойчивой.

Рис.2 примеры аугментаций для текста
Рис.2 примеры аугментаций для текста

Обучение модели в PaddleOCR

Создав искусственный датасет, я приступил к обучению модели в PaddleOCR. Вот основные шаги:

  1. Настройка параметров обучения. Я тщательно подбирал гиперпараметры, такие как степень изменения концентрации, яркости, максимальный угол поворота, шумность изображения, чтобы модель сумела обрести хорошую обобщительную способность и могла лучше работать на данных, которых ранее не видела. Также были выбраны размер батча и количество эпох для оптимизации скорости процесса обучения.

  2. Использование предобученных моделей. Взял за основу предобученные модели PaddleOCR и дообучили их на нашем датасете. Это существенно сократило время обучения и улучшило результаты.

  3. Валидация и тестирование. На каждом этапе обучения проводили валидацию модели на отдельном наборе данных, чтобы следить за процессом и избегать переобучения.

Результаты и дальнейшие планы

После завершения обучения мы сравнили новую модель с Tesseract OCR на тестовом наборе данных. Результаты оказались впечатляющими: моя модель показала гораздо лучшую точность и устойчивость. 

Планы на будущее

1. Расширение датасета. Буду продолжать увеличивать объем и разнообразие данных для обучения, для этого применю более сложные инструменты генерации искусственных данных как тут. Также добавим реальные примеры текстов на иврите, чтобы разбавить синтетический датасет.

Рис. 3 искусственно сгенерированный текст на реальном фоне
Рис. 3 искусственно сгенерированный текст на реальном фоне

2. Оптимизация модели. Планирую проводить дополнительные эксперименты с архитектурой нейронной сети и гиперпараметрами для достижения максимальной точности.

3. Интеграция и тестирование. После окончательной доработки модели интегрируем плагин в рабочие процессы клиента и проведем широкое тестирование в реальных условиях.

Вот так мы шаг за шагом удалось улучшить распознавание текста на иврите. Надеюсь, мой опыт будет полезен тем, кто сталкивается с подобными задачами. Больше подобных задач буду разбирать в тг-канале «Мозги набекрень». Подписывайтесь.

Комментарии (6)


  1. anonymous
    17.08.2024 21:16

    НЛО прилетело и опубликовало эту надпись здесь


  1. digtatordigtatorov
    17.08.2024 21:16

    Можно попробовать автоматизировать генерацию синтетических картинок с текстом через automatic1111

    Или в лоб дообучить модель SD на картинках с текстом. (SD3 уже хорошо генерирует текст). Аналог Flux