Разработка мобильного приложения для распознавания информации на визитных карточках

Анализ библиотек оптического распознавания символов. Описание пользовательского сценария мобильного приложения. Модули сканирования и распознавания визитных карточек, отображения сохранённых контактов, настроек приложения. Дизайн интерфейса программы.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 04.12.2019
Размер файла 1,4 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ

«ВЫСШАЯ ШКОЛА ЭКОНОМИКИ»

Факультет информатики, математики и компьютерных наук

Программа подготовки бакалавров по направлению 09.03.04 Программная инженерия

ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА

Разработка мобильного приложения для распознавания информации на визитных карточках

Матутин Василий Андреевич

Нижний Новгород, 2019

Содержание

  • Введение
  • Раздел 1.
    • 1.1 Цель и задачи работы
    • 1.2 Обзор технологии оптического распознавания символов
    • 1.3 Анализ библиотек оптического распознавания символов
    • 1.4 Обзор технологии извлечения упоминаний сущностей (классификации текста по категориям)
    • 1.5 Анализ библиотек классификации текста по категориям
    • 1.6 Обзор мобильных платформ
    • 1.7 Обзор существующих мобильных приложений для распознавания визитных карточек
    • 1.8 Определение требований к приложению
  • Раздел 2.
    • 2.1 Описание пользовательского сценария приложения
    • 2.2 Системные требования к разрабатываемому приложению
    • 2.3 Диаграмма классов приложения
    • 2.4 Структура и общий алгоритм работы приложения
      • 2.4.1 Инициализация приложения
      • 2.4.2 Пользовательская навигация
      • 2.4.3 Модуль сканирования и распознавания визитных карточек
      • 2.4.4 Модуль отображения сохранённых контактов
      • 2.4.5 Модуль общих настроек приложения
    • 2.5 Дизайн пользовательского интерфейса приложения
    • 2.6 Используемые шаблоны проектирования
  • Раздел 3.
    • 3.1 Тестирование приложения
      • 3.1.1 Модульное тестирование
      • 3.1.2 Интеграционное и системное тестирование
      • 3.1.3 Итоги тестирования
    • 3.2 Описание стратегий дальнейшего развития приложения
  • Заключение
  • Список литературы
  • Приложение
  • Введение
  • В настоящее время информационные технологии оказывают сильное влияние на все сферы деятельности человека. Растёт объём накапливаемой информации, усложняются задачи, для решения которых применяются вычислительные системы, меняются средства коммуникации.
  • Изменения в структуре общественных отношений, вызванные всё более широким применением различных информационно-технических решений, затрагивают и такие сферы деятельности человека, как производственные процессы. В настоящее время повсеместное распространение получили электронные формы организации рабочего времени и общения, такие как проведение совещаний через системы видеосвязи, применение электронного документооборота на предприятии, автоматизированные системы подбора сотрудников и другие.
  • Тем не менее, несмотря на факт повсеместного распространения информационных решений в среде корпоративных отношений, не может оставаться незамеченным тот факт, что некоторые сферы остаются менее затронуты данным явлением. Одним из основных примеров здесь может выступать практика обмена визитными карточками перед началом деловой встречи. В силу того, что данный процесс имеет скорее символическое значение как традиция, которая помогает установить прочные деловые отношения, чем как эффективный способ обмена контактной информацией, бумажные карточки не были вытеснены их аналогами в цифровой форме. В то же время, бумажные адресные книги уже давно потеряли свою актуальность, поэтому получатель визитной карточки вынужден переносить интересующую его информацию в электронный вид вручную, что приводит к значительным временным затратам и создаёт дополнительные неудобства.
  • Для решения проблем, подобных данной, были разработаны специальные программы, базирующиеся на оптическом распознавании текста. Данные системы используют в качестве входных данных цифровую фотографию или отсканированный документ, анализируют их на наличие машинописного или рукописного текста и переводят его в формат, доступный для последующей обработки программными средствами, то есть машиночитаемый текст. Примером программных решений в данной области может служить приложение ABBYY FineReader от компании ABBYY для распознавания текста на сканированных изображениях или Tesseract от компании Google. В то же время, следует учитывать, что внедрение данных технологий находится на стадии испытаний и не затрагивает многих сфер информационных отношений, в том числе оптического распознавания визитных карточек. Поэтому качественный программный продукт, решающий данную проблему, остаётся широко востребованным на рынке информационных услуг.
  • Данная исследовательская работа организована следующим образом: в первом разделе объясняются цель и задачи работы, проводится обзор существующих алгоритмов, предназначенных для распознавания и классификации текста, с анализом уже представленных на потребительском рынке решений по распознаванию визитных карточек и производится постановка требований к приложению. Второй раздел посвящен описанию разработанного алгоритма. Также рассматривается архитектура приложения и детали реализации. Обзор тестирования приложения, а также стратегии дальнейшего развития приводятся в заключительном разделе.
  • Раздел 1.
  • 1.1 Цель и задачи работы
  • Целью данной работы является разработка прототипа мобильного приложения для распознавания информации на визитных карточках и её последующей классификации с возможностью сохранения в электронную адресную книгу устройства для дальнейшего использования.
  • Объект исследования - распознавание информации по цифровому изображению на мобильном устройстве и её классификация.
  • Предмет исследования - применение решений в области оптического распознавания и классификации текста при создании приложения для распознавания информации на бумажных визитных карточках.
  • Для достижения поставленной цели необходимо выполнить следующие задачи:

