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