118
правок
Изменения
Сверточные нейронные сети
{{В разработке}}
{{Определение|definition ='''Оценка положения''' (англ. ''Pose Estimation'') {{--- представляет собой сочетание аппаратных средств }} задача определения положения и программного обеспечения, которое позволяет определить абсолютное положение ориентации объекта или группы объектов в пространстве. }}
== Области применения ==
Задача оценки положения движущихся и статичных объектов возникает во множестве прикладных областей. Сейчас происходит подъем популярности разработки устройств и систем, отслеживающих положения объектов окружающего мира и использующих эту информацию для различных целей, рассмотрим . Рассмотрим несколько областей:
#'''Транспортные средства с встроенными системами помощи водителю ''' ''(автопилот, круиз контроль и др.)''. Которые Эти системы помогают водителю с парковкой, контролируют скорость и направление движения, а также предупреждают об объектах, находящихся на дороге, о типе дорожного покрытия и возможных авариях.#'''Дополненная реальность:''' устройства , в которых в реальное изображение, получаемое с помощью видеокамер, встраивается некоторая информация , полезная человеку.#'''Виртуальная реальность: ''' оценка положения, как технология , является критически важной для достижения эффекта погружения в виртуальную реальность. В сочетании с отслеживанием ориентации становится возможным измерять и передавать в ВР виртуальную реальность все 6 степеней свободы ([https://en.wikipedia.org/wiki/Six_degrees_of_freedom 6-DoF]) реального мира.#'''Робототехника: '''Роботы роботы (Медицинскиемедицинские, научные, промышленные и др.) , которые основывают свое движение на построении карты окружения и препятствий.#'''Веб-технологии: '''Исследование юзабилити и исследование пользовательского опытаи удобства использования продукта. Можно [[Отслеживание_направления_взгляда_пользователя_в_браузере|отслеживать взгляд пользователя]], чтобы понимать какие блоки сайта привлекают наибольшее внимание.
== Методы решения задачи оценки положения ==
=== Акустические методы===
Акустические приборы слежения используют ультразвуковые (высокочастотные) звуковые волны для измерения положения и ориентации целевого объектав пространстве. Для определения положения объекта либо измеряется время пролёта ([https://en.wikipedia.org/wiki/Time_of_arrival time-of-arrival]) звуковой волны от передатчика к приёмникам, либо разность фаз синусоидальной звуковой волны при приёмо-передаче. Алгоритмы трекинга отслеживания положения при использовании акустических приборов основаны на [https://en.wikipedia.org/wiki/True_range_multilateration Трилатерациитрилатерации] и расчете [https://en.wikipedia.org/wiki/Angle_of_arrival Угла Прибытияугла прибытия].При использовании данных методов, разработчики сталкиваются с некоторыми проблемами: акустические трекеры, как правило имею , имеют низкую скорость обновления , связанную с низкой скорости скоростью звука в воздухе, скорость звука в воздухе которая зависит от внешних факторов среды, таких как температура, давление и влажность.
=== Радиочастотные методы ===
Методов, основанных на радиочастотах , достаточно много.#'''Позиционирования Позиционированиe с использованием пассивных радиочастотных идентификаторов [https://ru.wikipedia.org/wiki/RFID#Антиколлизионный_механизм_(меток) RFID]''' <br /> Основное назначение систем с пассивными RFID метками – {{---}} идентификация. Они применяются в системах, традиционно использовавших штрих-коды или магнитные карточки – : в системах распознавания товаров и грузов, опознания людей, в системах контроля и управления доступом (СКУД) и т.п.Система включает RFID метки с уникальными кодами и считыватели и работает следующим образом. Считыватель непрерывно генерирует радиоизлучение заданной частоты. ЧИП метки, попадая в зону действия считывателя, использует это излучение в качестве источника электропитания и передает на считыватель идентификационный код. Радиус действия считывателя составляет около метра.<br />#'''Позиционирование с использованием активных [https://ru.wikipedia.org/wiki/RFID#Антиколлизионный_механизм_(меток) RFID] ''' <br/>Активные радиочастотные метки используются при необходимости отслеживания предметов на относительно больших расстояниях (например, на территории сортировочной площадки). Рабочие частоты активных RFID – меток {{---}} 455МГц, 2,.4ГГц или 5,.8ГГц, а радиус действия – {{---}} до ста метров. Питаются активные метки от встроенного аккумулятора.Существуют активные метки двух типов: [https://ru.wikipedia.org/wiki/Маркерный_радиомаяк радиомаякиТранспондер транспондеры] и [https://ru.wikipedia.org/wiki/Транспондер транспондерыМаркерный_радиомаяк радиомаяки]. Транспондеры включаются, получая сигнал считывателя. Они применяются в АС оплаты проезда, на КПП, въездных порталах и других подобных системах.Радиомаяки используются в системах позиционирования реального времени. Радиомаяк отправляет пакеты с уникальным идентификационным кодом по команде либо с заданной периодичностью. Пакеты принимаются как минимум тремя приемниками, расположенными по периметру контролируемой зоны. Расстояние от маячка до приемников с фиксированными координатами определяются по углу направления на маячок [https://en.wikipedia.org/wiki/Angle_of_arrival Angle of arrival] (AoA), по времени прихода сигнала [https://en.wikipedia.org/wiki/Time_of_arrival Time of arrival] (ToA) или по времени распространения сигнала от маячка до приемника [https://en.wikipedia.org/wiki/Time_of_flight Time-of-flight] (ToF).Инфраструктура системы строится на базе проводной сети и в двух последних случаях требует синхронизации.<br />#''' Ultra Wideband (UWB) позиционирование '''<br/> Технология UWB (сверхширокополосная) использует короткие импульсы с максимальной полосой пропускания при минимальной центральной частоте. У большинства производителей центральная частота составляет несколько гигагерц, а относительная ширина полосы – {{---}} 25-100%. Технология используется в связи, радиолокации, измерении расстояний и позиционировании.Это обеспечивается передачей коротких импульсов, широкополосных по своей природе. Идеальный импульс (волна конечной амплитуды и бесконечно малой длительности), как показывает [https://ru.wikipedia.org/wiki/Анализ_Фурье анализ Фурье], обеспечивает бесконечную полосу пропускания. UWB сигнал не походит на модулированные синусоидальные волны, а напоминает серию импульсов. Производители предлагают разные варианты UWB технологии. Различаются формы импульсов. В некоторых случаях используются относительно мощные одиночные импульсы, в других – {{---}} сотни миллионов маломощных импульсов в секунду. Применяется как когерентная (последовательная) обработка сигнала, так и не когерентная. Все это приводит к значительному различию характеристик UWB систем разных производителей.
=== Магнитные методы ===
=== Оптические методы ===
Оптические методы представляют собой совокупность алгоритмов [httpshttp://runeerc.wikipediaifmo.orgru/wiki/index.php?title=Компьютерное_зрение компьютерного зрения] и отслеживающих устройств, в роли которых выступают камеры видимого или инфракрасного диапазона, стерео-камеры и камеры глубины. Оптический трекинг основан на том же принципе, что и стереоскопического зрения стереоскопическое зрениe человека. Когда человек смотрит на объект с помощью бинокулярного зрения, он в состоянии определить , приблизительно на каком расстоянии объект находится. Не достаточно просто установить пару несколько камер для имитации стереоскопического зрения человека. Камеры должны определить расстояние до объекта и его положения в пространстве, так что их необходимо откалибровать.[https://ru.wikipedia.org/wiki/Оптическая_система Оптические системы] надежны и относительно дешевы, но их с ними трудно калиброватьпровести начальную калибровку. Кроме того, система требует прямой линии света без закупорки, в противном случае мы получаем неправильные данные.
В зависимости от наличия специальных оптических маркеров выделяют отдельно:
*'''Без маркерный Безмаркерный трекинг: '''как правило строится на сложных алгоритмах с использованием двух и более камер, либо стерео -камер с сенсорами глубины. Используется наибольшим образом в автомобилях с автопилотам автопилотом и иными системами помощи водителю.
*'''Трекинг с использованием маркеров:''' предполагает заранее заданную модель объекта, которую можно отслеживать даже с одной камерой. Маркерами обычно служат источники инфракрасного излучения (как активные, так и пассивные), а также видимые маркеры наподобие [https://ru.wikipedia.org/wiki/QR-код QR]-кодов. Такой вид трекинга возможен только в пределах прямой видимости маркера.
=== Задача Perspective-n-Point (PnP) === При оптическом отслеживании для определения положения объекта в пространстве решается так называемая задача PnP (Perspective-n-Point), когда по перспективной проекции объекта на плоскость сенсора камеры необходимо определить положение объекта в 3D-пространстве.
Для заданной 3D-модели объекта и 2D-проекции объекта на плоскость камеры решается система уравнений. В результате чего получается множество возможных решений. Количество решений зависит от числа точек в 3D-модели объекта. Однозначное решение для определения 6-DoF положения объекта можно получить как минимум при 4 точках. Для треугольника получается от 2 до 4 возможных решений, то есть положение не может быть определено однозначно. <div style="text-align: center"><ul> <li style="display: inline-block;"> [[Файл:Pnp.gif |400px|thumb| rightcenter| Рис. 1 Задача (PnP)]]</li>При оптическом отслеживании для определения положения объекта в пространстве решается так называемая задача PnP (Perspective<li style="display: inline-n-Point),когда по перспективной проекции объекта на плоскость сенсора камеры необходимо определить положение объекта в 3D-пространствеblock;"> [[Файл:triangles.gif |400px|thumb|center| Рис.2 Решение "треугольников"]] </li></ul></div>
Решение предлагается достаточно большим количеством алгоритмов, реализованных в виде библиотек:
#'''[http://sv-journal.org/2015-4/09/index.php?lang=ru POS]''' ''(Pose from Orthography and Scaling)'', аппроксимирующий перспективную проекцию с помощью масштабированной ортогональной проекции и находящий матрицу поворота и вектор сдвига объекта путём решения линейной системы уравнений.
#'''[https://github.com/opencv/opencv/wiki/Posit POSIT]''' ''(POS with ITerations)'', который использует в цикле аппроксимацию нахождения положения POS для нахождения более хорошей масштабированной ортогональной проекции особых точек, а затем применяет POS к этим точкам, а не к исходным. POSIT сходится к точному решению за несколько итераций.
#'''[https://opencv.org/ OpenCV]''' — {{---}} библиотека компьютерного зрения широкого назначения с открытым исходным кодом. Основные части библиотеки — {{---}} интерпретация изображений и алгоритмы машинного обучения. Список возможностей, предоставляемых OpenCV, весьма обширен: интерпретация изображений, калибровка камеры по эталону, устранение оптических искажений, анализ перемещения объекта, определение формы объекта и слежение за объектом, сегментация объекта и др. Нам же интереcтно интереcен метод [https://docs.opencv.org/3.1.0/d9/d0c/group__calib3d.html#ga549c2075fac14829ff4a58bc931c033d solvePnP].
=== SLAM — <ref>[https://ru.wikipedia.org/wiki/SLAM_(%D0%BC%D0%B5%D1%82%D0%BE%D0%B4) simultaneous localization and mapping ]</ref> {{---}} Simultaneous Localization and Mapping === Метод одновременной локализации и построения карты (SLAM) — {{---}} наиболее популярный способ позиционирования, который применяется для отслеживания положения в пространстве.[[Файл:Slam.png |400px|thumb| right| Рис. 3 Метод SLAM]]Алгоритм состоит из двух частей: первая — {{---}} составление карты неизвестного окружающего пространства на основе измерений (данные с [https://ru.wikipedia.org/wiki/Одометр одометра] или [https://ru.wikipedia.org/wiki/Стереоскопический_фотоаппарат стерео-камеры]), вторая — {{---}} определение своего местоположения (локализация) в пространстве на основе сравнения текущих измерений с имеющейся картой пространства. Данный цикл непрерывно пере вычисляетсяперевычисляется, при этом результаты одного процесса участвуют в вычислениях другого процесса. Наиболее популярные методы решения задачи включают в себя фильтр частиц и расширенный [https://ru.wikipedia.org/wiki/Фильтр_Калмана фильтр Калмана].SLAM удобен для мобильных решений виртуальной и дополненной реальности. Недостатком данного подхода является большая вычислительная сложность.
=== Инерциальный трекинг ===
Современные инерциальные измерительные системы ([https://en.wikipedia.org/wiki/Inertial_measurement_unit IMU]) на основе [https://ru.wikipedia.org/wiki/Микроэлектромеханические_системы MEMS-технологии] позволяют отслеживать ориентацию (roll, pitch, yaw) в пространстве с большой точностью и минимальными задержками.[[Файл:gyro.gif |400px|thumb| right| Рис. 4 MEMS]]
Благодаря алгоритмам [https://en.wikipedia.org/wiki/Sensor_fusion «sensor fusion»] на основе [https://robotclass.ru/articles/complementary-filter комплементарного фильтра] или [https://ru.wikipedia.org/wiki/Фильтр_Калмана фильтра Калмана] данные с гироскопа и акселерометра успешно корректируют друг друга и обеспечивают точность как для кратковременных измерений, так и для длительного периода. Однако определение координат (перемещения) за счёт двойного интегрирования линейного ускорения ([https://en.wikipedia.org/wiki/Dead_reckoning dead reckoning]), вычисленного из сырых данных с [https://ru.wikipedia.org/wiki/Акселерометр акселерометра], не удовлетворяет требованиям по точности на длительных периодах времени. Акселерометр сам по себе даёт сильно зашумленные данные, и при интегрировании ошибка увеличивается со временем квадратично.Решить данную проблему помогает комбинирование инерциального подхода к трекингу с другими методами, которые периодически корректируют, так называемый, дрифт акселерометра.
=== Гибридные методы ===
Так как ни один из методов не является безупречным, и все они имеют свои слабые места, наиболее разумно комбинировать различные методы отслеживания. Так инерциальный трекинг (IMU) может обеспечить высокую частоту обновления данных (до 1000 Гц), в то время как оптические методы могут дать стабильную точность в длительные периоды времени (корректирование дрифта).
== Примеры задач, решаемых с помощью ML Оценка положения человека == === Отслеживание направления взгляда пользователя в браузере ===Решить подобную задачу не так уж и трудно благодаря JavaScript-библиотеке TensorFlow. В браузере очень легко получить доступ к веб-камере. Если предположить, что в качестве входных данных для нейронной сети будет использоваться всё изображение с камеры, то можно сказать, что оно для этих целей слишком велико. Системе придётся проделать большую работу только для того, чтобы определить то место на изображении, где находятся глаза. Такой подход может хорошо показать себя в том случае, если речь идёт о модели, которую разработчик обучает самостоятельно и развёртывает на сервере, однако если мы говорим об обучении и использовании модели в браузере — это уже чересчур. Для того чтобы облегчить задачу сети, мы можем предоставить ей лишь часть изображения — ту, которая содержит глаза пользователя [[Файл:Eyes.png |400px|thumb| right| Рис. 4 Процесс выделения глаз.]] и небольшую область вокруг них. Эту область, представляющую собой прямоугольник, окружающий глаза, можно выявить с помощью сторонней библиотеки. Для обнаружения лица на изображении воспользуемся библиотекой, которая называется [https://github.com/auduno/clmtrackr clmtrackr]. Если в качестве входа для простой свёрточной нейронной сети используется маленькое, но с умом подобранное изображение, сеть, без особых проблем, сможет обучиться. Выделим алгоритм: 1. '''Подготовка'''. <br/>Загрузка библиотек, подготовка пустого HTML-документа с которым будем работать. 2. '''Получение видеопотока с веб-камеры'''<br/>Запрашиваем разрешение пользователя на активацию веб-камеры. Начинаем получать видео с камеры и создаем функции контроля за потоком. 3. '''Поиск лица'''. <br/> Используем библиотеку clmtrackr.js для поиска лица на видео. Для начала инициализируем систему слежения за лицом.<br/><code>const ctrack = new clm.tracker();<br/>ctrack.init();</code><br/>Теперь, в функции onStreaming(), подключяем систему поиска лица, добавляя туда следующую команду:<code>ctrack.start(video);</code>Теперь, каждый раз, когда браузер выводит очередной кадр видео, мы собираемся рисовать что-то на элементе <canvas>. Выполнение какого-либо кода при выводе каждого кадра выполняется с помощью механизма requestAnimationLoop().Теперь вызовем функцию trackingLoop() в функции onStreaming() сразу после ctrack.start(). Эта функция будет сама планировать собственный перезапуск в каждом кадре.<br/><tt> const overlay = $('#overlay')[0]; const overlayCC = overlay.getContext('2d'); function trackingLoop() { // Проверим, обнаружено ли в видеопотоке лицо, // и если это так - начнём его отслеживать. requestAnimationFrame(trackingLoop); let currentPosition = ctrack.getCurrentPosition(); overlayCC.clearRect(0, 0, 400, 300); if (currentPosition) { ctrack.draw(overlay); } }</tt>4. '''Выявление области изображения, содержащей глаза'''.[[Файл:Face.png |250px|thumb|right| Рис. 5 Контрольные точки.]]Решим, что глаза — это прямоугольная часть изображения, границы которой касаются точек 23, 28, 24 и 26, расширенная на 5 пикселей в каждом направлении. Этот прямоугольник должен включать в себя всё, что для нас важно, если только пользователь не слишком сильно наклоняет голову. Следующая функция вернёт координаты x и y, а также ширину и высоту прямоугольника, окружающего глаза. Она, в качестве входных данных, принимает массив positions, полученный от clmtrackr. Обратите внимание на то, что каждая координата, полученная от clmtrackr, имеет компоненты x и y. function getEyesRectangle(positions) { const minX = positions[23][0] - 5; const maxX = positions[28][0] + 5; const minY = positions[24][1] - 5; const maxY = positions[26][1] + 5; const width = maxX - minX; const height = maxY - minY; return [minX, minY, width, height]; }
== Источники информации==
* [https://ru.qwe.wiki/wiki/Augmented_reality Дополненная реальность.]
* [https://ru.qwe.wiki/wiki/Positional_tracking Positional tracking.]
* [http://docs.cntd.ru/document/gost-r-54621-2011 ГОСТ Р 54621-2011. Информационные технологии. Радиочастотная идентификация для управления предметами.]
* [https://habr.com/ru/post/482220/ Локализация по Aruco маркерам]
* [https://habr.com/ru/post/397757/ Обзор методов и технологий отслеживания положения для виртуальной реальности.]
* [https://nanonets.com/blog/object-tracking-deepsort/ DeepSORT: Deep Learning to Track Custom Objects in a Video.]
* [https://nanonets.com/blog/human-pose-estimation-2d-guide/ Оценка положения человека.]
{{В разработке}}
[[Категория:Компьютерное зрение]]
[[Категория:Оценка положения]]