Разработка мобильного приложения

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

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

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

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

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

2.4 Обзор библиотеки дополненной реальности Vuforia

Vuforia - комплект для разработки программного обеспечения дополненной реальности (SDK) для мобильных устройств, который позволяет создавать приложения Augmented Reality (дополненной реальности). Он использует технологию компьютерного зрения для распознавания и отслеживания планарных изображений (целевых изображений) и простых 3D-объектов, таких как коробки, в режиме реального времени. Возможность создавать собственные метки из картинок позволяет разработчикам позиционировать и ориентировать виртуальные объекты, такие как 3D-модели и другую информацию, по отношению к изображениям реального мира, когда они просматриваются через камеру мобильного устройства. Затем программа отслеживает положение и ориентацию целевого изображения (метки) в режиме реального времени и соответствующе изменяет положение и размеры виртуального объекта, чтобы перспектива этого объекта соответствовала виду зрителя, так чтобы казалось, что виртуальный объект является частью сцены реального мира.

Vuforia SDK поддерживает множество типов 2D и 3D-мишеней, включая «безмаркерные» целевые изображения, трехмерные маркеры. Дополнительные возможности SDK включают локализованное обнаружение меток, которые частично скрыты. Рассмотрим все возможности библиотеки Vuforia:

· Object Recognition - распознавание сложных объемных объектов позволяет обнаруживать и отслеживать 3D-объекты. Такая функция была разработана для работы с игрушками (такими как фигурки и игрушечные машины) и другими потребительскими товарами. Разработчик может создать свою метку (трехмерный объект для распознавания) с помощью Vuforia Object Scanner, то есть просканировав настоящие физические объекты;

· Image Targets - позволяет создавать метки для распознавания из обычных изображений, при условии, что они достаточно детализированы. SDK находит ключевые регионы изображения, которые возможно эффективно распознать. Как только созданная ранее метка обнаружена, программа будет отслеживать изображение до тех пор, пока частично находится в поле зрения камеры;

· User-Defined Images - пользовательские цели (метки), то есть механизм, позволяющий любому пользователю приложения, разработанного с использованием User-Defined Images, создавать свои собственные метки в режиме реального времени. Для этого достаточно сфотографировать желаемую метку. Данный механизм используется в разрабатываемом приложении;

· Cylinders - распознавание ранее созданных меток, «накрученных» на объекты цилиндрической или канонической формы. Например, приложение, использующее данную технологию, может распознать алюминиевую банку газировки и позиционировать относительно нее различные 3D-объекты;

· Text - распознавание слов, которые включены в специальный список для распознавания. Стандартный список включает в себя более 100 000 английских слов (написанных на латинице), но также можно создавать и свои словосочетания. Также программа способна распознавать слова, написанные разным шрифтом;

· Boxes - механизм распознавания объёмных объектов разной формы, чаще всего прямоугольной (коробки, квадраты). Можно задавать определенные метки каждой стороне этого объекта, что способствует хорошему распознаванию. После задания меток каждой грани, объект будет распознаваться со всех сторон;

· VuMarks - штрих код следующего поколения, который предоставит в будущем свободу для создания индивидуального дизайна, ориентированного на определенный бренд, одновременно кодируя специализированные данные и действуя как метка для дополненной реальности.

Все постоянные метки, то есть такие, которые предназначены для определенного приложения, создаются на облачном сервисе Vuforia Target Manager. Для коммерческого использования разработчику предлагается приобрести лицензию, чтобы использовать все преимущества Vuforia в своем приложении, но для образовательных целей компания PTC предлагает бесплатно пользоваться их продуктом.

Vuforia предоставляет интерфейсы прикладного программирования (API) в C++, Java, Objective-C ++ (язык, использующий синтаксис C ++ и Objective-C), и языки. Net через расширение игрового движка Unity. Таким образом, SDK поддерживает как собственную разработку для iOS и Android, так и разработку AR-приложений в Unity, которые легко переносимы на обе платформы. Из этого следует, что AR-приложения, разработанные с использованием Vuforia, совместимы с широким спектром мобильных устройств, включая iPhone, iPad и Android-смартфоны и планшеты, работающие под управлением ОС Android версии 2.2 или выше [18].

3. Особенности реализации

При разработке системы, которая была бы способна распознавать планировки квартир от любого застройщика и строить по ним 3D-модели, были обнаружены следующие проблемы:

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

· на планировках чаще всего изображают не связанные с расположением стен и комнат объекты, такие как раковины, газовые плиты, унитазы и ванны. Это уменьшает точность распознавания;

· создание меток из планировок, которые должны быть обработаны и по которым требуется создание 3D-модели;

· создание трехмерной модели, которую в дальнейшем возможно было бы изменять в сторонних 3D-редакторах.

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

