В силу вышеперечисленных недостатков первого метода, в настоящее время всё больше применение находит второй подход, который базируется на применении нейронных сетей. Алгоритм работы данного метода схож с алгоритмом для оптического распознавания символов на основе нейронных сетей упомянутом ранее в разделе 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 о готовности полученного изображения.