» » Оптическое распознавание символов на микроконтроллере

 

Оптическое распознавание символов на микроконтроллере

Автор: admin от 15-06-2017, 11:10, посмотрело: 1236

Оптическое распознавание символов на микроконтроллере

На сегодняшний день оптическое распознавание символов является частью решения таких прикладных задач, как распознавание и оцифровка текстов, распознавание документов, распознавание автомобильных номеров, определение номеров банковских карточек, чтение показаний счетчиков учета, определения номеров домов для создания карт (Google Street View) и т.д.
Распознавание символа означает анализ его изображения с целью получения некоторого набора признаков для сравнения их с признаками класса [ 1 ]. Выбор такого набора и способы его определения отличают разные методы распознавания, но для большинства из них необходима одномоментная информация обо всех пикселях изображения.
Последнее обстоятельство и достаточно большой объем вычислений делают невозможным использования маломощных вычислительных устройств (микроконтроллеров) для оптического распознавания символов. «Да и зачем?» — воскликнет информированный читатель, «мощности вычислительных устройств постоянно растут, а их цена падает!»[2, 3]. Допустим, что ответ будет такой: просто интересно, возможно ли упростить метод распознавания до такой степени, чтобы можно было бы использовать микроконтроллер?
Оказалось можно, более того, оказалось возможным то, что кажется относится к области фантастики, а именно:


  • распознавание независимо от шрифта;

  • распознавание строки символов без разделения на отдельные символы;

  • распознавание «экранированных» символов, например, символ в символе;

  • распознавание «разорванных» символов;

  • распознавание символов, состоящих из нескольких частей;

  • распознавание без изменения признаков при повороте до 15°. Возможность
    распознавания повернутых символов на больший угол за счет изменения его признаков;

  • распознавание символов в видеопотоке с одного кадра;

  • распознавание рукописных символов;

  • ограниченное количество признаков для описания класса символов, для арабских цифр
    и латиницы — один, для кириллицы — максимум два (например, для некоторых
    вариантов написания Ж);

  • простое «ручное» определение признаков для нового класса;

  • автоматическое определение признаков для нового класса;

  • расширение классов символов простым добавлением в базу его признаков;


И все это на микроконтроллере.

Основная идея метода



Теперь поподробнее о самом методе. Рассмотрим, например, различные начертания символа А:

Оптическое распознавание символов на микроконтроллере


Несмотря на видимые различия, можно выделить общие признаки структурного типа, которые являются необходимыми признаками прописной буквы А (для не разорванных символов), а именно:
если рассматриваемый символ является прописной буквой А, то он будет содержать замкнутую область и область разомкнутую вниз.

Оптическое распознавание символов на микроконтроллере


Еще раз подчеркнем, что указанные признаки являются необходимыми, но не достаточными: если мы будем описывать контуры вокруг двух областей указанного типа,

Оптическое распознавание символов на микроконтроллере


то это не обязательно будут буквы прописные А, возможны, например Д, Я,R, строчная рукописная А,..:

Оптическое распознавание символов на микроконтроллере


Однако использование областей в качестве элементов символа позволяет сформировать достаточные признаки, причем, для подавляющего числа алфавитно-цифровых символов можно сформировать единственный достаточный признак! Его очень просто сформировать для каждого класса и, в отличие от структурных признаков, используемых ABBYY при распознавании рукописных символов [ 1 ], его вариативность очень низкая и его возможно формировать автоматически! Другими словами, такие признаки хорошо работают как для печатных, так и для рукописных символов.

Устройство для распознавания



Первая проверка метода была описана в статье [ 4 ]. Метод проверялся на одиночных цифрах, получаемых примитивной камерой от мыши с семисегментного индикатора или напечатанных на бумаге. После первого успеха возникло естественное желание проверить возможность распознавания последовательности символов, а для этого нужно использовать другую камеру. Мы использовали камеру OV7670 (0.3Мп). Остальные главные компоненты схемы остались без изменения — это Arduino и ESP8266, но изменились их функции. Arduino теперь используется для инициализации камеры, в качестве задающего генератора, приема распознанных символов и их отображения на индикаторах. ESP8266 занимается получением изображения с камеры и его распознаванием, кроме того он обеспечивает передачу данных на Ардуино для отображения и передачу распознанной информации через WiFi на внешние устройства, например, смартфон. Используемая электрическая схема устройства приведена на рисунке:

Оптическое распознавание символов на микроконтроллере


