- PVSM.RU - https://www.pvsm.ru -
Для людей, которые интересуются компьютерным зрением и дополненной реальностью применительно к мобильным устройствам, но не знающих, с чего начать.
Итак, мы студенты математико-механического факультета СПбГУ, которые на досуге решили ознакомиться с базовыми аспектами компьютерного зрения. Для закрепления теоретических основ решили делать что-то практическое. Посещение наших крайне интересных лекций натолкнуло на мысль о приложении, позволяющем скидывать бомбы на людей в дополненной реальности.
В качестве мобильной платформы был выбран Android, так как имелся небольшой опыт написания приложений под него, и Java мы знаем гораздо лучше, чем Objective-C. Для обработки изображений мы решили использовать известную библиотеку OpenCV [1].
Под катом история создания нашего простенького приложения.
Условно их можно разделить на три категории:
И это, в общем-то, всё, что можно найти на Google Play.
Проще всего начинать знакомство с компьютерным зрением, используя библиотеку OpenCV. Мы рекомендуем книгу O’Reilly “Learning OpenCV” (есть на рутрекере). Также нужно будет часто заглядывать на Wiki разработчиков [5].
Собственно, что же нам предстояло сделать? Прежде всего, нам нужно было выделять на картинке объекты, о которые может взорваться бомба. Мы решили использовать следующий подход: искать движущиеся объекты и проверять столкновения с ними. Это можно делать довольно быстро, что очень важно, так как ресурсы мобильных устройств ограничены.
Что же мы придумали? Брать несколько ключевых точек на одном кадре и смотреть, где они окажутся на следующем. Затем считать их сдвиг и распределять по кластерам, которые бы представляли собой объекты. Фоном можно считать кластер с наибольшей площадью (либо с наибольшим количеством точек, но от этого подхода мы в результате отказались).
Для определения сдвига ключевых точек мы решили использовать алгоритм Лукаса-Канада (Lucas-Kanade method [6]). На вход ему нужны две картинки и массив точек с первой из них, а на выходе получается массив с этими же точками, но уже найденными на второй картинке. Как раз то, что нам нужно, и работает достаточно быстро.
Для поиска ключевых точек в данном случае хорошо подходит метод goodFeaturesToTrack(…). Как можно догадаться по названию, он ищет фичи (ключевые точки, отличающиеся от остальных по определенному критерию), которые можно легко прослеживать от кадра к кадру. Он работает медленнее, чем простой поиск фич, зато точность вычисления сдвигов становится больше.
Обработка изображений требует серьезных вычислительных мощностей. Наше приложение работает хорошо даже на устройствах, сопоставимых по производительности с Acer Liquid (768 MHz). Для большинства же выпускаемых сейчас устройств вполне реально сделать и что-то более сложное.
Кроме того, как Вы видите, в компьютерном зрении нет ничего сложного, а в данный момент приложений с дополненной реальностью под Android практически нет, так что дерзайте!
P. S. Если интересно, результат можно посмотреть тут [7].
Автор: EmoCoder
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/android/10320
Ссылки в тексте:
[1] OpenCV: http://code.opencv.org/projects/opencv/wiki/OpenCV4Android
[2] пример: https://play.google.com/store/apps/details?id=com.agi.android.augmentedreality
[3] пример: https://play.google.com/store/apps/details?id=com.BeyondReality.AC130
[4] пример: https://play.google.com/store/apps/details?id=nl.tjerk.weapons3dpro
[5] Wiki разработчиков: http://code.opencv.org/projects/OpenCV/wiki/WikiStart
[6] Lucas-Kanade method: http://en.wikipedia.org/wiki/Lucas%E2%80%93Kanade_method
[7] тут: https://play.google.com/store/apps/details?id=com.fancysoftware.cvbombs.free
Нажмите здесь для печати.