|
Персональные инструменты |
|||
|
На пороге дополненной реальности: к чему готовиться разработчикам (Андрей Бибичев на ADD-2010)Материал из CustisWiki(перенаправлено с «213-Waiting-Augmented-Reality-add-2010»)
Короткая ссылка: 213-Waiting-Augmented-Reality-add-2010 СодержаниеАннотацияАндрей Бибичев, сейчас разрабатывающий в компании iPiSoft, как модно говорить, инновационно-прорывной продукт в области машинной графики и обработки видео, продукт, который сделает общедоступной технологию Motion Capture, выступил с докладом «На пороге дополненной реальности: к чему готовиться разработчикам».Взаимодействие человека с цифровым миром претерпевает серьезные изменения прямо здесь и прямо сейчас: не успели до конца осознать чем нам, как разработчикам, грозит приход multi-touch устройств ввода, как на дворе мода на 3D-видео, а в двери во всю стучится новый тренд — дополненная реальность (Augmented Reality). В докладе после краткого экскурса в историю будет рассмотрено текущее состояние дел в освоении дополненной реальности:
За каждой из технологий стоят определенные алгоритмы и области Computer Science. Чтобы создавать успешные приложения такого класса, надо в них если и не досконально разбираться, то хотя бы ориентироваться. Для примера в докладе достаточно подробно рассмотрены вопросы обработки данных поступающих с гироскопов и акселерометров. Несмотря на кажущуюся простоту, даже здесь есть трудности и место не совсем банальной математике. Остальные алгоритмы будут рассмотрены поверхностно и сильно упрощенно, но со ссылками где и что можно почитать дополнительно.
Видео
Подкаст
Стенограмма
WTF?Здравствуйте, меня зовут Андрей, я вам хочу немножко рассказать про дополненную реальность. Доклад слегка перемешанный, отчасти популисткий, отчасти в нем есть элементы чего-то серьезного, но в целом легковесный доклад. Собственно говоря, сейчас дополненная реальность или Augumented Reality это такой вот buzz-word, его всюду слышите, «А-а-а, дополненная реальность, дополненная реальность», возникает вопрос — «Что это?». Самое банальное объяснение — это Терминатор, где он смотрит на наш мир своими глазами, и ему, к информации, которая просто картинка нашего мира, добавляется некоторая дополнительная, весьма содержательная — «Subject Unknown»... Мда, это та самая фаза, в которой Augumented Reality на данный момент и находится. Пока, зачастую такая вот «полезная» информация и добавляется. То есть это то, когда вы, нашему окружающему миру хотите добавить какую-нибудь дополнительную информацию. Мы все под впечатлением от недавнего чемпионата по футболу. Дополненная реальность уже применяется и на телевидении: например, когда вдруг начинают проводить как в офсайде мяч улетел. А хоккей даже невозможно смотреть: там шайбу подсвечивают, чтобы приковать к телевизору. Есть на самом деле значительно более интересные приложения, это развитие навигационных систем, всем уже надоело смотреть на карту и пытаться сообразить, куда же и как поворачивать. Лучше показывать изображение улицы, и прямо поверх изображения показывать маршрут, чтобы вы очень легко сопоставляли то, что вы видите, с тем, что вам подсказывает компьютер. Пока конечно, все это работает поверх Street View, но это в общем и целом достаточно неплохо, хоть это и не живая картинка с вашей камеры. Здесь пример видео, когда ребенок подносит коробку, камера снимает коробку и собственно говоря, ребенок видит на экране поверх этой коробки картинку, модельку, которую предлагается ему собрать, и купить.
Достаточно интересное применение. Если вы загуглите дополненную реальность, вы найдете какие-нибудь такие картинки, когда есть какая-то метка, и поверх нее какую-нибудь трехмерная картинка, зачастую это какие-то бестолковые демонстрации. Непонятно, зачем это в жизни, в отличие от коробки с конструктором, но вот, в основном все вот этим балуются. Этот подход, когда у вас есть какая-то камера, и она снимает картинку, вы ее хитро, или нехитро анализируете, и на основании этого, что-то поверх этой картинки рендерите. Есть другой подход. Сейчас много мобильных устройств, и эти устройства стали пичкать мало того, что камерами, к ним уже привыкли все, смирились, стали комплектовать интересными всякими дополнительными штуками. Например, компасом электромагнитным, акселерометром.
На самом деле, все эти штуки помогают понять одну замечательную вещь — как ваше устройство ориентировано в пространстве. Где оно находится и как оно ориентировано. Соответственно, плюс у вас есть видеокамера и плюс экран, на котором все это можно показывать. После этого вы как бы сквозь камеру смотрите на какой-то объект, из-за того, что можно вычислить, куда конкретно у вас направлен телефон, можно сообразить, какой там объект, если вы знаете GPS-координаты объекта, и собственно говоря, вывести поверх картинки какую-то информацию, что это такой-то памятник, или такая-то развалина. Это то, что сейчас достаточно модно, есть приложения на базе Google Maps-ов, и тому подобного, для мобильных телефонов, которые жрут трафик, мобильные операторы рады. Например, какой-нибудь крупный градоначальник («казалось бы причем тут Лужков» ©), хочет посмотреть, как будет выглядеть какая-нибудь будущая гостиница или еще что-нибудь. Наводит на это место города свое устройство, и ему прямо там, поверх этой картинки отрендеривается. Вот, что например, можно придумать и дорого продать московским властям. Этот подход устроен на немного другом механизме, здесь вам скорее всего о картинке знать ничего и не надо, главное, чтобы она была и поступала, здесь вы анализируете, как у вас расположена и ориентирована камера относительно нашей матушки-Земли. AR vs. VRВозникает резонный вопрос: как это соотносится с виртуальной реальностью, которой уже двадцать лет в обед? Если «классика» дополненной реальности — это «Терминатор», то классика виртуальной реальности, — фильм «Газонокосильщик». Ему очень много лет уже, помню в школе смотрел, и там качество рендеринга примерно такое. У нас всех виртуальная реальность ассоциируется с какими-то шлемами безумными, такая вот штука. Если говорить серьезнее, у нас ведь такая, почти научная конференция, обязательно нужны диаграммы… И если виртуальная реальность — это в основном какой-то генерированный контент, и немножко берется из нашего мира — они вот перчатки приспособили на руки, еще что-то, но основной упор был именно на генерацию. То дополненная реальность — это все-таки наоборот, когда мы берем что-то из нашего реального мира и пытаемся его чем-то полезным дополнить из нашего цифрового мира. Но намного интересней другое различие. Вот у нас есть компьютер, есть какие-то устройства ввода, и обработки этого ввода. Есть устройства вывода и соответственно рендеринг и подготовка данных для них. Виртуальная реальность и все инновации в ней касались в основном рендеринга и устройств вывода. Собственно они сейчас продолжаются, сейчас всплеск 3D. То дополненная реальность, так получилось, она больше об устройствах ввода, и о том, как его обрабатывать, про новые устройства ввода и алгоритмы обработки. A LA HISTORYДавайте быстро пробежимся по краткой истории. Везде здесь даты, когда это пошло в массы. Очень многие разработки придуманы раньше, намного раньше, чем это действительно стало использоваться.
Дальше великая инновация — это, собственно, мышка. И первым, ее не Apple применил в массовом производстве, а собственно сам Xerox, в 1981 году у них вышел Star Mouse. Вот слева, собственно, она, а справа — современная. Т.е. вы видите, что прогресс за это время не очень сильно ушел. Прошло целых десять лет, в процессе которых ничего не происходило, стали появлятся вебкамеры, на мышке появился скролл, который упростил нам жизнь в интернете, это очень существенная инновация в устройствах ввода. Прошло еще десять лет, и сейчас мы наблюдаем бум. Сначала пошли в ширпотреб мультитачи с яблокофонами. Потом в 2007 появился WiiMote, в который воткнули акселерометр, и попытались приспособить к играм. Получилось, что только акселерометр — это плохо, приделали к нему добавочку, к низу подключается, и туда встроили еще гироскоп (WiiMotion+). Прямо сейчас выходит куча смартфонов, куда все это встроено сразу — гироскоп, акселерометр, GPS, видеокамера. Вот здесь для примера яблокофон последний, но куча телефонов на базе Андроида, они упичканы совершенно так же. И что происходит прямо сейчас? Выходит Sony Move, вот прямо сейчас его уже можно начинать покупать. Интересное устройство. Некоторые считают, что Sony Move, это такой вот Wiimote, только в высоком качестве, но у него есть несколько забавных, полезных фич, о которых мы поговорим. Он рвет многое. Вот, собственно говоря, презентация Sony Move, давайте посмотрим чуть-чуть отрывок. Это гаджет к плейстешну, но даже сами разработчики говорят, что они его используют на PC, чтобы 3D MAXе в пространстве двигать объекты.
Это устройство, которое снабжено акселерометром, гироскопами, и магнитным компасом, и плюс еще светящимся шариком, по которому можно отслеживать его положение в пространстве. Получается очень хорошее отслеживание вашей кисти руки, так что у вас вполне работоспособный User Experience получается. Мощная штука, хоть кажется и простой. Ну и конечно, самое нашумевшее, это микрософтовский Kinect. Это такой сенсор, который меряет еще глубину, т.е. не только RGB-картинку, но и расстояние до объекта. Он должен выйти в ноябре (2010). И собственно говоря, эта штука она тоже для игр, но на другом принципе. Она, плюс к тому, что получает RGB-картинку, она еще получает матрицу глубин для объекта, т.е. расстояний.
Грубо говоря, лазерный дальномер, только на других принципах. За счет этого, им удалось сделать отслеживание людей. Вот такой интересный ролик, это ролик достаточно содержательный, в отличие от тех игр, которые они показывают. Ибо игры они показывают совершенно примитивные и ужасные, где на стену надо накидывать какие-то краски, когда можно на более примитивных устройствах и алгоритмах тоже самое сделать. Собственно говоря, все это происходит сейчас, прямо на наших глазах, а первая такая истинная, дополненная реальность, была, опять таки, все это разработано раньше, в массовое производство все эти вертолеты Apache пошли в 1984 году, там был применен шлем с очень интересной штукой. На один глаз, за счет такого полупрозрачного дисплейчика проецировалась картинка, дополненная — т.е. какая-то разметка, куда ты целишься, какие-то высоты, куча каких-то данных, причем сам шлем был снабжен гироскопом, в нем стояли гироскопы, чуть ли не настоящие, да и до сих пор стоят — все это летает. За счет этого было понятно, куда пилот смотрит, и ему проецировалась информация ровно по его взгляду. Это достаточно адовая штука, ибо пилоты жалуются, что после его применения у них начинает дико болеть голова, раскалываться и тому подобное[1]. А жаловаться нельзя, потому что тебя сразу уволят из армии по профнепригодности, а в Америке много платят в армии. Поэтому они все терпят, и через несколько месяцев голова проходит, но через год-два снова начинает дико болеть… Один из пилотов решил пронаблюдать за своим зрением, во время использования этого шлема, оказалось, что у него глаза двигаются независимо, как у хамелеона. Все дело в том, что проецирование происходит на один глаз, а другой глаз этого не видит, из-за этого болит мозг, он не может скоррелировать эти картинки. Через некоторое время (человек животное приспосабливаемое, люди не свиньи — все сожрут), они приспосабливаются, голова вроде как проходит, но к таким вот последствиям все это приводит. Поэтому когда я вижу, что сейчас пытаются выпустить такое устройство в ширпотреб — не покупайте. Я думаю, у них ничего не получится, ибо головные боли и ничего хорошего… Ну если немножко, и если очень хочется как пилоту… How does it work?Давайте перейдем к самой содержательной части доклада, как это, собственно говоря, работает, и как всем этим можно пользоваться. Напомню эти две картинки, что есть два разных принципа:
С точки зрения, что делать с камерой, как анализировать ее изображение, тут есть целый взрыв всяких разных подходов, и вообще, направлений. С точки зрения сенсоров, все значительно проще, их набор достаточно стабильный, о нем для начала и поговорим. SensorsGyroscopeИтак, первый сенсор — гироскоп. Вы знаете, что в телефоне есть гироскоп, и вам нужно написать программу, которая обрабатывает с него данные. Сразу вспоминаются какие гироскопы? — ну какие-то такие. Сильно раскрученное тяжелое тело, на мягких шарнирных подвесах, оно сохраняет, как бы вы не крутили тот предмет, к которому оно подвешено, он сохраняет свое направление, и вы можете померить два угла отклонения относительно локальной системы координат, и понять, как ваше устройство ориентировано. Значит, вроде как, вам должны приходить углы. Если вы поставите два таких гироскопа, в перпендикулярных плоскостях, то вы можете получить все три угла:
Не знаю, к чему привыкли вы, я лично ожидал такого от гироскопа, и наивно так думал — вот, сейчас я быстро напишу программу, которая все это делает.
Понимающий смех в зале
Все дело в том, что вот как выглядит гироскоп, который стоит внутри всех мобильных и тому подобных устройств. Вот у меня сейчас здесь [показывает WiiMote, используемый как устройство для презентации] работает, и то, что я показываю — это данные с гироскопа, чтобы указка бегала. Ничего вращающегося там, конечно, нет, тем более быстрого и тяжелого. Там есть такая штука, как какая-то фигня, извините, которая телебунькается в магнитном поле туда-сюда, типа маятника. Соответственно, когда у вас возникает вращение вокруг оси, которая перпендикулярно проходит через эту плоскость, возникает сила Кориолиса, она отклоняет эту телебунькающуюся штуку и вы можете, измеряя как изменилась емкость этой конструкции, догадаться, какова сила. Если схематически — то это так. Вот у вас небольшая масса, которая так вот (вертикально) колеблется, вы ее возбуждаете.
Если есть вот такое вращение (против часовой стрелки), то возникает сила Кориолиса, она начинает отклонятся вот туда и собственно говоря, возникают вот такие поперечные колебания, и вы можете это померить как емкость конденсатора. Кто помнит эту силу Кориолиса, она зависит от угловой скорости вращения, соответственно, что получается — у вас на выходе с этого устройства на самом деле не углы, а угловые скорости, несмотря на то, что это называется гироскопом. Чтобы в одномерном случае получить угол, нам надо интегрировать — правда к нам сигнал приходит дискретный, поэтому это такое простое суммирование. В трехмерном случае все это выливается в кватернионы, если вы вообще всем этим хотите заниматься, то кватернионов не надо пугаться. Это проекция этой угловой скорости на разные оси, и вот, примерно для WiiMote картинка из интернета, чтобы не запутаться, как это все обрабатывать. Это все хорошо, но интегрируя, мы накапливает ошибку. Происходит сдвиг, т.е. постоянно что-то уплывает у нас. Вот как здесь, несмотря на то, что у нас устройство находилось на месте, постепенно угол плывет, и кажется, что постепенно, постепенно устройство проворачивается. Что не есть гуд для наших целей, и вообще как-то отстой.
Вот есть картинка из Интернета, здесь погрешность, здесь — градусов в час, сколько накапливается, и здесь разные виды гироскопов. И видно, что микромеханические, которые ставят в наши дорогие устройства, они вот самые ужасные в этом плане. AccelerometerНадо с этим что-то делать, в принципе углы можно мерять при помощи акселерометра. Более того, в начале только при помощи его и пытались мерять эти углы. Что такое акселерометр? Это какой-то грузик, грубо говоря, закрепленный на пружинках, и по отклонению этого грузика, по равновесному положению, мы понимаем, какая сила действует, и мы измеряем это ускорение. Вот как выглядит этот акселерометр. На самом деле, что получается меряет акселерометр? У вас есть ускорение свободного падения, есть какое-то собственное ускорение, устройство можно с ускорением двигать. Соответственно, акселерометр измеряет вот этот вектор, причем в проекции на локальную систему координат устройства. Это то, что вам подает акселерометр на выходе. В одномерном случае, все выглядит достаточно просто:
Можно конечно всякими арксинусами и аркосинусами запользоваться, просто акртангенс-2 выдает вам все 360 градусов, без геморроя.
Смотрите, вроде у нас от акселерометра угол есть, если собственное ускорение устройства близко к нулю, и мы в одномерном, несложном случае. Получается как — у нас есть акселерометр, и есть гироскоп. И нам нужно что-то, что нам даст на выходе достаточно точный угол. Проблема акселерометра в чем основная? В том, что он дико шумит. Причем шумит на высоких частотах. Я тут пытался визуализировать, и если визуализировать этот вектор он там так дико колеблется, хотя само устройство абсолютно в состоянии покоя. Т.е. высокочастотные, сильные, причем с хорошей амплитудой. Просто так этим пользоваться тоже нельзя, надо как-то хитро. Есть два стандартных подхода, как это делать.
Магия Калмана. Это очень сложный фильтр, честно говоря, я сам его не понимаю. Про него написана не одна книжка, защищена не одна диссертация. Его основная фишка в том, что он использует внутри себя, т.е. для фильтрации, как модель измерения самого себя, так и модель устройства. Соответственно эти модели, они многопараметрические. И чтобы у вас хорошо работал фильтр, вам нужно эту кучу параметров подобрать, каким-то образом. Его используют, например, в самолетах, но там, все физические характеристики самолета давно и хорошо изучены, из-за его аэродинамических и прочих характеристик. Какие же характеристики у телефона, к тому же попавшего в чью-то руку? Его там будут круто крутить, это совершенно странные штуки… В принципе так этот фильтр работает, ничего тут непонятно, но есть готовая имплементация на C++ по этой ссылке. Поэтому можно даже не разбираться, поставить, и дальше весь magic в том, чтобы подобрать эти параметры. Если вы думаете, что это не нужно, то вы можете набрать «калман фильтр для андроида» и увидеть очень много результатов, т.е. вам само устройство шлет сырые данные, оно за вас ничего не делает с этим — трахаться, мучаться разработчику, вам. Есть намного более простой фильтр, который называется как раз «альфа-бета», который состоит в том, что допустим, хорошо, давайте продолжать интегрировать, только давайте с небольшой поправочкой, еще добавлять угол, который получаем из акселерометра. Ну дельта тут какое-то небольшое число, единственный параметр этого фильтра, который надо подобрать. Почему он такой, альфа-бета, иногда его еще называют каким-то «композитным фильтром». Потому что этот коэффициент, он достаточно большой, он убивает низкие частоты, а этот коэффициент маленький, он убивает высокочастотный шум. Получается, что вы убиваете низкую частоту шума от интегрирования, а вот тут убиваете высокую частоту, тот самый шум, который идет с самого датчика. Как подобрать этот параметр, тут тоже есть достаточно простая формулка: а-ля релаксация, если у вас сейчас неправильно измерен угол, то через сколько он у вас сойдется к правильному значению. Это время тау вычисляется примерно так, а здесь та частота, с которой вы получаете сигнал с датчиков, как правило, сто раз в секунду, как сейчас все современные устройства дают. Ну вот, например, если у вас коэффициент, например, в сотых, вы раз в сто секунд получаете, что примерно за полсекунды устройство приблизится к тому положению, в котором оно должно быть. Вот дальше идет видео, в общем, народ обленился, смотрите, как сравнить эти фильтры. Смотрите, как народ делает — вообще ничего не надо, достаточно камеры. Народ пытается сравнивать эти фильтры, и понять, какой лучше. Музычка хорошая, чуваки ненапряжно все так, зачем математика, смотреть разницу между функциями и т.п. Вот так вот. Слева — «альфа-бета» фильтр, в центре — «чисто кальман», а справа — это они еще какой-то свой изобрели еще.
Но на самом деле, это не очень такая визуализация, ибо не очень понятно, какие здесь параметры, очень все сильно зависит от параметров. Видно, что этот «альфа-бета», он например, более плавный, может из-за того, что там коэффициент подобран не очень здорово, «Калман» вроде более четкий… Так вот, этот фильтр, «Калмановский», он зародился в радиолокации, в обработке радиолокационных сигналов, потому что там, вы посылаете волну, она к вам обратно приходит и вы по времени задержки измеряете расстояние, а по эффекту Допплера, который «ви-и-и-у», измеряете скорость. Почти как у нас, только у нас углы, но то же самое, т.е. есть величина и производная величины, замерянные в один момент времени. И дальше там надо максимально эффективно отфильтровать шум, «Калман» придуман для этого. У меня мама занималась всю свою жизнь вторичной обработкой радиолокационных сигналов на летающей радиолокационной станции «Шмель». Я, уже когда со всем этим разобрался, реализовал этот complimentary filter, спросил у нее
И тут она мне выдала:
Там еще советские вычислительные машины стояли, и этот фильтр Калмана был очень вычислительно дорогой. Ну вот, собственно говоря, это пример, если вам придется с этим столкнутся, не бросайтесь сразу грызть этот гранит Калмана, погрызите сначала что-то попроще. Тем более здесь есть еще одна подстава, как перейти от одномерного случая к трехмерному. Ну на самом деле надо переходить к кватернионам, и примерно здесь все то же самое, интегрируют в кватернионах, но добавляется вот такая корректировка… По сути, это углы отклонения вектора, который вы сейчас замерили, поворот, к которому мы можем рассчитать через текущий кватернион вращения. Чтобы это рассчитать, у нас есть всего лишь два вектора… разбивается это на самом деле на три случая Если у нас устройство вертикально, то можно корректировать (показывает два перпендикулярных угла отклонения) по таким углам. А вот такой угол (вращения вокруг оси) мы никак из ускорения свободного падения получить не можем. Ну и аналогично рассматривая положения этого устройства (показывает две перпендикулярных горизонтальных ориентации), мы получаем, что мы можем скорректировать каждый раз только два угла из трех. Причем каждый раз, два разных угла из трех. Получается, что это все здорово работает, но остается вот такой вот дрифт, вокруг вертикальной оси. Я могу вам показать, как сейчас вот выглядит устройство, которое я сейчас вращаю, мы можем положить его в какой-то ориентации, хотя бы примерно так, хотя стол двигается… сейчас мы вид сверху сделаем… под каким оно примерно углом, теперь я его быстро-быстро вращаю, накапливается ошибка, все плохо, я его кладу, и вот оно так хоп, чуть-чуть откорректировалось по тем углам, и так оно перевернулось, почти полностью. Т.е. вот, все равно такая вот получается засада. Magnetic CompassИ тут приходит нам на помощь магнитный компас. Если вы заметили, то многие устройства раньше им не комплектовались, то сейчас они стали бурно в него впихивать, казалось бы — зачем он? Все помнят, что у нас магнитное поле опоясывает Землю, соответственно мы можем мерить напряженность магнитного поля, и у нас появляется вектор, дополнительный и ортогональный ускорению свободного падения! Мы меряем его проекцию на систему координат устройства, причем нас тут уже не парит совершенно ускорение этого самого устройства, что тоже гуд. Получается, что мы убиваем дрифт вокруг вертикальной оси, т.е. используя проекции этих двух векторов, мы можем полностью установить положение устройства в пространстве (наверное, имеется в виду ориентация в пространстве). Вот казалось бы такая простая задачка, но столько геморроя. Вы можете посмотреть для примера, как сейчас работают разные программы дополненной реальности, они сейчас работают достаточно дерьмово, мягко скажем, и вот почему. Поэтому магнитный компас очень важен, и покупая устройство, если вы хотите им так пользоваться, обращайте внимание на его наличие. CamerasДавайте перейдем к камерам… А почему они не используют уровень, обычный?
Только как его в мобильник запихнуть? Почему бы не использовать обычный гироскоп — раскрутил его и все. А уровень можно маленький сделать…
Ну это будет один угол относительно горизонта. И тоже будет сильно фонить, в принципе, вам акселерометр тоже самое и дает, то же самое, что и уровень, если задуматься. Акселерометр это по сути уровень и есть. … дрифт… тоже может дать, вращение вокруг оси…
Нет, не очень понятно. Уровень никак не отследит это. Давайте перейдем… много еще хочется всего рассказать… на самом деле, сенсоры, с этим рано или поздно разберутся, уже появляются всякие SDK, в которых эти проблемы решены, и я думаю, так или иначе, через годик-два с этим будет также легко работать, как с мышкой, будет готовый класс, от которого можно будет наследоваться или использовать его и не знать обо всех этих подводных камнях. Намного интересней и инновационней это как раз обработка видеоизображений, которые мы получаем с камер. Самое простое, это использование маркеров. Вот например, как мы видим на Sony Move, там светящийся шарик. Это достаточно классная штука, ибо если мы знаем диаметр маркера, фактически, мы знаем параметры своей камеры, как это называется, угол обзора, и разрешение ее, по ширине и высоте, и зная размер пискеля в проекции маркера на изображение, мы можем оценить расстояние до нашего реального объекта, и вообще, можем оценить его положение в системе координат камеры. Делается это все по совершенно простейшим и тупым формулам, ну вот если у нас угол обзора 75°, 640×480, а шарик 5см, и мы его видим как 20 пикселей, то значит до него полтора метра. На этом элементарнейшем принципе и работает отслеживание Sony Move. Есть акселерометр, есть гироскоп, и есть магнитный компас, благодаря которому мы можем видеть углы, но нам еще интересно, где оно находится в пространстве. Там есть совершенно простая камера, Sony Playstation Eye, кстати, хорошая камера. Она недорогая относительно, и при этом может снимать с высокой частотой, и низким искажением (геометрическим).
И в общем, исходя из этого, мы можем понимать, где у нас что, и делать вот такую вот дополненную реальность. Вот в данном случае чувак себе руки пририсовал вместо Sony Move, потому что по маркерам мы понимаем, где они, и мы можем отмасштабировать руку, в зависимости от того, ближе она или дальше, а по углам мы понимаем, как сориентировать эту руку. Высокая частота это сколько?
60 кадров в секунду, она даже 77 умеет выдавать, но это какой-то экстремальный режим. How to detect markers on imageКак найти маркер на изображении? Ну самый тупой способ, это по порогам. Т.е. у вас есть какая-то картинка, это какой-то сигнал, и вы просто знаете, что маркеры, они просто самые яркие в нужном нам цвете, и просто их отсекаете по порогам. На самом деле, большинство алгоритмов, они так и работают. Есть более хитрые детекторы, где вписывают всяких гауссов внутрь, и тому подобное, но они достаточно дорогие, и то, что вы видите в real-time, скорее всего это простой порог, может быть с каким-то наворотом. Например, часто используются в дополненной реальности какие-то такие хитрые маркеры, аля какие-то двухмерные штрихкоды, только попроще. Вот их детектят, и вот, поверх них можно изображать какую-нибудь фигуру.
Как это делают? На самом деле тут тоже исходная картинка, далее она же по порогу срезанная, подчищены контура, и дальше с этой бинаризованной картинкой уже можете наложить сетку, понять, что закрашено, что нет, и наложить паттерн. На самом деле, весь этот magic в обработке изображений, это зачастую смесь каких-то совершенно тупых алгоритмов, а главное — подобрать эту смесь, основные инновации в этом. Но есть и более хитрые алгоритмы, сейчас вычислительные мощности растут, это становится доступно. Если у вас N камер, и есть M маркеров, то вы можете вообще сделать триангуляцию, чтобы посчитать положение каждого маркера в пространстве, понимая, как он проецируется на каждую из плоскостей, и на основании этого наколбасить что-то более сложное.
Например, из таких динозавров, то, что активно эксплуатирует эту систему, эту идею, это VICON. Она стоит около ста тысяч долларов. Человека одевают в специальный костюм, облепляют кучей маркеров, ставят большое количество камер, и дальше, собственно говоря, исходя из положения этих маркеров, можно попытаться реконструировать эти скелеты.
Реконструировать, как движется скелет человека, на основании того, что трекится этим маркером. На картинке, кстати, достаточно темно, и вы сами маркеров почти не видите, потому что они подсвечиваются инфракрасным светом, и там стоят инфракрасные детекторы в камерах. Сами камеры, кстати, в компьютер гонят просто координаты маркера, потому что со стольких камер гнать картинку в компьютер, какие бы сейчас не были современные шины… поэтому в саму камеру вшит самый тупейший алгоритм — порог, специальный чипчик, и он уже в компьютер вам передает, грубо говоря (x,y), координаты изображения маркера, а дальше уже компьютер молотит. Но там все равно достаточно хитрая математика, чтобы восстановить положение скелета по маркерам, все равно это достаточно сложно. Вот они продают это по сто тыщ долларов, у них по сути среди промышленных маркерных систем только один серьезный конкурент, это OptiTrack. Те продают что-то начиная от шести тысяч долларов, но чтобы нормально работало — минимум 10 тысяч. Но там у них куча ограничений — один актер, и тому подобное. Вот такой примерно это рынок, чтобы вы понимали, до сих пор дорогой. У Qualisis(???) точно такие же камеры вроде, с инфракрасным зрением?
Не знаю, думаю что нет. Во всяком случае, потому, что мы видим… На самом деле, если вам нужно снимать кучу актеров, в большом пространстве, то по сути у вас нет выбора, кроме VICON. Дальше. Тяжело обрабатывать изображения, поэтому можно выкручиваться: использовать маркеры — по порогу отрезал, и все, у нас уже есть точечка, а с точечками мы как-нибудь уж разберемся. Structured lightСоответственно следующее такое извращение, чтобы упростить обработку изображений, это взять и направить на наш объект какой-нибудь структурированный свет. В данном случае это в видимом диапазоне, камеры в видимом диапазоне работают, можно помельче наложить что-то. На основании этого, снимая несколькими камерами,… у нас появляется некая такая структура на изображении, которую не очень сложно детектить, и на основании того, как она смещена на одном изображении относительно другого, можно, опять таки за счет триангуляции реконструировать трехмерную модель. Лет десять назад я этим занимался, у меня до сих пор где-то на ноутбуке лицо Ленина отсканированное есть. Страшная вещь. Полосатое?
C тех пор фотографии в структурированном свете сохранились, с известными параметрами калибровки.
Собственно говоря, на этом принципе работает Microsoft Surface, пока такая чисто разработка-research, пока она в ширпотреб не пошла, и может быть не пойдет, потому что она достаточно дорога. Там внизу стоит четыре или даже больше инфракрасных камер, инфракрасная структурированная подсветка, и соответственно, на основании этого она понимает, что там на этот Surface положили, какими пальцами к нему касаются, и тому подобное. Т.е. это достаточно такие, прикольные и интуитивные интерфейсы.
Мне больше всего нравится, что когда телефон определяется в него можно фотки закидывать. Вполне прикольное применение дополненной реальности, очень физично. Давайте я дальше погоню. Т.е. Microsoft Surface, он на этом. Z-cameras/ Z-sensorsДальше — Z-камеры, Z-сенсоры. Это конечно Microsoft Kinect, и я обещал о нем подробней рассказать. Но на самом деле, Kinect, который раньше назывался Project Natal, его корни - это Z-sensor и Z-cam от 3DV, и Microsoft их купило.
И прородитель этого сенсора здесь живьем. Вот если кто видит на ноутбуке, я тут подхожу, а здесь — карта глубины, а вот собственно Z-sensor. Как работает конкретно вот этот сенсор? По сути, это как лазерный дальномер. Там посылается пучок света, он отражается от объекта и обратно он приходит с какими-то пикосекундными задержками, а мы их научились измерять каким-то образом. Это по сути время прохождения светового сигнала до объекта и обратно. Это я записал дома с собою видео, карта глубины как выглядит. И плюс к этому она снимает обычную RGB-картинку, для того чтобы вы могли ее как-то дополнительно анализировать. Вы понимаете, что это очень много хороших данных, глубина, расстояние, с этим много проще работать, чем просто с RGB, можно угадывать жесты и тому подобное. Но Kinect, чем он еще отличается. Похоже несмотря на то, что они это купили, они построили это все на другом принципе. Потому что у них есть две камеры, которые определяют глубину, и одна — которая RGB. И похоже, они дают какую-то структурированную подсветку, в инфракрасном диапазоне на объект, и двумя камерами ее снимают, и какой-то достаточно сложный чип ее обсчитывает, в плане корреляции этих изображений c подсветкой, и глубиной до разных точек. Т.е. они по сути, технологию-то сменили. Возможно, они не хотели, чтобы какие-нибудь конкуренты на этом поле еще развились. Еще интересная вещь с Kinectoм, это что они применили базу данных неких поз, для распознавания… ведь остается задача распознать — в какой позе сейчас человек в данный момент, а им надо в real-time, потому что это все для игр. Они применили какую-то базу данных, и это все очень сложно, очень секретно, но вот есть какие-то разработки в MIT, которые что-то подобное делают для руки,
На которую они надевают специальную раскрашенную перчатку, вы можете заказать и распечатать на белой лайкровой перчатке какой-то рисунок, и потом они примерно также восстанавливают положение руки:
Потому что в real-time обсчитать все это, даже имея карту z-глубин очень тяжело.
Вот как это работает, кстати для чего вам можно руки применять. Достаточно забавная такая разработка. Пока вот очень много сводиться к тому, что вам нужно применить какой-то трюк — навесить маркер, что-то специальное одеть. Видите, как они придумали, для чего все это можно применять — оп. Ну дальше это их фантазии, что руки не помыл, а вот в перчатке берет и моет. Молодцы, с юмором чуваки. True Optical: several camerasВсе-таки можно попробовать напрячься и сделать чисто оптически, без ухищрений, поставить кучу камер, врубить посложней алгоритмы, есть такая коммерческая система, опять же для Motion Capture, для захвата движений человека, назывется Organic Motion. Там какая-то хитрая алгоритмика, там кромсают человека, чтобы восстановить его положение, т.е. все это немножко варварски все это выглядит, вот видео, это Andrew Чеснок, автор идеи и генеральный директор, он к нам на выставке подходил и общался, такой вполне обычный и общительный дяденька-американец.
Вот он объясняет, как у него устроена система, у него куча камер расставлена, очень много, и вы видите специальный фон. Вот собственно говоря, прямо в реальном времени, снимает его и у вас на экране есть персонаж, который анимируется, … вот так вот. Стоит все это, цена, от 60 тысяч долларов, за такую систему, это с оборудованием, под ключ. На этой нише пытаемся и мы работать, у нас тоже безмаркерный захват движений, ну у нас такая, что мы хотим это сделать вообще совсем доступным, с обычными камерами, мы PlayStation сами используем, с обычными компьютерами. И если кому интересно, могу потом показать и програмку, снять здесь мы не можем, не привезли, и потом, у нас обработка не real-time, а оффлайновая, это не так интересно, не живьем получается смотришь. Вот пример, один из наших пользователей, при помощи нашего Mockupа смастерил вот такой боевичок.
Народ это уже использует, хотя нам еще дорабатывать и дорабатывать. Но это уже намного лучше, чем просто сидеть, и пытаться руками рисовать всю эту анимацию. Вот такая вот штука. True Optical: one moving camera
Ну и последнее, я на самом деле завершаю — истинно оптические. Там было много камер, теперь представим, что у вас есть одна движущаяся камера. Т.е. вы получается со временем одни и те же объекты видите с разных точек зрения. Исходя из этого вы можете получать информацию об этих объектах. Вот живая программа, которая пытается трекать какие-то точки на изображении, и исходя из этого, находит какие-то плоскости на картинке, в реальном трехмерном мире и на них далее можно сажать каких-то персонажей, все достаточно забавно, вот это живая демонстрация, более того, все это доступно в исходных кодах. Единственное — нет готовых c-build-женых примеров, поэтому надо пройти квест, и суметь это все собрать. Я под Windows не смог, хотя утверждается, что можно. Правда я недолго старался, но если кто сильно заинтересовался, то можно поиграться. FutureПро будущее. Обязательно в презентации надо говорить про деньги. Предполагают резкий рост всяких денег, хотя это всего лишь… не так много миллионов долларов, и исследование такое плюшевое. Но на самом деле на пути к этому есть три проблемы. RobustnessПервая — это robustn'ость, т.е. на самом деле надежность. Все что вы увидите и будете пробовать пользоваться, оно на самом деле глючит, и как бы ненадежно. Robustness — это как матрешка, т.е. несмотря на то, что вы вносите помехи, несмотря на то, что что-то там неидеально, но все равно продолжает работать. Пока этого нет, эти технологии пока очень хрупкие, ими надо очень аккуратно пользоваться. Quick responseВторое — это быстрый ответ. Потому что если мы совершаем некоторое действие, а отклик на него мы видим спустя некоторое время, у нас в голове возникает когнитивный диссонанс. Кстати, в этом основная проблема Microsoft Kinect, потому что у них есть весьма заметный лаг, между действием и отображением в игре, и поэтому у них все игры очень плюшевые — накидывание краски на стенку, какая-то лабуда. Т.е. в хардкорных таких играх это пока неприменимо, а вот Sony Move — он применим, там лага почти нет, он там в районе десяти миллисекунд.
HelpfulnessИ дальше полезность собственно говоря этого всего. Пока многие эти приложения они очень сомнительной полезности, как собаке пятая нога. Например, на Андроиде есть приложение такое, оно измеряет расстояние до объекта на полу, зная высоту, т.е. туда надо ввести высоту, на которой расположено устройство, в камере есть такое перекрестие, вы наводите на точку на полу, и она вам показывает дистанцию. Угол мы можем посчитать, мы разобрались, фильтр Калмана или альфа-бет освоили, это нам ввели а дальше по теореме синусов или косинусов, кому как больше нравится, мы получаем собственно говоря расстояние. Зачем это, я не знаю. Так что пока с этим есть некие проблемы. Ну вот как может выглядеть будущее, как себе это видит BMW, вообще, здорово BMW показывать в качестве будущего. Техник будущего. Т.е. кто-то приехал со своей BMW в армян-сервис, известно, они только вчера из аула, они не знают, как и что устроено в машине, поэтому они надевают специальные очки, она им рисует «Чувак, здесь вот надо два винта открутить». Вот он сказал «Next step», она разобрала армянский акцент, и показала — «теперь это снимай». Так вот можно разобрать, непонятно, можно ли также все собрать обратно, в общем, так себе видит будущее BMW.
Зачем все эти Motion Capture и прочее: вот они в специальных костюмах, со специальными маркерами, кроме того, у них на лице нанесены черные точки, надо же еще охватывать лицевую анимацию, о чем я еще не говорил. На лице нанесены черные точки, и прямо вот тут камера висит на кронштейне. Соотвественно они сразу захватывают и лицевую анимацию, и движение всего целиком. Вот так вот снимался фильм AVATAR.
Причем они там ездили на реальных лошадях, вместо мифических каких-то скулзов, которые там на Пандоре. В общем, если вы на ютубе наберете «AVATAR MOCKUP», то вы найдете кучу одного и того же ролика, десять раз залитого разными людьми и организациями. Вот, можно приглядется — ей черные точки наносят, это тоже маркеры. В Голливуде они не парятся. Я так понимаю, там много всяких инноваций было, подсветка лица, чтобы было ярко, и они даже движение глаз научились отслеживать. Вот (сцена с драконом у скалы) — вы думаете это все на компьютере нарисовали? Отрендерили то да, но актерам пришлось полетать. Также я в свое время был в шоке от того, как там матрицу снимали — оказалось их там подвешивали на канатах, чтобы они там по стенам бегали. Так что актерам все равно приходится потеть. На этом собственно говоря все, SEE YOU IN AR!
Примечания
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion». |
||