Работа программиста интересна своим разнообразием. В зависимости от решаемой задачи, ты углубляешься то в моделирование климатических процессов, то в биологию деления клеток, то в звездную физику… Но бывает и по-другому: самая обычная на первый взгляд проблемка открывает перед тобой бездну нюансов. Разработчики, столкнувшиеся впервые с технологией Intel RealSense, наверняка, удивляются, насколько сложны процессы распознавания и отслеживания положения рук или лица, ведь наш
В конце поста — приглашение на Intel RealSense Meet Up в Нижнем Новгороде 24 апреля. Нижегородцы, не пропустите!
Посмотрите на свои руки и попробуйте сгибать разные пальцы. Заметьте: при сгибании они зависят один от другого. Поэтому достаточно отслеживать всего два сустава, чтобы добиться реалистичного сгибания четырех пальцев руки (всех, кроме большого). Только указательный палец можно согнуть, не сгибая при этом остальные пальцы, поэтому для указательного пальца требуется собственный алгоритм отслеживания суставов. Для других пальцев все проще: если согнуть средний палец, то также сгибается безымянный палец и мизинец; если согнуть безымянный палец, при этом сгибается средний палец и мизинец; если согнуть мизинец, то сгибаются средний и безымянный пальцы.
Продолжим изучение наших рук. Угол, на который может согнуться определенная фаланга пальца, зависит от длины этой фаланги (а не от сустава). Верхняя фаланга среднего пальца может согнуться на меньший угол, чем средняя фаланга этого же пальца, а угол сгиба средней фаланги меньше угла, на который может согнуться нижняя фаланга. Заметим тут, что отслеживать руки ребенка гораздо труднее, чем взрослого, поскольку сложнее получать данные для рук небольшого размера и точно их интерпретировать.
В настоящее время технология RealSense позволяет одновременно отслеживать 22 сустава в каждой кисти и две руки (кстати, они не обязаны быть правой и левой, а могут принадлежать разным людям). В любом случае, компьютер знает, какая рука перед ним. Важным шагом вперед стало исключение этапа калибровки, хотя в некоторых сложных случаях (опять-таки, скажем, если перед камерой ребенок) система просит провести изначальную калибровку. Зато далее рука человека не просто визируется по узловым точкам, но и может быть достроена самостоятельно в том случае, если ее часть вышла из поля зрения камеры или недостаточно освещена. В том же случае, если условия позволяют, рука будет отделена от находящегося сзади фона, даже в том случае, если он периодически изменяется.
Точность определения положения одних частей руки относительно других позволяет реализовать очень интересные варианты передачи информации. Скажем, можно использовать относительные значения раскрытия ладони – от полностью раскрытой до полностью сжатого кулака (от 0 до 100). Согласитесь это уже несколько похоже на язык жестов. Кстати, реализация классического языка жестов откроет для RealSense еще одну важную и нужную область применения – реабилитацию людей с ограниченными возможностями. Навряд ли у какой компьютерной технологии может быть более человечное применение…
Перейдем теперь к распознаванию жестов. В настоящее время Intel RealSense поддерживает 10 готовых жестов – вы их видите на рисунке. Распознавание может быть статическим (неподвижные позы) или активным (поза в движении). Естественно, ничто не мешает переключаться из одного режима в другой, например, статическая раскрытая ладонь становится активной при махании. Распознавание жестов на порядок сложнее простого отслеживания движения, поскольку тут необходимо не просто вычислять положение точек, но и сравнивать перемещения с определенными образцами. Поэтому без обучения тут уже не обойтись, причем обучаться должны обе стороны: компьютеру необходимо научиться детектировать ваши движения, а вам – правильно двигаться.
Чем четче будет ваш жест, тем понятнее он будет для машины. Возможно, на первых порах вы будете испытывать определенный психологический дискомфорт: в реальной «человеческой» жизни мы почти никогда не фиксируем жесты, а выдаем их один за другим непрерывно. Для RealSense же необходимы начальная и конечная фаза и длительное действие между ними (длительность жеста, кстати, тоже может быть задействовано как параметр). Динамическое движение определяется в зависимости от ситуации по перемещению или по времени.
Как видно, простора для недопонимания в естественных интерфейсов предостаточно. Скажем, те жесты, которые мы называем «похожими» компьютер, скорее всего, интерпретирует как одинаковые. Таких ситуаций проектировщикам надо избегать. Далее, приложение должно постоянно следить, чтобы человек, находящийся в кадре, из него не вылезал и в необходимых случаях выдавать предупреждения. Немало нюансов добавляет камера RealSense, имеющая свои особенности… ну, простую задачку решать же неинтересно, правда? Вот мы и решаем сложную.
В следующий раз, если представится случай, мы поговорим о распознавании лица. А пока, пользуясь случаем, хочу пригласить всех программистов Нижнего Новгорода, интересующихся технологией Intel RealSense, на неформальную встречу со специалистами компании, которая пройдет 24 апреля, в пятницу, по адресу ул. Магистратская, дом 3. В программе: доклады по теме, ответы на вопросы, демонстрации оборудования и, конечно, заинтересованные обсуждения – как же без них? Приходите, будет интересно.
При написании поста использовались статьи IDZ:
- Working with Hands/Gestures
- Tips and Tricks for developing Apps with the Intel RealSense SDK 2014 R1
- Советы и рекомендации по использованию Unity с Intel RealSense SDK 2014
Автор: saul