Всем привет! Хочу поделиться недавним проектом, в котором я разрабатывал плагин для распознавания текста на иврите. Задача была непростая, особенно учитывая, что клиент уже пытался использовать Tesseract OCR, но точность распознавания оставляла желать лучшего. В этой статье расскажу о том, с какими трудностями я столкнулся и как их преодолел.
Проблемы с Tesseract OCR
Tesseract OCR — довольно мощный инструмент для OCR, поддерживающий множество языков, включая иврит. Однако клиент был разочарован его производительностью на иврите: Tesseract часто ошибался при распознавании символов, что делало результаты практически бесполезными. Основные проблемы, с которыми я столкнулся:
-
Отсутствие качественного датасета. Для эффективного обучения OCR-моделей нужны большие объемы данных, а хорошие датасеты для иврита редкость.
-
Отсутствие моделей в популярных фреймворках. В популярных OCR-фреймворках таких как MMOCR, EasyOCR, PadleOCR моделей для распознавания иврита найдено не было, хотя как правило присутствовала поддержка многих других языков.
Мое решение
Я решил разработать собственную модель с использованием PaddleOCR, так как этот фреймворк дает больше возможностей для настройки и обучения.
Создание искусственного датасета
Поскольку найти готовый датасет было нереально, я создал его сам. Вот что я сделал:
1. Собрал словарь. Взял большой словарь иврита, включающий как стандартные, так и специализированные термины.
2. Сгенерировал изображения слов. Использова Python-библиотеку PIL для создания изображений слов разными шрифтами и фонами. Это добавило разнообразия и улучшило обучение модели.
3. Аугментация данных. Применили разные техники аугментации — добавление шумов, изменение яркости и контрастности, повороты и искажения. Это увеличило объем данных и сделало модель более устойчивой.
Обучение модели в PaddleOCR
Создав искусственный датасет, я приступил к обучению модели в PaddleOCR. Вот основные шаги:
-
Настройка параметров обучения. Я тщательно подбирал гиперпараметры, такие как степень изменения концентрации, яркости, максимальный угол поворота, шумность изображения, чтобы модель сумела обрести хорошую обобщительную способность и могла лучше работать на данных, которых ранее не видела. Также были выбраны размер батча и количество эпох для оптимизации скорости процесса обучения.
-
Использование предобученных моделей. Взял за основу предобученные модели PaddleOCR и дообучили их на нашем датасете. Это существенно сократило время обучения и улучшило результаты.
-
Валидация и тестирование. На каждом этапе обучения проводили валидацию модели на отдельном наборе данных, чтобы следить за процессом и избегать переобучения.
Результаты и дальнейшие планы
После завершения обучения мы сравнили новую модель с Tesseract OCR на тестовом наборе данных. Результаты оказались впечатляющими: моя модель показала гораздо лучшую точность и устойчивость.
Планы на будущее
1. Расширение датасета. Буду продолжать увеличивать объем и разнообразие данных для обучения, для этого применю более сложные инструменты генерации искусственных данных как тут. Также добавим реальные примеры текстов на иврите, чтобы разбавить синтетический датасет.
2. Оптимизация модели. Планирую проводить дополнительные эксперименты с архитектурой нейронной сети и гиперпараметрами для достижения максимальной точности.
3. Интеграция и тестирование. После окончательной доработки модели интегрируем плагин в рабочие процессы клиента и проведем широкое тестирование в реальных условиях.
Вот так мы шаг за шагом удалось улучшить распознавание текста на иврите. Надеюсь, мой опыт будет полезен тем, кто сталкивается с подобными задачами. Больше подобных задач буду разбирать в тг-канале «Мозги набекрень». Подписывайтесь.
Автор: alexsphera