На фоне новостей о проекте AR-гарнитуры North Star от компании Leap Motion, уместно вспомнить об их основном продукте — контроллере Leap Motion (рус. скачкообразное движение), который представляет собой USB-устройство, отслеживающее в области пространства над собой движение рук, пальцев и карандашей, ручек.
Как видно по фотографиям прототипа экспериментальной платформы Project North Star — для отслеживания рук пользователя там так же используется контроллер Leap Motion — только закрепляется он над головой таким образом, чтобы его рабочая область приходилась как раз перед пользователем.
Сам контроллер Leap Motion представляет собой небольшую коробочку, подключаемую к USB специальным шнурком, на конце которого интересный сдвоенный разъём из microUSB и какого-то их собственного разъема.
Не буду повторять обзоры контроллера. Кому интересно может почитать:
Обзор Leap Motion
Leap Motion. Впечатления
Текущая цена контроллера: 5-8 тыс. рублей.
Устройство Leap Motion
Устройство контроллера Leap Motion довольно простое. Устройство состоит из двух камер и трёх инфракрасных светодиодов (с длиной волны 850 нанометров).
Разборку и внутреннее устройство контроллера можно посмотреть здесь: Leap Motion Teardown.
Благодаря широкоугольным объективам, камеры имеют широкое поле зрения (150 градусов). Обзорный диапазон контроллера Leap Motion ограничивается примерно 60 см над устройством (программное обеспечение Orion позволяет увеличить его до 80 см). Этот диапазон ограничивается распространением светодиодного света в пространстве, так как за пределами определенного расстояния, определенить положение руки становится намного сложнее. Интенсивность светодиодного света, в итоге, ограничена максимальным током, который можно передать по USB-соединению.
Принцип работы Leap Motion
В отличие от Kinect-а, контроллер Leap Motion не создает карту глубины — вместо этого он применяет специальные алгоритмы к сырым данным датчика.
Программное обеспечение на компьютере (Leap Motion Service) — обрабатывает изображения: выполняется компенсация фоновых объектов и окружающего освещения, а затем изображения анализируются для восстановления трехмерного представления того, что видит устройство.
Выполняется отслеживание соответствия данных для извлечения информации: пальцев и инструментов(ручка/карандаш). Алгоритмы отслеживания интерпретируют 3D-данные и выдают положение объектов. Для обеспечения плавной временной согласованности данных, применяются методы фильтрации. В итоге, служба выдаёт результаты, представленные в виде серии кадров или снимков, содержащих все данные отслеживания в свой транспортный протокол.
Посредством этого протокола, сервис Leap Motion связывается с панелью управления (Leap Motion Control Panel), а также с собственными и клиентскими веб-библиотеками через локальное сокет-соединение (TCP, WebSocket). Клиентская библиотека организует данные в объектно-ориентированную структуру API, управляет историей кадров и предоставляет вспомогательные функции и классы.
Именно здесь клиентское приложение может соединяться с Leap Motion и реализовывать свою логику интерактивного взаимодействия.
Программирование Leap Motion
Простое и удобное SDK к контроллеру, позволяет использовать его для самого разного применения.
Например: Управление роборукой при помощи leap motion.
Для работы с контроллером на Python нужно только три файла библиотеки (Setting Up a Project):
lib/Leap.py lib/x64/LeapPython.pyd lib/x64/Leap.dll
В своём скрипте нужно просто прописать их расположение, что делается очень просто:
import sys sys.path.append("../lib/Leap") sys.path.append("../lib/x86") sys.path.append("../lib")
Нужно обратить внимание, что в составе SDK идут библиотеки только для Python 2.7, но для Python 3 можно пересобрать библиотеку, используя SWIG 2.0.9: Generating a Python 3.3.0 Wrapper with SWIG 2.0.9
Получение изображения с камер Leap Motion
Что замечательно, контроллер не только выдаёт параметры рук и пальцев, но и сами картинки с камер.
Получить их можно от текущего фрейма, через доступ к списку Frame.images().
# # Get Leap Motion camera images # # https://developer.leapmotion.com/documentation/python/devguide/Leap_Images.html import os, sys sys.path.append("../lib/Leap") sys.path.append("../lib/x86") sys.path.append("../lib") import cv2, Leap, math, ctypes import numpy as np def make_npimage(image): #wrap image data in numpy array i_address = int(image.data_pointer) ctype_array_def = ctypes.c_ubyte * image.height * image.width # as ctypes array as_ctype_array = ctype_array_def.from_address(i_address) # as numpy array as_numpy_array = np.ctypeslib.as_array(as_ctype_array) img = np.reshape(as_numpy_array, (image.height, image.width)) return img def run(controller): while(True): frame = controller.frame() image = frame.images[0] if image.is_valid: #display images cv2.imshow('Left Camera', make_npimage(frame.images[0])) cv2.imshow('Right Camera', make_npimage(frame.images[1])) if cv2.waitKey(1) & 0xFF == ord('q'): break def main(): controller = Leap.Controller() controller.set_policy_flags(Leap.Controller.POLICY_IMAGES) try: run(controller) except KeyboardInterrupt: sys.exit(0) if __name__ == '__main__': main()
SDK уже содержит функционал для устранения дисторсии изображений, так что можно рассмотреть вариант использования данного контроллера не только для отслеживания рук, но и как своеобразную ИК-стереокамеру для экспериментов с компьютерным зрением.
Ссылки
Project North Star: AR-гарнитура с мощной технологией отслеживания рук
Unveiling Project North Star
Setting Up a Project
Generating a Python 3.3.0 Wrapper with SWIG 2.0.9
How Does the Leap Motion Controller Work?
Leap Motion Teardown
Camera Images
Leap.Image
По теме
Kinect — новый датчик для роботов?
Kinect: принцип работы и ПО