ѕ провести обзор изучаемой области и рассмотреть существующие решения в области оптического распознавания текста и классификации текстовой информации по необходимым категориям;

ѕ определить требования к разрабатываемому приложению;

ѕ разработать и описать алгоритм функционирования предлагаемого приложения с учётом агрегации существующих решений и разработанных требований;

ѕ разработать функционирующий прототип приложения;

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

Входными данными для данного приложения будет являться цифровое изображение, полученное с помощью камеры мобильного устройства. Для получения точного результата данное изображение должно быть выполнено в достаточном разрешении (не менее 800х600 пикселей), без значительных отклонений, в том числе поворотов, недостаточного освещения и присутствия посторонних объектов в кадре.

По результатам работы приложения должна быть получена электронная версия текста, представленного на распознаваемом изображении, классифицированная по следующим категориям: имя, компания, телефон, адрес электронной почты и физический адрес организации или человека. Данная информация должна сохраняться на устройстве пользователя вместе с выходным изображением и быть доступна для редактирования. Также сведения об организации или человеке могут быть экспортированы во встроенную электронную адресную книгу на устройстве пользователя.

1.2 Обзор технологии оптического распознавания символов

Оптическое распознавание символов (optical character recognition, OCR) - это машинное преобразование рукописного, машинописного или печатного текста в текстовые данные, использующиеся для представления символов на компьютере [3]. В настоящее время данная технология в основном применяется для распознавания текста на бумажных носителях (так называемая оцифровка текста), например для анализа бумажной отчётности предприятий, кассовых чеков, банковских выписок, научной литературы и прочих документов, подходящих для обработки данным алгоритмом. Технология OCR используется как эффективный способ повышения доступности информации: документы, преобразованные в цифровой вид, могут быть проиндексированы поисковыми системами сети Интернет, занимают значительно меньше места при хранении и доступны в онлайн режиме. Кроме того, текст в цифровой форме может быть использован для таких автоматизированных процессов, как машинный перевод и преобразование текста в речь.

В настоящее время выделяют два основных подхода к оптическому распознаванию текста: сопоставление изображений и шаблонов и классификация символов с помощью нейронных сетей [5].

Метод сопоставления изображений и шаблонов предполагает сравнение изображения символа по определённым параметрам с заранее определённым эталонным символом. В качестве таких параметров могут выступать пересечения (сколько раз и каким образом произошло пересечение изображения символа с определёнными прямыми, проведёнными под заданными углами) или зонирование (пиксельное разбиение изображения для определения частоты совместной встречаемости «чёрных» и «белых» зон). Алгоритм в результате своей работы выбирает эталонный шаблон, наиболее близко соответствующий параметрам входного изображения.

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

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

Таким образом, по результатам обучения составляется карта признаков для анализа входного символа. Данный подход позволяет получить достаточно высокую точность при большом наборе входных данных для обучения, за счёт выделения сложных сочетаний признаков, устойчивых к изменениям фона или шрифта изображения. Тем не менее, следует учитывать тот факт, что алгоритм работает только для определённых входных данных, пусть и подверженных искажениям, например, нельзя распознавать символы русского алфавита, используя нейронные сети, обученные на образцах английского текста. Данный алгоритм представляется наиболее перспективным в настоящее время и находится в стадии активной разработки. Многие высокобюджетные компании реализуют и предлагают к использованию свои модели нейронных сетей для оптического распознавания текста.

С помощью применения данных методов можно добиться 99% точности распознавания символов на высококачественном изображении текста. При применении методов в реальных условиях приемлемым признаётся результат 80-90% успешно распознанных символов. Кроме того, ни один метод не может показать хороший результат при распознавании изображения плохого качества, поэтому предварительная обработка изображения почти также важна, как и выбор метода распознавания текста.

1.3 Анализ библиотек оптического распознавания символов

В настоящее время существует большое разнообразие программных интерфейсов, предлагающих функционал для оптического распознавания символов. В силу ограниченности ресурсов проекта, среди многообразия данных библиотек рассмотрим только те, которые предлагают готовые решения без необходимости конструирования архитектуры нейронной сети и её последующего обучения: ABBYY Cloud OCR SDK, Tesseract OCR и Google Firebase Text Recognition.

ABBYY Cloud OCR SDK - это онлайн-сервис, предложенный компанией ABBYY для распознавания текста на изображении. Функционирует по принципу удалённого веб-сервиса: пользователи могут загружать изображения на сервер с помощью REST запросов и принимать результат в виде распознанного текста. Как следствие, данный сервис может быть использован на любом устройстве, поддерживающем выполнение таких запросов (фактически на всех устройствах с выходом в интернет), кроме того, данный сервис характеризуется одной из самых высоких точностей распознавания. Существенным недостатком ABBYY Cloud OCR SDK является отсутствие бесплатной модели распространения и встраиваемых интерфейсов, ориентированных на использование непосредственно из кода мобильного приложения.