Изображение попадает в устройство через щель в его нижней части и, отражаясь от зеркала, поступает на камеру. Подсветка изображения осуществляется светодиодом через то же зеркало. Механическая схема устройства приведена на рисунке.

Оптическое распознавание символов на микроконтроллере




Получение изображения на на ESP8266



Настройки камеры при инициализации взяты из [5]. Частота кадров приблизительно 0,4 кадр/с.Так как количество пинов у ESP8266 недостаточно, то обрабатываются только 6 старших бит каждого яркостного байта изображения (камера настроена в режиме YUV). Для получения изображения используется конечный автомат (машина состояний).

Оптическое распознавание символов на микроконтроллере


Согласно даташит камеры OV7670 [6]

Оптическое распознавание символов на микроконтроллере

Оптическое распознавание символов на микроконтроллере


можно выделить следующие состояния камеры, условия и сигналы во время ее работы:




















































Имя состояния,номерОписание состоянияСигнал к переходу
в другое состояние
camoff,0камера
не готова к работе
vzz
(vsync=1,href=
0,pclk=0)
frapause, 1пауза
между кадрами. ожидание начала кадра.
zzz (vsync=0,href=0,pclk=0)
framebeg, 2чтение
кадра. ожидание начала строки в кадре.
zhz (vsync=0,href=1,pclk=0)
framebeg, 2чтение
кадра. ожидание конца кадра после чтения
последнего пикселя
vzz
(vsync=1,href=
0,pclk=0)
fbyteread, 3яркостный
байт прочитан. ожидание начала паузы
перед цветоразностным байтом.
zhz (vsync=0,href=1,pclk=0)
fpause, 4пауза
перед цветоразностным байтом. ожидание
начала чтения цветоразностного байта.
zhp
(vsync=0,href=
1,pclk=1)
sbyteread, 5цветоразностный
байт прочитан. ожидание начала паузы
перед яркостным байтом.
zhz (vsync=0,href=1,pclk=0)
spause, 6пауза
перед яркостным байтом. ожидание
окончания строки.
zzz
(vsync=0,href=
0,pclk=0)
spause, 6пауза
перед яркостным байтом. ожидание начала
чтения яркостного байта.
zhp
(vsync=0,href=
1,pclk=1)


Реализация машины основана на тех же принципах, которые изложены в [7]. Вся машина описывается ее геном — трехмерным вектором, первый компонент которого содержит ключи, а второй — имена новых состояний, третий — имена функций. Ключ содержит информацию от текущем состоянии и сигнале перехода. Для формирования ключа и сигнала используются битовые операции. Детали реализации понятны из кода модуля чтения камеры.







Обработка изображения



Обработка изображения состоит в построчной бинаризации, соединении полученных отрезков, анализе и синтезе полученных фигур. Целью обработки является формирование интегральных признаков, включающих свойства областей, входящих в фигуры. Несмотря на простоту основной идеи ее реализация содержит ряд специфических моментов, которые не могут быть раскрыты в рамках настоящей статьи.

Визуализация процесса распознавания



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

Оптическое распознавание символов на микроконтроллереОптическое распознавание символов на микроконтроллере

Оптическое распознавание символов на микроконтроллереОптическое распознавание символов на микроконтроллере

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

Оптическое распознавание символов на микроконтроллере

Также распознавание не происходит при неправильном позиционировании текста:

Оптическое распознавание символов на микроконтроллере

Для визуализации использовалась небольшая программа, написанная на Java Script с использованием nodeWebkit.



Пример работы устройства показан в коротком видеоролике.







Заключение



Полученные результаты показывают высокую эффективность метода распознавания на устройствах, казалось бы, совершенно для этого не предназначенных. Небольшое усовершенствование метода, связанное с использованием информации из нескольких кадров для дополнительного «всматривания» в интересующие области, позволит поднять качество распознавания до уровня коммерческих продуктов.
Также понятен подход для анализа и распознавания многопризнаковых объектов, таких как строки рукописного текста или иероглифы, однако для этого нужны устройства с большим, чем у нашего esp (512K, объем программы более 250К) объемом памяти.
Спасибо за внимание.

Ссылки:

1. Распознавание текста в ABBYY FineReader (2/2)
2. Omega2: самый маленький в мире микрокомпьютер с Linux и Wi-Fi
3. Orange Pi 2G-IoT — идеальный одноплатник для IoT
4. Распознавание цифр на микроконтроллере
5. Скетч Arduino для работы с камерой OV7670
6. Даташит камеры OV7670
7. Отражение динамики в модели СКУД

Источник: Хабрахабр

Категория: Программирование, Веб-разработка

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *