Лабораторная работа по распознаванию печатного текста.
Этот простой демонстрационный проект предназначен для обучения и постижения основ обработки изображений и простейшей логистической регресиии. С помощью этого проекта вы можете познакомиться с такими основными элементами технологии распознавания образов, как выделение характерных особенностей (image features) и построение классификатора. Рыночная ниша проекта Это простой демонстрационный проект, созданный в целях обучения. Он никаким образом не является конкурирующим с комерческими системамми распознавания текстов и других образов. Предназначение проекта - заглянуть "под капот" и понять, как работает распознавание шаг за шагом.
| Продукт | Стоимость | Русские символы | Латинские символы | Цифры | Учет регистра |
|---|---|---|---|---|---|
| Abby Fine Reader | $$$ | + | + | + | + |
| OCR Cunei form | $$$ | + | + | + | + |
| Lab_TextRec | бесплатно | + | - | - | - |
Настольный компьютер, процессор не хуже Intel Core i7, оперативная память не менее чем 4 Гб. Графическая видео-карта не хуже NVidia GForce GTX 780Ti. Проект не имеет особенных, специфических требований к аппаратуре. Все вычисления производятся на центральном процессоре, поэтому критичным фактором для общей призводительности приложения является частота и количество ядер центрального процессора, а не технология, применяемая в GPU. В этом проекте нет GPU вычислений.
На настольном компьютере или лаптопе должна быть установлена операционная система Windows 10. Точная версия должна быть не ниже чем 10.0.14393. Приложение было протестирвано на указанной версии операционной системы. Скорей всего, приложение будет работать на более старших версиях Windows. Работа на более младших версиях не гарантируется.
Для сборки проекта необходимо, чтобы на компьютере были установлены:
- Microsof Visual Studio 2015 версия 4.0.25431.01 Update 3
- Microsoft .NET Framework версия 4.6.01586
- QT версия 5.7
Расход памяти максимальный расход требуемой памяти равен примерно 4 000 000 000 байт и может быть вычислен как XX x YY x ZZ, где XX - размер изображения в пикселях по горизонтали , YY - размер изображения в пикселях по вертикали, ZZ - коэффициент, равный 24 (используется 6 промежуточных изображений, формат пикселя - 4 байта, ARGB)
Производительность Приложение работает со скоростью не ниже чем 30 кадров в секунду для входного изображения размером 1024 x 600 пикселей.
Надежность Приложение обеспечивает примерно 95% точности распознавания текста. Эти результаты получены на синтетических тестах, прилагаемых к приложению.
Приложение принимает на вход графические файлы в формате JPEG. Более подробно о формате JPEG прочитать тут. Так как это - учебный проект, то для простоты (что не ограничивает общности подхода) установлено ограничение на размер входнызх изображений: 1024 x 600.
Выходными данными являются текстовые файлы в формате XML, тэги которого имеют следующий смысл:
- xMin Минимальная координата х охватывающего символ прямоугольника
- yMin Минимальная координата y охватывающего символ прямоугольника
- xMax Максимальная координата x охватывающего символ прямоугольника
- yMax Максимальная координата y охватывающего символ прямоугольника
- color Номер цвета, использующися при алгоритме заливки символов разными цветами для того, чтобы отделить каждый символ индивидуально
- letterCode Номер символа с таблице символов UTF-8
Продукт не требует никакой специальной процедуры установки. После сборки проекта с помощью MS Visual Studio 2015 на выходе получается запускаемый EXE файл. Для установки продукта, скопируйте на локальный диск репозиторий Github полностью. При дальнейшем улучшении продукта возможно создание специальной устрановочной процедуры, позволяющей пользователю выбрать опции установки через предоставляемый интерфейс пользователя.
Приложение может быть запущено в нескольких режимах. Каждому режиму соответствует свой ключ, передаваемый приложению через командную строку
| Ключ | Режим |
|---|---|
| -e | Редактирование |
| -f | Создание каталога изображений символов |
| -d | Создание дескрипторов символов и обучение модели |
| -p | Предсказание(распознавание) |
Изобржаниия для распознавания должны быть выложены в папку project/data и называться img_0000.jpg, img_0001.jpg, ...
Приложение поставляется с простейшим интерфейсом командной строки. Формат запуска приложения: app.exe FileName, где FileName - имя файла с изображением, которое требуется распознать. Внутри приложения можно пользоваться клавишами:
- Стрелка вправо: следующее избражение
- Стрелка влево: предыдущее изображение
Приложение представляет собой законченное standalone приложение и не предполагает наличия внешнего интерфейса (это не библиотека). Тем не менее, внутренняя реализация основывается на методе Predictor::performPrediction, в котором используются следующие аргументы:
- Raster* Входной изображение (в растеризованной форме)
- Model* (Модель предсказания, обученная заранее)
- RectSet& (Выходной набор прямоугольников с 2d координатами и распознанным символом)
Цикл "жизни" проекта можно представить следующими стадиями:
- Редактирование разметки охватывающих символы прямоугольников и назначение кодов символов (подготовка обучающего набора)
- Создание каталога изображений, в каждом из которых есть только один символ (подготовка обучающего набора)
- Получение дескрипторов каждого символа из обучавющего набора и построение модели предсказания
- Использование модели предсказания на входном изображении, содержащем неизвестные символы
Для практического использования важна только последняя фаза, а предварительные фазы подготовки данных и обучения модели выполняются всего лишь один раз. Что происходит со входным изображением на последнем этапе:
- Перевод пиксельного формата изображения из формата ARGB в формат Greyscale (8 байт на пиксель)
- Фильтрация изображения методом Гаусса с небольшим радиусом (2 пикселя) и равномерным смазыванием. На этом этапе удаляются мелкие артифакты изображения
- Адаптивная бинаризация смазанного на предыдущем этапе изображения с поомощью метода Отсу с дальнейшей линейной интерполяцией барьерных значенией
- Выделение зон связности путем применения алгоритма Flood Fill.
- Отбрасывание слишком "крупных" и "не-квадратных" зон связности, в которых с очень большой вероятность не может быть обнаружен символ
- Извлечение 8-ми градиентных признаков и 2-х суммарных признаков. Эти 10 чисел являются вектором - дескриптором прямоугольника
- Применение обученной нейронной сети для 10 входов (вектор дескрипторов) и получение предсказания (классификатор)
Для тестирования используется набор специальных изображений, для которых уже сделана "разметка" символов вручную. Разметка представляет собой пару заданных пользователем величин:
- Охватываюий прямоугольник (4 целых числа) - выделяется автоматически приложением, пользователь может указать любой прямоугольник и назначить ему символ
- Символ - целое число. Пользователь назначает символ, который "нарисован" в выделенном охватывающем прямоугольнике
