Всем доброго времени суток! Меня зовут Максим, я являюсь ведущим разработчиком в компании Habilect.
В жизни каждого программиста наступает момент, когда хочется поделиться тем, на что тратится 2/3 жизни – описанием работы и проектов :)
Исторически сложилось так, что основным полем моей деятельности стала разработка систем на основе бесконтактных сенсоров.
За почти 7 лет были перепробованы множество вариантов – Microsoft Kinect (как версия для XBOX 360, так и Kinect One for Windows), Intel RealSense (начиная с первой доступной на рынке версии – F200, продолжая SR300 и, на данный момент, последней из выпущенных – D435), Orbbec (Astra и Persee), Leap Motion (о котором даже когда-то здесь писал про обработку custom-жестов). Естественно, не обошлось и без обычных веб-камер – анализ изображений, OpenCV и т.д.
Тех, кого заинтересовало — прошу под кат.
На всякий случай, краткий ликбез на эту тему бесконтактных сенсоров:
Представим ситуацию, что необходимо программно отследить действия определенного человека.
Конечно же, можно воспользоваться обычной веб-камерой, которую можно купить в любом магазине. Но при таком варианте использования нужно анализировать изображения, что ресурсоемко, и, честно говоря, бажно (проблема выделения памяти в том же самом OpenCV до сих пор актуальна).
Поэтому оптимальнее распознавать людей не как часть изображения с камеры, а как «скелет», полученный специализированным сенсором с использованием активных дальномеров. Это позволяет как отслеживать человека (или несколько человек), так и работать с отдельными частями «скелета».
В терминологии Microsoft Kinect SDK эти отдельные части называются «Joints». В случае работы сенсора по умолчанию их состояние обновляется каждые 30мсек.
Каждый Joint содержит:
На рисунке представлены Joint’ы, обрабатываемые Kinect v2 на примере картины Леонардо Да Винчи «Витрувианский человек».
Таким образом, работая с бесконтактным сенсором, разработчик получает возможность анализа действий человека или группы людей (например, у Kinect возможно одновременно отслеживать 6 человек в кадре). А что делать с полученным массивом данных – зависит от конкретной прикладной задачи.
Области применения таких сенсоров – бесконечны. Основными направлениями моей работы являются реклама и медицина.
Рассмотрим рекламное направление. Сейчас, для работы интерактивных рекламных стендов, необходимо несколько основных модулей, а именно:
Если с самими рекламными материалами все понятно, то для сбора статистики как раз и используются сенсоры. Например, любому рекламодателю интересно, сколько человек обратили внимание на его рекламу? Мужчины, женщины или дети? В какой время они чаще всего останавливаются? Сколько времени они смотрят на рекламу, а не просто стоят рядом со стендом, копаясь в телефоне? С помощью сенсора это можно отследить и сделать отчет в удобной для рекламодателя форме.
Для удаленной конфигурации используется самая, наверно, простая и очевидная модель – Google Calendar. Каждый календарь привязан к определенному стенду, и, будучи в Санкт-Петербурге, можно управлять стендами в любой точке мира.
А привлекающий эффект – это тот самый функционал, из-за которого стенд и называется интерактивным. Можно сделать игру, управляемую человеком, с логотипом спонсора, реализовать приветственный звук при появлении человека в поле зрения сенсора, сделать QR-код со скидочным купоном в магазине рекламодателя если, например, человек минуту стоял и смотрел рекламу. Варианты ограничиваются в основном фантазией, а не техникой.
Зачем использование сенсоров в медицине? Ответ на этот вопрос банален и прост – удешевление стоимости обследований и реабилитации при сохранении точности.
Одним из ярких примеров являются разработки в области стабилометрии – науки об отклонениях центра тяжести при ходьбе, что влияет на осанку, позвоночник и правильную работу мышц. Можно ездить в специальные центры на специальные тренажеры, что является очень дорогой процедурой, которую, при этом, не везде оказывают. А можно приобрести домой сенсор и программное обеспечение, подключить к телевизору и выполнять диагностические тесты, результаты которых автоматически отправляются лечащему врачу.
Другим примером является реабилитация на дому. Ни для кого не секрет, что в реабилитации существуют две основных проблемы – дорогой вызов врача на дом (что нужно делать несколько раз в неделю) и нежелание реабилитирующегося человека выполнять однотипные упражнения в течение долгого времени. Для этого было разработано несколько основных постулатов системы, а именно:
Такая система позволяет сократить как время (и врача, и пациента – на поездки друг к другу), и сохранить необходимую для прогресса точность выполнения упражнений.
Для реализации проектов используется стек технологий .NET. Работаю Windows-only :). Да, из-за этого приходилось несколько раз писать wrapper’ы для native SDK (как яркий пример, я делал адаптеры для Intel RealSense SDK, так как на тот момент это был только unmanaged код). Это стоило немалого количества времени, нервов и седых волос, но позволило подключать библиотеку к разным проектам, разработанным на платформе Windows.
Стоит обратить внимание, что основные сенсоры (Kinect и RealSense) требуют для разработки разрядность x64.
Для упрощения работы клиентских приложений был реализован отдельный сервис, работающий с сенсором, запаковывающий данные в удобный для нас формат и рассылающий по подписчикам данные с помощью TCP-протокола. Кстати, это позволило создать систему, работающую с несколькими сенсорами, что позволяет значительно улучшить точность распознавания.
Диаграмма в упрощенном виде показывает преимущества использования нескольких сенсоров для слежения за объектом. Синие точки (joints) устойчиво определяются первым и вторым сенсором, зеленые – только вторым. Естественно, разработанное решение реализовано под «N-сенсорную модель».
Детальный процесс обработки данных с нескольких сенсоров представлен на диаграмме выше.
При практически любой разработке один из главных критериев для исполнителя – интерес. После так как несколько лет подряд я реализовывал однотипные веб-приложения на ASP.NET и PHP, хотелось чего-то нового и более, скажем так, умного. В веб-разработке (за редким исключением) все уже придумано. Ну сайт, ну сервис, ну база данных. В случае работы с сенсорами всегда возникают интересные и неоднозначные задачи, например, «а как бы передавать hd-video с сенсора по TCP, чтобы это не вешало систему?» (пример из жизни, хоть и было сделано очень давно). И сложно предугадать, что для улучшения и развития системы понадобится следующим. Понятно, что есть основной спринт разработки, где расписаны глобальные и заранее запланированные улучшения. Но такие локальные подзадачи – это одно из самых интересных в ремесле программиста.
Такую работу точно не назвать рутинной. Если кому-то стало интересно узнать более подробно, или кто-то захочет узнать, с чего начать в этой сфере – я открыт для общения. Готов ответить на любые вопросы :) And may the force be with you!
В жизни каждого программиста наступает момент, когда хочется поделиться тем, на что тратится 2/3 жизни – описанием работы и проектов :)
Исторически сложилось так, что основным полем моей деятельности стала разработка систем на основе бесконтактных сенсоров.
За почти 7 лет были перепробованы множество вариантов – Microsoft Kinect (как версия для XBOX 360, так и Kinect One for Windows), Intel RealSense (начиная с первой доступной на рынке версии – F200, продолжая SR300 и, на данный момент, последней из выпущенных – D435), Orbbec (Astra и Persee), Leap Motion (о котором даже когда-то здесь писал про обработку custom-жестов). Естественно, не обошлось и без обычных веб-камер – анализ изображений, OpenCV и т.д.
Тех, кого заинтересовало — прошу под кат.
На всякий случай, краткий ликбез на эту тему бесконтактных сенсоров:
Представим ситуацию, что необходимо программно отследить действия определенного человека.
Конечно же, можно воспользоваться обычной веб-камерой, которую можно купить в любом магазине. Но при таком варианте использования нужно анализировать изображения, что ресурсоемко, и, честно говоря, бажно (проблема выделения памяти в том же самом OpenCV до сих пор актуальна).
Поэтому оптимальнее распознавать людей не как часть изображения с камеры, а как «скелет», полученный специализированным сенсором с использованием активных дальномеров. Это позволяет как отслеживать человека (или несколько человек), так и работать с отдельными частями «скелета».
В терминологии Microsoft Kinect SDK эти отдельные части называются «Joints». В случае работы сенсора по умолчанию их состояние обновляется каждые 30мсек.
Каждый Joint содержит:
- данные о положении соответствующей точки скелета в пространстве (X-, Y- и Z-координаты) относительно оптической оси сенсора,
- cостоянии видимости точки (определяется, не определяется, положение рассчитывается сенсором),
- кватернион вращения относительно предыдущей точки
На рисунке представлены Joint’ы, обрабатываемые Kinect v2 на примере картины Леонардо Да Винчи «Витрувианский человек».
Таким образом, работая с бесконтактным сенсором, разработчик получает возможность анализа действий человека или группы людей (например, у Kinect возможно одновременно отслеживать 6 человек в кадре). А что делать с полученным массивом данных – зависит от конкретной прикладной задачи.
Области применения таких сенсоров – бесконечны. Основными направлениями моей работы являются реклама и медицина.
Рассмотрим рекламное направление. Сейчас, для работы интерактивных рекламных стендов, необходимо несколько основных модулей, а именно:
- Сами рекламные материалы
- Сбор статистики по степени привлечения внимания посетителей на показ той или иной рекламы, что интересно рекламодателю
- Возможность удаленной конфигурации рекламного стенда
- Привлекающий эффект, который отличает интерактивный стенд от обычных ТВ с роликами и печатных баннеров
Если с самими рекламными материалами все понятно, то для сбора статистики как раз и используются сенсоры. Например, любому рекламодателю интересно, сколько человек обратили внимание на его рекламу? Мужчины, женщины или дети? В какой время они чаще всего останавливаются? Сколько времени они смотрят на рекламу, а не просто стоят рядом со стендом, копаясь в телефоне? С помощью сенсора это можно отследить и сделать отчет в удобной для рекламодателя форме.
Для удаленной конфигурации используется самая, наверно, простая и очевидная модель – Google Calendar. Каждый календарь привязан к определенному стенду, и, будучи в Санкт-Петербурге, можно управлять стендами в любой точке мира.
А привлекающий эффект – это тот самый функционал, из-за которого стенд и называется интерактивным. Можно сделать игру, управляемую человеком, с логотипом спонсора, реализовать приветственный звук при появлении человека в поле зрения сенсора, сделать QR-код со скидочным купоном в магазине рекламодателя если, например, человек минуту стоял и смотрел рекламу. Варианты ограничиваются в основном фантазией, а не техникой.
Зачем использование сенсоров в медицине? Ответ на этот вопрос банален и прост – удешевление стоимости обследований и реабилитации при сохранении точности.
Одним из ярких примеров являются разработки в области стабилометрии – науки об отклонениях центра тяжести при ходьбе, что влияет на осанку, позвоночник и правильную работу мышц. Можно ездить в специальные центры на специальные тренажеры, что является очень дорогой процедурой, которую, при этом, не везде оказывают. А можно приобрести домой сенсор и программное обеспечение, подключить к телевизору и выполнять диагностические тесты, результаты которых автоматически отправляются лечащему врачу.
Другим примером является реабилитация на дому. Ни для кого не секрет, что в реабилитации существуют две основных проблемы – дорогой вызов врача на дом (что нужно делать несколько раз в неделю) и нежелание реабилитирующегося человека выполнять однотипные упражнения в течение долгого времени. Для этого было разработано несколько основных постулатов системы, а именно:
- Удаленное составление программ реабилитации врачом для удаленного же контроля за выполнением. Например, врач из Санкт-Петербурга может удаленно контролировать выполнение прописанного пациенту из Владивостока курса упражнений, а при необходимости – изменять упражнения, увеличивать или уменьшать сложность и интенсивность занятий, изучать статистику в реальном времени и т.д.
- Геймифицированный процесс выполнения упражнений. Если современные тренажеры в основном ориентированы на выполнения базовых движений для разработки поврежденных мышц и суставов, то интерактивная система реабилитации позволяет выполнять упражнения, в буквальном смысле, играючи. Например, с помощью всем известного тетриса, который вместо нажатия кнопок управляется назначенными врачом движениями (поднятием левой руки, отведением правой ноги, наклоном головы вперед и так далее).
- Реализация критериев выполнения упражнений. При работе вместе с пациентом врач контролирует выполнение упражнения с помощью подсказок и тактильной помощи (например, нельзя сгибать руку в локте при отведении руки – это влияет на работу плечевого сустава). Интерактивная система оценивает относительные углы между Joint’ами и, в случае выхода за допустимый диапазон, делает предупреждение пользователю и не засчитывает неправильное выполнение упражнения.
Такая система позволяет сократить как время (и врача, и пациента – на поездки друг к другу), и сохранить необходимую для прогресса точность выполнения упражнений.
Для реализации проектов используется стек технологий .NET. Работаю Windows-only :). Да, из-за этого приходилось несколько раз писать wrapper’ы для native SDK (как яркий пример, я делал адаптеры для Intel RealSense SDK, так как на тот момент это был только unmanaged код). Это стоило немалого количества времени, нервов и седых волос, но позволило подключать библиотеку к разным проектам, разработанным на платформе Windows.
Стоит обратить внимание, что основные сенсоры (Kinect и RealSense) требуют для разработки разрядность x64.
Для упрощения работы клиентских приложений был реализован отдельный сервис, работающий с сенсором, запаковывающий данные в удобный для нас формат и рассылающий по подписчикам данные с помощью TCP-протокола. Кстати, это позволило создать систему, работающую с несколькими сенсорами, что позволяет значительно улучшить точность распознавания.
Диаграмма в упрощенном виде показывает преимущества использования нескольких сенсоров для слежения за объектом. Синие точки (joints) устойчиво определяются первым и вторым сенсором, зеленые – только вторым. Естественно, разработанное решение реализовано под «N-сенсорную модель».
Детальный процесс обработки данных с нескольких сенсоров представлен на диаграмме выше.
При практически любой разработке один из главных критериев для исполнителя – интерес. После так как несколько лет подряд я реализовывал однотипные веб-приложения на ASP.NET и PHP, хотелось чего-то нового и более, скажем так, умного. В веб-разработке (за редким исключением) все уже придумано. Ну сайт, ну сервис, ну база данных. В случае работы с сенсорами всегда возникают интересные и неоднозначные задачи, например, «а как бы передавать hd-video с сенсора по TCP, чтобы это не вешало систему?» (пример из жизни, хоть и было сделано очень давно). И сложно предугадать, что для улучшения и развития системы понадобится следующим. Понятно, что есть основной спринт разработки, где расписаны глобальные и заранее запланированные улучшения. Но такие локальные подзадачи – это одно из самых интересных в ремесле программиста.
Такую работу точно не назвать рутинной. Если кому-то стало интересно узнать более подробно, или кто-то захочет узнать, с чего начать в этой сфере – я открыт для общения. Готов ответить на любые вопросы :) And may the force be with you!
Комментарии (6)
verysimplenick
21.11.2018 15:08Что Вы понимаете под «адекватными примерами»?
код решения какой-либо практической задачи (упрощенной)
MZhukov Автор
21.11.2018 17:39Эта статья была написана, чтобы поделиться с сообществом наболевшими тезисами из разряда «чем я занимаюсь» и «на что я трачу свою жизнь» :) Если Вы искали гайд «how to», то вы невнимательно читали.
verysimplenick
Какая-то вода, где адекватные примеры с D435?
MZhukov Автор
основным сенсором для нашей библиотеки является, все-таки, MS Kinect V2. Что Вы понимаете под «адекватными примерами»?
kovserg
А разве он не снят с производства?
MZhukov Автор
У нас есть запас. При этом MS все-таки выпустит новую партию, и мы, как gold-партнеры MS, одни из первых в очереди на получение новых Кинектов.