Tesseract OCR - это свободно распространяемая библиотека, написанная на языке C++. Построена по модульному принципу: для распознавания текста на определённом языке пользователю необходимо подключить модуль с моделью для распознавания данного языка, разместив его на своём устройстве. Таким образом, существует возможность собирать любую комбинацию распознаваемых языков, в том числе с использованием собственных моделей. Существенным преимуществом библиотеки является возможность работы без соединения с сетью. Недостатком является более низкое качество распознавания по сравнению с онлайн аналогами. Для работы библиотеки на мобильных устройствах необходимо подключить библиотеку tess-two, которая расширяет возможности библиотеки Tesseract OCR путём её адаптации для работы на мобильных устройствах. В среднем библиотека распознаёт успешно 60% символов [7].

Google Firebase Text Recognition - библиотека, предлагаемая компанией Google для распознавания текста. Изначально адаптирована для работы на мобильных устройствах. Распространяется по условно бесплатной модели: существует лимит количества бесплатно распознанного текста. Работает как в онлайн, так и оффлайн режимах (в последнем отсутствует поддержка кириллических языков). Из преимуществ можно отметить возможность динамического определения языка анализируемого текста и наличие обширной документации, что упрощает использование данной библиотеки. Ошибка при распознавании символов в тексте в среднем составляет 15-20% [7].

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

В данной работе основной акцент ставится на использование комбинации двух библиотек: Tesseract OCR и Google Firebase Text Recognition в связи с явным наличием преимуществ данного решения: поддержка мобильных устройств, модель бесплатного использования в рамках исследовательского проекта и высокое качество распознавания.

1.4 Обзор технологии извлечения упоминаний сущностей (классификации текста по категориям)

Извлечение упоминаний сущностей (named entity recognition, NER) - это технология идентификации участков в неструктурированном тексте, в которых упоминаются категорируемые объекты для их классификации по заранее определённым категориям, таким как имя человека, адрес электронной почты, название организации [2].

Данная технология находится на стадии экспериментального развития и мало применяется в существующих на сегодняшний момент приложениях, однако первые результаты использования уже демонстрируют огромный потенциал данной технологии для решения прикладных задач. Например, заполнение баз данных по отсканированным заявлениям, в которых человек указывает свои данные или поиск определённых категорий, таких как названия городов, в больших объёмах текста [4].

Существует два основных подхода к решению задачи извлечения сущностей из текста.

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

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

1.5 Анализ библиотек классификации текста по категориям

Существует достаточно большое количество библиотек для классификации текста, построенных на применении различных методов: Standford NER, spaCy, NLTK. Однако все они не адаптированы для применения на мобильных устройствах, что значительно затрудняет или делает невозможным их использование при разработке мобильного приложения. Единственными сервисами, которые могут быть использованы на мобильных устройствах для извлечения сущностей из текста являются Amazon Comprehend Languages от компании Amazon, Watson от компании IBM и Google Cloud Natural Language API от компании Google.

Amazon Comprehend Languages и Watson не поддерживают русский язык, что является существенным ограничением при разработке приложения ориентированного на региональный рынок, поэтому в данной работе рассматривается использование Google Cloud Natural Language API. Данный сервис работает с REST запросами, отправляемыми пользователем на сервер, и возвращает результат в виде классифицированного текста. Единственным существенным недостатком сервиса является отсутствие возможности работы при отсутствии сети. Сервис работает по условно-бесплатной модели устанавливая ограничение на количество классифицированных объектов текста в месяц.

Данная библиотека основана на применении нейронных сетей для классификации текста. Точность верной классификации составляет приблизительно 66% [1].

1.6 Обзор мобильных платформ

Основным этапом при проектировании приложения является определение оптимальной платформы для разработки. Согласно последним данным, опубликованным статистической компанией «StatCounter» [15] на март 2019 года - 75.33% мирового рынка мобильных операционных систем занимает система Android и 22.40% - iOS. Рассмотрим каждую из этих систем.

Платформа iOS от компании Apple завоевала свою нишу рынка благодаря лаконичности интерфейса, единой экосистеме продукта и надёжности работы программного обеспечения. Данная операционная система и на сегодняшний день демонстрирует потенциал по увеличению доли на рынке. Определённым преимуществом разработки приложения для использования в данной системе является наличие заранее определённого ограниченного количества моделей устройств на которых может запускаться данное приложение, что облегчает процедуру его тестирования. Однако, для разработки на системе iOS требуется приобретать специальную лицензию разработчика и иметь доступ к полностью настроенной системе MacOS, что значительно ограничивает возможности разработки приложения на начальном этапе. Для разработки приложений для данной операционной системы используется, как правило, язык программирования Objective-C и Swift.

Мобильная операционная система Android от компании Google является на настоящий момент безусловным лидером рынка. Данная платформа обладает большой популярностью не только среди пользователей, но и среди разработчиков благодаря своим хорошо задокументированным и простым в применении библиотекам для высокоуровневой разработки. Android является адаптивной платформой с открытым исходным кодом и поэтому широко применяется на устройствах различных производителей. Это же и является некоторым недостатком данной платформы для разработки. В силу того, что многие производители изменяют стандартное поведение системы, добавляя в неё свои элементы, работа приложения на различных устройствах становится менее стабильной и предсказуемой, что вынуждает разработчиков учитывать наличие большого количества различных факторов, влияющих на использование приложения, а также уделять больше времени на тестирование.

В то же время для разработки приложений не требуется лицензия (необходима только для распространения), а разработку можно вести на любой стационарной операционной системе, где возможна сборка установочных пакетов для Android. Например, наиболее популярная среда разработки Android Studio доступна для использования на системах Windows, Linux и MacOS. Большинство приложений для системы Android на сегодняшний день написаны на языке Java, однако, новым стандартом индустрии является язык Kotlin, который рекомендуется использовать при разработке новых приложений.

Таким образом, учитывая такие факторы, как доступность платформы для разработки и охват аудитории, в данной исследовательской работе рассматривается разработка приложения на платформе Android на языке Kotlin. Система iOS может выступать как перспективная платформа для разработки в рамках расширения данной работы.

1.7 Обзор существующих мобильных приложений для распознавания визитных карточек

В настоящее время приложения для распознавания визитных карточек на мобильных устройствах представлены достаточно обширно, например в «Play store» для устройств на базе Android и в «App store» для iOS систем. Большинство данных приложений реализуют необходимый минимальный функционал для распознавания визитных карточек: сканирование, распознавание текста и его классификация. Однако, все они обладают существенными недостатками, которые становятся препятствием для пользователей при полноценном использовании приложения. Рассмотрим несколько примеров таких приложений, занимающих лидирующие позиции по числу пользовательских установок.

Компания «Griffin Algorithm» предлагает решение «DigiCard», которое успешно распознаёт и классифицирует визитки как при наличии доступа в сеть Интернет, так и без него. Однако, данное приложение может работать только с визитными карточками на английском языке, что делает его использование бессмысленным для пользователей не англоговорящих стран.

Другое решение предлагает компания «INSTIG». В приложении заявлена поддержка 16 языков, однако оно не работает при отсутствии соединения с сетью и демонстрирует посредственный уровень распознавания (из 3 тестовых карточек ни одна не была распознана и классифицирована).

Наиболее известным и популярным приложением для распознавания визитных карточек является «Business Card Reader» от компании «ABBYY». Данное приложение действительно поддерживает больше 20 языков, работает вне зависимости от подключения сети. Однако, результаты распознавания также не являются стабильными, только 1 из 3 карточек была успешно распознана. Кроме того, негативное впечатление производит устаревший дизайн пользовательского интерфейса, перегруженного ненужными элементами и не соответствующему современным стандартам индустрии.

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

1.8 Определение требований к приложению

На основании всей вышеизложенной информации для разрабатываемого приложения были сформулированы следующие требования:

1. Приложение должно основываться на использовании профессиональных библиотек в области распознавания текста, для демонстрации приемлемого результата (70% корректно классифицированной информации в онлайн режиме и 60% в оффлайн для номера телефона и адреса электронной почты) по распознаванию и классификации информации на визитных карточках тестового набора

2. Поддерживать работу с карточками на разных языках (как минимум на русском и английском)

3. Обеспечивать возможность использования как при наличии интернет-соединения, так и при его отсутствии

4. Отвечать минимальным требованиям, предъявляемым к дизайну пользовательского интерфейса Android приложений в рамках концепции material designs.

Раздел 2.

2.1 Описание пользовательского сценария приложения

Во время использования разработанного приложения пользователь может совершать следующие шаги:

ѕ делать снимок бумажного варианта визитной карточки для получения представления текстовой информации на ней в электронном виде;

ѕ экспортировать полученную информацию в стандартную электронную адресную книгу на своём устройстве;

ѕ сохранять информацию локально в приложении в виде: цифровое изображение карточки + краткая текстовая информация по ней (имя, организация, телефон, электронная почта, физический адрес);

ѕ редактировать и удалять сохранённую в приложении информацию о карточках;

ѕ переключать приложение между двумя режимами работы: распознавание и классификация информации с использованием облачных сервисов по сети Интернет и работа без выхода в сеть с использованием модулей библиотеки Tesseract OCR, расположенных локально на устройстве.

2.2 Системные требования к разрабатываемому приложению

Минимальной версией Android для запуска приложения на системе является Marshmallow, 6.0 (Android SDK 23).

2.3 Диаграмма классов приложения

На рисунке 1 приведены классы, используемые в работе приложения, сгруппированные по выполняемой функции

Рис. 1. Структура классов приложения

2.4 Структура и общий алгоритм работы приложения

2.4.1 Инициализация приложения

При запуске приложения на экране устройства отображается заставочный экран. В это время происходит выделение ресурсов системы и начинается выполнение метода onCreate() главного класса контроллера -MainActivity. На данной стадии происходит аутентификация приложения в облачном сервисе Firebase для последующего выполнения обращений к сервисам распознавания текста с данного устройства. Приложение уже содержит в себе всю необходимую информацию (токен проекта) для работы с сервисом, поэтому никаких действий от пользователя не требуется. Регистрация пользователя происходит в параллельном основному UI-потоку приложения благодаря вызову асинхронного класса GoogleAccess TokenLoader унаследованного от стандартного класса AsyncTask. Благодаря такой организации работы, приложение продолжает выполнение последующих действий, не ожидая подтверждения от Firebase, что значительно сокращает время загрузки приложения при запуске.

Следующим шагом работы является проверка необходимых разрешений для работы с определёнными элементами системы Android: камерой и файловым хранилищем. Данный шаг обусловлен тем, что согласно политикам безопасности, каждое приложение обязано в явном виде запрашивать у пользователя разрешение на работу с компонентами системы. Соответственно в начале работы при необходимости выполняется запрос разрешений. Если пользователь отклоняет данный запрос, то приложение прекращает свою работу. При повторной попытке запуска после отклонения запроса демонстрируется обоснование необходимости данных разрешений.

После предоставления пользователем необходимых разрешений приложение копирует на внешний диск системы модули библиотеки Tesseract необходимые ей для распознавания текста на разных языках.

На рисунке 2 представлен краткий алгоритм работы в графическом виде.

Рис. 2. Алгоритм работы приложения при запуске

2.4.2 Пользовательская навигация

После успешного запуска приложения пользователь может приступать к взаимодействию с приложением. Логика организации разработанного приложения выполнена по модульной системе и состоит из нескольких вспомогательных модулей для обеспечения работы разных частей приложения, и базового модуля, представленного классом MainActivity, который отвечает за управление вспомогательными модулями и обеспечивает их загрузку и взаимодействие между собой. Элементы интерфейса базового модуля отображаются на протяжении всего жизненного цикла приложения и представлены боковым меню управления (navigation drawer). Пользователь может обращаться к данному меню в любой момент времени работы приложения за исключением времени запуска. На рисунке 3 представлен пользовательский интерфейс бокового меню.

Рис.3. Интерфейс бокового меню управления

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

1. Модуль сканирования и распознавания визитных карточек

2. Модуль отображения сохранённых контактов

3. Модуль общих настроек приложения.

Каждый из представленных модулей выполняет отдельную задачу и отображается на экране только во время работы пользователя с ним. Модули независимы друг от друга.

Рассмотрим каждый из этих модулей более подробно.

2.4.3 Модуль сканирования и распознавания визитных карточек

Данная часть приложения является основной с точки зрения пользовательского сценария. Представлена 2 основными классами: CameraFragment, RecognitionFragment, наследуемых от стандартного класса Fragment библиотеки Android и классом асинхронного выполнения CardProcessor, расширяющего стандартный класс AsyncTask. Также, во время работы модуль использует вспомогательный класс InitialEditingFragment. На рисунке 3 представлен краткий алгоритм работы модуля в графическом виде.

При запуске данного модуля первым инициализируется класс CameraFragment, который инкапсулирует в себе основную логику работы с камерой устройства. Для выполнения операций над встроенной камерой используется пакет android.hardware.camera2 [9]. С его помощью производится перехватывание видеопотока с камеры устройства для его отображения в контексте пользовательского интерфейса приложения, контроль фокусировки камеры, работы вспышки. По нажатию кнопки «Scan» производится сохранение текущего кадра в формате bitmap во временную папку на устройстве и посылается сигнал в главный класс MainActivity о готовности полученного изображения.

После получения сигнала MainActivity проверяет наличие у приложения доступа в интернет, выставляет онлайн или оффлайн режим работы в глобальных настройках приложения и меняет отображаемый на экране фрагмент на RecognitionFragment (код в приложении 1).

Данный класс отображает на экране индикатор загрузки и запускает асинхронный метод doInBackground класса CardProcessor для распознавания.

Рис. 4. Алгоритм работы модуля сканирования и распознавания визитных карточек

В начале работы данного класса проверяется режим работы данного приложения. Если интернет-соединение доступно, то выполняется запрос к облачному сервису Google Firebase ML Text Recognition для распознавания текста на сохранённом изображении. В случае, когда приложение работает в оффлайн-режиме, инициализируется модуль библиотеки Tesseract OCR для установленного в настройках языка. В результате распознавания обе библиотеки возвращают текстовое представление информации на изображении. Здесь начинается второй этап работы метода doInBackground класса CardProcessor - классификация текста. При наличии соединения с сетью формируется REST запрос к серверам Google Cloud Natural Language API. Полученный ответ будет представлять собой текст, классифицированный по категориям: человек, организация, страна, адрес и прочее. Номер телефона и адрес электронной почты на данный момент не определяется, поэтому для их классификации используется повторный анализ текста с помощью регулярных выражений. Пример регулярных выражений для обработки текста представлен на рисунке 5. В случае оффлайн режима производится только анализ текста регулярными выражениями из-за недоступности сервиса для онлайн-классификации.

Рис. 5. Регулярные выражения для распознавания адреса электронной почты и номера телефона в международном формате

По окончании процесса распознавания и классификации, полученная информация сохраняется в оперативную память приложения, после чего с помощью MainActivity вызывается следующий фрагмент: InitialEditingFragment.

Данный фрагмент представляет собой класс для работы с формой редактирования распознанной информации. Также в данном классе доступно две функции: экспорт информации в стандартную адресную книгу на устройстве и сохранение контакта в галерею приложения. Первая функция осуществляет заполнение запроса к адресной книге на устройстве с помощью стандартных средств системы Android (так называемый поставщик контактов). Вторая осуществляет сохранение информации контакта в локальную базу приложения.

После завершения работы модуль может быть перезапущен пользователем для распознавания новой визитной карточки путём перехода к данному модулю из бокового меню приложения. На рисунке 6 представлен пользовательский интерфейс данного модуля

Рис.6. Этапы работы модуля сканирования и распознавания визитных карточек в онлайн режиме