3.1 Архитектура разрабатываемого приложения

Разрабатываемое приложение не использует никаких сетевых модулей для передачи данных, оно полностью выполняется на мобильном устройстве. Приложение является программным обеспечением для операционной системы Android. Как уже говорилось, приложение использует три основных модуля:

· модуль распознавания;

· модуль создания меток и сам механизм дополненной реальности;

· модуль трехмерной графики.

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

Инструментарий разработчика Vuforia выступает в приложении в качестве модуля для создания эффекта дополненной реальности. Благодаря ему создается эффект привязки полученной 3D-модели к планировке на изображении с камеры.

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

3.2 Структура разрабатываемого приложения

Разрабатываемое приложение состоит из нескольких окон (Activity):

· activity просмотра изображения с камеры устройства для захвата планировки и просмотра полученной модели в дополненной реальности;

· activity результатов распознавания;

· activity для просмотра полученной трехмерной модели в режиме дополненной реальности.

Рассмотрим ключевые классы и их предназначение в приложении:

· UserDefinedTargets - класс, который предоставляет функции создания эффекта дополненной реальности и захвата изображения. Он наследует класс Activity и представляет из себя окно (Activity) для просмотра изображения с камеры устройства и дополненной реальности;

· Detection - класс, в котором реализован механизм распознавания планировок квартир и создания трехмерных моделей. Также в нем реализована функция для сохранения;

· ModelBuilder - класс, в котором происходит удаление лишних частей трехмерной модели, то есть лишних точек;

· ModelShape - класс, в котором реализован просмотр полученной модели в отдельном окне (Activity).

3.3 Механика разрабатываемого приложения

Механика работы разрабатываемого приложения следующая:

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

2. Следующим шагом он наводит камеру своего мобильного устройства на планировку, изображенную на листе бумаги;

3. Далее пользователь ждет пока камера его устройства поймает «фокус» и изображение на экране будет не размытым и четким;

4. После этого он должен нажать на кнопку, которая в свою очередь запустит механизм распознавания и построения 3D модели макета квартиры. Вместе с этим происходит создание метки для позиционирования виртуальной модели квартиры в дополненной реальности;

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

3.4 Описание алгоритма распознавания разрабатываемого приложения

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

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

Рисунок 2. Исходное изображение планировки

В ходе изучения возможностей библиотеки OpenCV было решено использовать метод поиска замкнутых контуров findContours для нахождения положения стен квартиры. Для реализации данного метода нужно использовать восьмибитное изображение (каждый пиксель кодируется 8 битами) - то есть черно-белое изображение планировки. Чтобы получить черно-белое изображение из цветного использовался метод cvtColor. Далее, алгоритм расходится на две ветви: для планировок, стены на которых были изображены штриховой и черной жирной линией. Для того чтобы определить положение стен, изображенных штриховой линией, использовался специальный алгоритм для улучшения изображения и удаления лишний деталей.

Рассмотрим, что происходит с изображением, если требуется распознать планировку с штриховыми линиями, которые показывают расположение стен. Вначале полученное из метода cvtColor черно-белое изображение с помощью метода adaptiveThreshold делается инверсным и каждый пиксель подвергается сравнению с определенным порогом, в результате которого пиксель становиться либо полностью белым, либо полностью черным. Далее применяется функция delite, которая позволяет с маской определенных размеров увеличить количество определенных пикселей, значения которых близки к среднему максимуму в пределах маски. После применения данного метода изображение становится более насыщенным и все его элементы выделяются сильнее белым цветом. Далее с изображением работает метод morphologyEx, который убирает «черный шум» со всех белых линий изображения, для того, чтобы стены выделялись на фоне остальных дополнительных элементов планировки. После этой операции, алгоритм снова становится единым, как для стен исполненных штриховой линией, так и для стен, которые изображены черной сплошной линией.

Чтобы в область распознавания не попало ничего лишнего, кроме самой планировки, используется метод для нахождения замкнутых контуров, а именно findContours. Следует отметить, что данной процедурой можно пренебречь, так как на вход данного метода принимаются только двух цветное изображение, которое получается из исходного, методом Canny, и он не всегда срабатывает корректно. Для того, чтобы «найти» планировку квартиры на изображении используется метод нахождения самого большого контура изображения, так как при фотографировании планировки квартиры вся квартира и будет являться самым большим контуром. Это происходит простым перебором всех распознанных контуров. После нахождения требуемого контура происходит заливка черным цветом всей остальной части изображения, чтобы лишние компоненты не мешались при распознавании стен.

Непосредственно после этого к изображению применяются методы распознавания стен, опять же разные для каждого вида стен. Для распознавания стен, изображенных штриховой линией использовался метод wallDetector_hatch, а для стен, изображенных сплошной черной линией - wallDetector_solid. В первом с помощью метода getStructuringElement из изображения были «выдернуты» все прямоугольные тонкие линии, которые и являются искомыми стенами. Полученное новое изображение было помещено в экземпляр класса Mat под названием walls. Второй же метод более сложный так как сначала распознает стены изображенные сплошной линией, а затем с помощью маски закрашивает черным цветом те места, которые не являются стенами на исходном изображении. Благодаря этому приему, с полученного изображения (которое передается в экземпляр класса Mat walls) убираются лишние детали, которые не должны быть приняты в качестве стен.

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

Рисунок 3. Промежуточный результат выполнения алгоритмы программы

Далее опять же с помощью уже упоминавшегося метода findContours программа находит все контуры полученного на предыдущем шаге изображения. В результате все найденные замкнутые контуры будут соответствовать расположению всех стен в заданной планировке. Но полученные контуры будут состоять из большого количества точек. Это ведет к неточностям при построении 3D-модели, так как плоскость стены возможно будут получаться неровной, что не соответствует исходной планировке. Для этого используется метод contours_points класса ModelBuilder. Он удаляет лишние точки контура для достижения более правдивого результата построения трехмерной модели. Удаляются только те точки, угол между которыми больше 115 градусов.

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

В итоге все полученные точки контуров помещаются в список списков Point - counter_wall, то есть в нем хранятся списки типа Point (тип данных который хранит координаты точек, имеет атрибуты x и y), которые соответствуют разным контурам. Имея все точки в таком списке легко составить массив, который содержит X- и Y-координаты вертексов искомой 3D-модели. Z-координата приравнивается к определенному статическому значению, которое обозначает высоту выдавливания, оно не меняется от планировки к планировке.

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

Для распознавания дверных проемов на планировке, в приложении создан метод под названием doorDetector, который использует встроенные алгоритмы OpenCV. В этом методе используется прием поиска по шаблону под названием matchShapes. Он сравнивает не пиксели изображения, а его контуры. Другими словами, в разрабатываемом приложении хранится шаблон дверного проема, чтобы производить сравнивания с контурами изображения. Он изображен на рисунке 4.

Рисунок 4. Шаблон для поиска дверных проемов

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

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

На рисунке 5 изображен весь алгоритм распознавания стен планировки.

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

Рассмотрим, как строится конечная 3D-модель квартиры. Имея массив точек verts и массив нормалей normals, передавая их в класс ModelShape, который наследует GLSurfaceView. Renderer можно легко отобразить полученную модель на экране мобильного устройства. Это становится возможным из-за того, что точки в массиве verts идут в следующем порядке: сначала координата x, потом y и соответственно z. То есть каждые три последовательных элемента массива описывают один вертекс. Девять идущих друг за другом элементов - описывают один треугольник, и так далее. Массив составлен таким образом, что все его числа будут описывать целиком выходную трехмерную модель квартиры. Массив нормалей описывает нормализованные векторы для каждого вертекса. Это нужно в первую очередь для расчета цвета каждого треугольника, для более реалистичного восприятия.

Для того чтобы сохранить полученную трехмерную модель квартиры в популярном формате «STL» нужно просто записать в текстовый файл координаты полигонов в соответствующем порядке. Рассмотрим структуру, которой должен соответствовать файл «STL». Всегда в начале такого файла должен идти заголовок, состоящий из 80 байт, затем количество треугольников (полигонов) - целое число (Int). Далее каждый треугольник описывается двенадцатью 32 битными числами с плавающей запятой: 3 числа для нормали и по 3 числа на каждую из трёх вершин для X/Y/Z координат. После этого в файле должны идти 2 байта беззнакового «short».

4. Работа приложения и апробация

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

Рисунок 6. Исходные изображения планировок

Для корректной работы приложения пользователь должен поднести телефон в портретном режиме к планировке, напечатанной на листе бумаги. После этого пользователь дожидается, когда изображение на экране станет четким, то есть когда камера «поймает» фокус. Также перед непосредственным распознаванием нужно выбрать метод распознавания в зависимости от типа стен, изображенных на планировке. Затем пользователь должен нажимать на кнопку распознавания. Сам процесс распознавания занимает определенное количество времени: от 15 до 30 секунд. Это связано с тем, что для работы метода findContours требуется много расчетов и работы с памятью.

На рисунке 7 показан результат распознавания двух различных планировок. Здесь зеленым цветом обведены контуры распознанных стен, что на самом деле соответствует действительности. Желтым цветом показано месторасположение оконных проёмов, что также соответствует планировкам. Красным же цветом изображены дверные проемы. Следует отметить, что данные планировки отличаются стандартами изображения, но алгоритм распознавания для них работает практически идентично.

Рисунок 7. Результат распознавания

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

Рисунок 8. Полученные 3 - модели в дополненной реальности

На рисунке 9 показан вид (Activity) приложения на котором пользователь может просматривать полученную трехмерную модель квартиры в виртуальном пространстве. Пользователь может вращать и масштабировать 3D-модель, чтобы рассмотреть все ее детали. В сцену добавлен источник света, который вращается по часовой стрелке на некоторой высоте от модели для того, чтобы пользователь смог лучше видеть расположение стен в квартире.

Рисунок 9. Полученные 3 - модели в отдельном Activity

Как уже упоминалось в приложении есть возможность сохранять полученную модель в формате «STL». На рисунке 10 изображен вид получившейся модели квартиры в 3D-редакторе 3ds Max.

Рисунок 10. Полученные 3 - модели в отдельном Activity

Заключение

В ходе данной работы был разработан программный продукт, который способен распознавать планировки квартир и строить по ним трехмерные модели. Разработанное приложение предназначено в первую очередь для мобильных устройств на базе Android. В работе представлен алгоритм распознавания планировок квартир, а именно стен, оконных и дверных проемов. В ходе работы был произведен анализ инструментов для разработки приложений для операционной системы Android, также был сделан обзор и анализ самых популярных библиотек компьютерного зрения. В ходе работы также были рассмотрена популярные и важные методы компьютерного зрения библиотеки OpenCV. В работе содержится анализ библиотеки OpenGL для создания трехмерной графики на мобильных устройствах. Был произведен эксперимент, который подтвердил работоспособность алгоритма распознавания планировок квартир, полученные 3D-модели удалось открыть и редактировать во всех популярных 3D-редакторах.

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

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

Литература

1. Audi A4 VR Experience - магазин приложений Google Play [Электронный ресурс]. URL: https://play.google.com/store/apps/details? id=nl.viemr.audi&hl=ru (дата обращения 01.04.2017).

2. Szeliski R. Computer Vision: Algorithms and Applications - Lake Wenatchee: Springer, 2010. - 957 с.

3. Schmalstieg D., Hцllerer T. Augmented Reality: Principles and Practice - Addison-Wesley, 2016 - 496 c.

4. Линовес Д. Виртуальная реальность в Unity. / Пер. с англ. Рагимов Р.Н. - М.: ДМК Пресс, 2016. - 316 с.

5. iOS and Android Capture Combined 98.4% Share of Smartphone Market [Электронный ресурс]. URL: https://www.macrumors.com/2016/02/18/ios-android-market-share-q4-15-gartner/ (дата обращения: 01.04.2017).

6. Murphy M.L. The Busy Coder's Guide to Android Development - CommonsWare, 2011.

7. Burnette E. Hello, Android: introducing Google's mobile development platform. - Pragmatic Bookshelf, 2009. URL: http://dl.acm.org/citation.cfm? id=1816808 (дата обращения 20.04.2017).

8. Getting Started with the NDK [Электронный ресурс]. URL: https://developer.android.com/ndk/guides/index.html (дата обращения 21.04.2017).

9. The Standard for Embedded Accelerated 3D Graphics [Электронный ресурс]. URL: https://www.khronos.org/opengles/ (дата обращения 21.04.2017).

10. Bradski G., Kaehler A. Learning OpenCV: Computer Vision with the OpenCV Library - O'Reilly Media, 2008 - 555 c.

11. Vuforia Developer Portal [Электронный ресурс]. URL: https://developer.vuforia.com/ (дата обращения 21.04.2017).

12. Android Studio The Official IDE for Android [Электронный ресурс]. URL: https://developer.android.com/studio/index.html (дата обращения 22.04.2017).

13. IntelliJ IDEA [Электронный ресурс]. URL: https://www.jetbrains.com/idea/? fromMenu (дата обращения 22.04.2017).

14. Mobile App Development & App Creatin Software [Электронный ресурс]. URL: https://www.xamarin.com/ (дата обращения 22.04.2017).

15. Основы создания приложений [Электронный ресурс]. URL: https://developer.android.com/guide/components/fundamentals.html? hl=ru (дата обращения 01.05.2017).

16. STARTANDROID. OpenGL. Камера [Электронный ресурс]. URL: http://startandroid.ru/ru/uroki/vse-uroki-spiskom/403-urok-173-opengl-kamera.html (дата обращения 03.05.2017).

17. About - OpenCV library [Электронный ресурс]. URL: http://opencv.org/about.html (дата обращения 03.05.2017).

18. Vuforia | AR features [Электронный ресурс]. URL: https://www.vuforia.com/Features (дата обращения 05.05.2017).

Размещено на Allbest.ru

...

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

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