- PVSM.RU - https://www.pvsm.ru -
Всем привет! Хочу поделиться недавним проектом, в котором я разрабатывал плагин для распознавания текста на иврите. Задача была непростая, особенно учитывая, что клиент уже пытался использовать Tesseract OCR, но точность распознавания оставляла желать лучшего. В этой статье расскажу о том, с какими трудностями я столкнулся и как их преодолел.
Tesseract OCR — довольно мощный инструмент для OCR, поддерживающий множество языков, включая иврит. Однако клиент был разочарован его производительностью на иврите: Tesseract часто ошибался при распознавании символов, что делало результаты практически бесполезными. Основные проблемы, с которыми я столкнулся:
Отсутствие качественного датасета. Для эффективного обучения OCR-моделей нужны большие объемы данных, а хорошие датасеты для иврита редкость.
Отсутствие моделей в популярных фреймворках. В популярных OCR-фреймворках таких как MMOCR, EasyOCR, PadleOCR моделей для распознавания иврита найдено не было, хотя как правило присутствовала поддержка многих других языков.
Я решил разработать собственную модель с использованием PaddleOCR, так как этот фреймворк дает больше возможностей для настройки и обучения.
Создание искусственного датасета
Поскольку найти готовый датасет было нереально, я создал его сам. Вот что я сделал:
1. Собрал словарь. Взял большой словарь иврита, включающий как стандартные, так и специализированные термины.
2. Сгенерировал изображения слов. Использова Python-библиотеку PIL для создания изображений слов разными шрифтами и фонами. Это добавило разнообразия и улучшило обучение модели.
3. Аугментация данных. Применили разные техники аугментации — добавление шумов, изменение яркости и контрастности, повороты и искажения. Это увеличило объем данных и сделало модель более устойчивой.
Создав искусственный датасет, я приступил к обучению модели в PaddleOCR. Вот основные шаги:
Настройка параметров обучения. Я тщательно подбирал гиперпараметры, такие как степень изменения концентрации, яркости, максимальный угол поворота, шумность изображения, чтобы модель сумела обрести хорошую обобщительную способность и могла лучше работать на данных, которых ранее не видела. Также были выбраны размер батча и количество эпох для оптимизации скорости процесса обучения.
Использование предобученных моделей. Взял за основу предобученные модели PaddleOCR и дообучили их на нашем датасете. Это существенно сократило время обучения и улучшило результаты.
Валидация и тестирование. На каждом этапе обучения проводили валидацию модели на отдельном наборе данных, чтобы следить за процессом и избегать переобучения.
После завершения обучения мы сравнили новую модель с Tesseract OCR на тестовом наборе данных. Результаты оказались впечатляющими: моя модель показала гораздо лучшую точность и устойчивость.
1. Расширение датасета. Буду продолжать увеличивать объем и разнообразие данных для обучения, для этого применю более сложные инструменты генерации искусственных данных как тут [1]. Также добавим реальные примеры текстов на иврите, чтобы разбавить синтетический датасет.
2. Оптимизация модели. Планирую проводить дополнительные эксперименты с архитектурой нейронной сети и гиперпараметрами для достижения максимальной точности.
3. Интеграция и тестирование. После окончательной доработки модели интегрируем плагин в рабочие процессы клиента и проведем широкое тестирование в реальных условиях.
Вот так мы шаг за шагом удалось улучшить распознавание текста на иврите. Надеюсь, мой опыт будет полезен тем, кто сталкивается с подобными задачами. Больше подобных задач буду разбирать в тг-канале «Мозги набекрень» [2]. Подписывайтесь.
Автор: alexsphera
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/393799
Ссылки в тексте:
[1] тут: https://github.com/ankush-me/SynthText
[2] тг-канале «Мозги набекрень»: https://t.me/brains2up
[3] Источник: https://habr.com/ru/articles/836714/?utm_source=habrahabr&utm_medium=rss&utm_campaign=836714
Нажмите здесь для печати.