2.4.4 Модуль отображения сохранённых контактов

Данный модуль приложения организует работу с галереей сохранённых карточек в приложении и состоит из следующих основных классов: CardGalleryFragment и ContactInfoFragment и CardGalleryContent. Кроме того, используются вспомогательные классы ActionBarOverlay, CardLookup и CardsRecyclerViewAdapter для создания динамического списка элементов пользовательского интерфейса (в рамках данной работы - изображения карточки) и SavedCardEditingFragment для редактирования информации о карточке.

Инициализация данного модуля начинается с запуска фрагмента CardGalleryFragment (код приведён в приложении 2), который используется для работы со стандартным пакетом Android - RecyclerView. Данный пакет позволяет создать прокручиваемый на экране список однотипных элементов, сохранённых в классе, реализующем интерфейса Java - Collection. Фактически, данный пакет представляет реализацию для отображения списков элементов в графическом виде на экране. В приложении на базе данного пакета реализована возможность обновления списка при добавлении новых элементов, а также выбора уже существующих для совершения над ними операции удаления.

Однако, RecyclerView предоставляет только реализацию графического представления информации, хранящейся в приложении. Для программной работы с этой информацией используется класс CardGalleryContent, который представляет собой статический объект, в котором сохраняется список контактов и их данные (имя, телефон и так далее). Информация о каждом контакте хранится в двух представлениях: в оперативной памяти устройства для быстрого обращения к нему в программе и на внешнем носителе для восстановления списка после перезапуска приложения. Принцип долгосрочного хранения реализован следующим образом. При первом запуске галереи приложение создаёт в памяти устройства папку для хранения контактов. Каждому вновь созданному контакту присваивается уникальный строковый идентификатор, на основании которого генерируется два файла: один в формате JSON для сохранения метаданных о контакте и BMP файл изображения визитной карточки. При перезапуске приложения оно зачитывает файлы из данной папки и заполняет ими список элементов для отображения. Структура файлов, сохраняемых на устройстве, можно видеть на рисунке 7.

Последний из рассматриваемых классов - ContactInfoFragment используется для представления информации о контакте на экране. Переход к нему осуществляется при выборе пользователем конкретного элемента из списка элементов RecyclerView путём нажатия на него. Данный класс также обеспечивает возможность редактирования контакта и его импорта в стандартную адресную книгу устройства пользователя.

Рис.7. Структура организации хранения информации о контактах в памяти устройства

Рис.8. Интерфейс модуля отображения сохранённых контактов

Пользовательский интерфейс данного модуля представлен на рис. 8.

2.4.5 Модуль общих настроек приложения

Последний из рассматриваемых модулей приложения состоит из одного класса SettingsFragment, который использует API-интерфейсы Preference системы Android для построения интерфейса, согласованного с привычным для пользователей других приложений Android (включая системные настройки). Список настроек генерируется на базе специального XML-.файла

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

2.5 Дизайн пользовательского интерфейса приложения

При разработке мобильного приложения важную роль играет правильно выбранная концепция дизайна пользовательского интерфейса, которая определяет удобство взаимодействия пользователя с приложением. Приложение, созданное в рамках данной работы, было разработано с учётом официальной рекомендации от создателей платформы Android по использованию концепции «Material Design» в мобильных приложениях данной операционной системы [8].

В процессе разработки приложения была применена библиотека «android.material» которая позволила добиться единого вида элементов пользовательского интерфейса (кнопки, шрифты, цветовая гамма) во всех модулях приложения. Также были использованы такие концепции «Material Design» как боковое меню (navigation drawer) [13], список карточек (card view) [12], единое окно настроек (preferences settings screen) [10] и верхняя панель приложения (app bar) [11], что позволило упростить пользовательскую навигацию между различными функциями приложения.

Цветовая гамма приложения базируется на использовании трёх основных цветов: #ffffff, #01579b и #005f63.

2.6 Используемые шаблоны проектирования

Для упрощения процесса разработки и тестирования при создании приложения были применены некоторые шаблоны проектирования.

В основе архитектуры модуля отображения сохранённых контактов лежит использование паттерна «Модель-Представление-Контроллер» (Model-View-Controller, MVC). Данный паттерн предполагает разбиение всей логики приложения на 3 основные части:

ѕ модель: является основным представлением данных в системе, реализуется в классе CardGalleryContent, который хранит в себе информацию о контактах пользователя (сохранённых визитных карточках)

ѕ представление: отвечает за представление данных на экране пользователя, реализуется стандартными механизмами системы Android обеспечивая представление пользовательского интерфейса на экране на основе вёрсток в файлах формата xml, в том числе с помощью пакета RecyclerView

ѕ контроллер: содержит в себе бизнес-логику и отвечает за связь между моделью и представлением, в приложении реализован классом MainActivity для реализации задач навигации и переключения между набором классов, унаследованных от базового класса Fragment

При создании класса CardGalleryContent был применён шаблон Singleton (одиночка), данный класс инициализируется один раз при первом запуске модуля отображения сохранённых контактов и существует после этого на протяжении всего жизненного цикла приложения в единственном экземпляре, что позволило эффективно организовать обращения к данной модели из разных частей приложения и сняло проблему повторной инициализации базы данных.

Раздел 3

3.1 Тестирование приложения

Тестирование приложения осуществлялось в несколько этапов, проводимых по мере готовности приложения к финальной публикации:

ѕ модульное тестирование;

ѕ интеграционное тестирование;

ѕ системное(бета) тестирование.

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

3.1.1 Модульное тестирование

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

Для тестирования функций модуля сканирования и распознавания визитных карточек использовался набор из 10 фотографий визитных карточек на каждой итерации тестов. Фотографии выбирались произвольным образом из наборов картинок «Stanford Mobile Visual Search Data Set: Business Cards» [14] и Google Images. Пример тестов данного модуля приведён в приложении 3.

В модуле отображения сохранённых контактов проверялись следующие функции: добавление карточки, отображение списка, удаление карточки, редактирование карточки.

Для модуля настроек проверялась функция изменения настроек и их сохранения в памяти устройства.

Модульные тесты запускались после внесения каждого изменения в модуль. Тесты проводились в ручном режиме. При финальном проведении модульных тестов критических ошибок выявлено не было.

3.1.2 Интеграционное и системное тестирование

Интеграционное тестирование проводилось с целью проверки корректной взаимосвязи между различными модулями, а именно: время перехода из одного модуля в другой, правильность передаваемой информации, изменения пользовательского интерфейса при переходе, загрузка приложения, работа пользовательской навигации (бокового меню). Тестирование указанных проводилось каждый раз после добавления нового модуля в приложение или внесения изменений в систему навигации. Тесты проводились в ручном режиме, при финальном тестировании критических ошибок выявлено не было.

Системное тестирование проводилось на заключительной стадии разработки приложения на полной, интегрированной системе, с целью проверки соответствия приложения исходным требованиям. Приложение тестировалось третьими лицами на устройствах Xiaomi Redmi 2 (Android 8.0), Samsung Galaxy A50 (Android 9.0), Huawei P20 (Android 8.0). К проверке предлагались следующие сценарии:

ѕ использование приложения для распознавания карточек на английском и русском языке в онлайн режиме с сохранением информации о контакте в галерею приложения, редактирование информации о контакте в галерее, удаление контакта из галереи;

ѕ использование приложения для распознавания карточек на английском и русском языке в оффлайн режиме с экспортом информации о контакте в стандартную электронную адресную книгу устройства.

3.1.3 Итоги тестирования

По результатам финального тестирования были представлены следующие результаты:

ѕ приложение соответствует изначально заявленным требованиям:

o приложение корректно работает с русским и английским языком

o при работе в онлайн режиме корректно классифицируется от 75% до 90% информации

o при работе в оффлайн режиме корректно определяется от 60% до 75% номеров телефонов и адресов электронной почты

o критических проблем с отображением интерфейса приложения выявлено не было, дизайн, в целом, соответствует правилам «Material Design»

ѕ критических ошибок выявлено не было

ѕ получены отзывы по работе бета-версии приложения относительно удобства работы с интерфейсом, которые были учтены в финальной версии приложения

3.2 Описание стратегий дальнейшего развития приложения

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

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

Другим аспектом приложения, который может изменён при дальнейшем развитии является использование сторонних моделей для распознавания и анализа текста. Такой подход, безусловно, является преимуществом для небольших проектов и полностью отвечает требованиям, сформулированным в рамках данной исследовательской работы. Однако, по мере развития функционала приложения и увеличения пользовательской базы это может стать существенным ограничением. Поэтому разработка собственного подхода (создание модели нейронной сети) к распознаванию и классификации текста должна учитываться в процессе дальнейшего развития приложения.

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

сканирование визитный карточка интерфейс

Заключение

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

Практическим результатом данной исследовательской работы стало создание полностью работоспособного прототипа мобильного приложения для распознавания и классификации информации на визитных карточках. Приложение написано на базе платформы Android с использованием языка программирования Kotlin. Ознакомиться с исходным кодом разработанного в рамках данного проекта приложения можно на веб-сервисе GitHub в репозитории [16].

Представленное приложение является уникальным в своей сфере применения. Конкурентными преимуществами приложения, по сравнению с существующими в открытом доступе реализациями, является поддержка нескольких языков, возможность работы без соединения с сетью, а также пользовательский интерфейс, выполненный в соответствии с правилами документации концепта Material Design.

Проведённое экспериментальное тестирование прототипа программного продукта продемонстрировало стабильную работу приложения, его соответствие изначально заявленным требованиям, и позволяет говорить о готовности к размещению приложения в публичном доступе.

Таким образом, основываясь на результатах проделанной работы, можно утверждать, что цель исследования достигнута, все поставленные задачи выполнены в полном объёме.

Список литературы

1. Dale, R. Text analytics APIs, Part 1: The bigger players. / Dale, R. // Natural Language Engineering - 2018 - Volume 24, Issue 2 - 317-324p

2. Jing, Li. A Survey on Deep Learning for Named Entity Recognition / Jing Li, Aixin Sun, Jianglei Han, Chenliang Li // Cornel University Press - 2018.

3. Holley, R. Analysing and Improving OCR Accuracy in Large Scale Historic Newspaper Digitisation Programs. / R. Holley // D-Lib Magazine - 2009. - Volume 15. - №. 3/4.

4. Kapetanios, E. Natural Language Processing. Semantic Aspects. / E. Kapetanios // CRC Press - 2013. - 298p

5. RajithKumar B.K. (2018). Real-Time Input Text Recognition System for the Aid of Visually Impaired. / B.K. RajithKumar // Switzerland: Sprinkler Nature - 2018. - 147p

6. Verma, A. OCR - optical character recognition. / Verma A., Arora S., Verma P. // International Journal of Advance Research in Science and Engineering - 2016. - Issue 9

7. Walker J.A Web-Based OCR Service for Documents. / Walker J., Fujii Y., Popat A.C. // 13th IAPR International Workshop on Document Analysis Systems. 21-23p. Vienna. 2018.

8. Design for Android

9. Documentation for android.hardware.camera2

10. Material Design. Android settings

11. Material Design. App bars: top

12. Material Design. Material Card

13. Material Design. Navigation Drawer

14. Stanford Mobile Visual Search Data Set: Business Cards

15. StatCounter. Mobile Operating System Market Share Worldwide

16. Репозиторий с открытым кодом

Приложение 1

Код класса RecognitionFragment

class RecognitionFragment : Fragment() {

private lateinit var attachedActivityContext: Context

private lateinit var activity: MainActivity

private var applicationTag = "RecognitionFragment"

private lateinit var previewBitmap: Bitmap

override fun onAttach(context: Context) {

super.onAttach(context)

if (context is MainActivity) {

attachedActivityContext = context

activity = attachedActivityContext as MainActivity

} else {

Log.e(applicationTag, "Cannot attach fragment to activity")

}

}

override fun onCreateView(

inflater: LayoutInflater, container: ViewGroup?,

savedInstanceState: Bundle?

): View? {

val view = inflater.inflate(R.layout.recognition_fragment, container, false)

val bitmapFile = activity.openFileInput(BITMAP_TMP)

previewBitmap = BitmapFactory.decodeStream(bitmapFile)

val task = CardProcessor(attachedActivityContext, previewBitmap)

task.execute()

return view

}

}

Приложение 2

Код класса CardGalleryFragment

class CardGalleryFragment : Fragment() {

private var listener: OnListFragmentInteractionListener? = null

override fun onCreateView(

inflater: LayoutInflater, container: ViewGroup?,

savedInstanceState: Bundle?

): View? {

val view = inflater.inflate(R.layout.card_list_fragment, container, false)

// Set the adapter

if (view is RecyclerView) {

with(view) {

layoutManager = LinearLayoutManager(context)

adapter =

CardsRecyclerViewAdapter(CardGalleryContent.ITEMS, listener)

(adapter as CardsRecyclerViewAdapter).tracker = setupTracker(view)


Подобные документы

  • Необходимость в системах распознавания символов. Виды сканеров и их характеристики. Оптимальное разрешение при сканировании. Программы распознавания текста. Получение электронного документа. FineReader - система оптического распознавания текстов.

    презентация [469,2 K], добавлен 15.03.2015

  • Методы предобработки изображений текстовых символов. Статистические распределения точек. Интегральные преобразования и структурный анализ. Реализация алгоритма распознавания букв. Анализ алгоритмов оптического распознавания символов. Сравнение с эталоном.

    курсовая работа [2,1 M], добавлен 20.09.2014

  • Анализ российского рынка мобильных приложений. Мобильное приложение как новый канал коммуникации с целевой аудиторией. Этапы создания мобильного приложения. План продвижения мобильного приложения в сети Интернет. Бесплатные инструменты продвижения.

    дипломная работа [1,6 M], добавлен 23.06.2016

  • Оптическое распознавание символов как механический или электронный перевод изображений рукописного, машинописного или печатного текста в последовательность кодов. Компьютерные программы для оптического распознавания символов и их характеристика.

    презентация [855,2 K], добавлен 20.12.2011

  • Разработка приложения для проверки использования времен глаголов в английском языке. Создание базы данных. Анализ используемых средств для реализации автоматического разбора текста. Проектирование мобильного приложения с помощью диаграмм деятельности.

    дипломная работа [2,6 M], добавлен 13.09.2017

  • Обзор подходов к разработке музейных приложений с элементами дополненной реальности, формирование требований к ним. Выбор методов разработки приложения, разработка пользовательского интерфейса. Принципы тестирования. Реализация раздела "Распознавание".

    дипломная работа [2,8 M], добавлен 03.07.2017

  • Первое систематическое изучение искусственных нейронных сетей. Описание элементарного перцептрона. Программная реализация модели распознавания графических образов на основе перцептрона. Интерфейс программы, основные окна. Составление алгоритма приложения.

    реферат [100,5 K], добавлен 18.01.2014

  • Разработка программного решения по созданию мобильного приложения. Изучение технологий для разработки приложений. Анализ работы торговых агентов. Обоснование выбора языка программирования. Проектирование интерфейса структуры и верстка, листинг программы.

    дипломная работа [2,2 M], добавлен 08.06.2017

  • Современное состояние рынка мобильных приложений. Основные подходы к разработке мобильных приложений. Обоснование выбора целевой группы потребителей приложения. Этапы проектирования и разработки мобильного приложения для операционной системы Android.

    курсовая работа [987,1 K], добавлен 27.06.2019

  • Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.

    курсовая работа [1,6 M], добавлен 19.04.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.