Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

Песочница

Наташа 7 марта 2011 в 02:49

Установка Kinect в Windows 7

  • Чулан *
Введение
Данная статья родилась в процессе создания простенькой программы на C#, которая получает изображение с обычной USB камеры и сохраняет картинку раз в 5 секунд на жесткий диск. Так получилось, что у меня есть только встроенная камера моего ноутбука, а для решения поставленной задачи камера должна смотреть через окно на улицу, покупать новую совсем не хотелось, поэтому мой взгляд обратился к стоящему на телевизоре Kinect`у. Соответственно первоочередная задача - подключить устройство к компьютеру, с ней и будем сейчас разбираться.

Забегая вперед скажу, что использовать Kinect вместо камеры я еще не пробовал, т.к. нашлась обычная usb веб-камера, но эту затею я не оставлю, т.к. обертки kinect`а для c# уже есть.

Необходимые условия
Сразу хочу оговориться, что все операции проводились в Windows 7 Ultimate, установленной на MacBook через BootCamp, уверен на 99.9% что это значения не имеет, но упомянуть будет не лишним.

Итак, что же нам понадобится:

  • Kinect
  • Компьютер
  • ОС Windows 7
  • Visual Studio 2010 (с установленной поддержкой C++)
  • Интернет (для загрузки необходимых библиотек)
Подготовительный этап
Возможно, готовые драйверы для работы Kinect можно найти где-то на просторах интернета, но согласитесь, что созданное своими руками приятнее, понятнее и за ошибки ругать кроме себя некого. Поэтому мы начнем с загрузки всех необходимых программ и библиотек.

Для удобства я создам папку C:\OpenKinect, в которой будут происходить все работы.

libusb-win32
Это порт библиотеки libusb, которая позволяет получать доступ к различным USB устройствам из клиентских приложений.
Скачиваем файл с именем вида libusb-win32-bin-x.x.x.x.zip из последнего билда, в моем случае это был билд с номером 1.2.2.0 и распаковываем его в C:\OpenKinect\Libusb-win32 (имя папки не принципиально, я назвал для удобства, это верно для всех папок, которые мы будем создавать).

pthreads-win32
Pthreads является набором библиотек, реализующих простую работу с потоками по стандарту POSIX. Проект очень древний, обновлений не было с 2006 года, поэтому даю прямую ссылку на необходимый файл, который необходимо будет разархивировать в папку C:\OpenKinect\Pthreads-win32.

Также необходимо будет скопировать файл C:\OpenKinect\Pthreads-win32\Pre-built.2\lib\phtreadVC2.dll в папку \Windows\System32\

Glut
Это библиотека для работы с OpenGL. Еще один старый проект, и еще одна просто ссылка на файл, который необходимо распаковать в папку C:\OpenKinect\Glut
glut-3.7.6-bin.zip

Копируем файл C:\OpenKinect\Glut\glut32.dll в \Windows\System либо в любую папку, которая упомянута у нас в переменных среды (PATH)
Кроме этого необходимо скопировать файл C:\OpenKinect\Glut\glut.h в папку VC\include\GL вашей VS2010, если папки GL нет, то нужно ее создать. Файл C:\OpenKinect\Glut\glut32.lib в папку VC\lib. В моем случае пути выглядят следующим образом:

  • C:\Program Files\Microsoft Visual Studio 10.0\VC\include\GL
  • C:\Program Files\Microsoft Visual Studio 10.0\VC\lib
Сборка проекта
Git
Естественно мы не сможем обойтись без исходных файлов проекта libfreenect, поэтому качаем Git, устанавливаем его, во время установки выбираем опции «Run Git from the Windows Command Promt» и «Check-out Windows-style, commit Unix-style line endings» .
Git-1.7.4-preview20110204.exe

Следующим шагом открываем командную строку и последовательно вводим следующее (парсер преобразует адрес в ссылку, поэтому я добавил лишний пробел между https:// и github.com, его нужно убрать):
cd c:\OpenKinect
git clone https:// github.com/OpenKinect/libfreenect.git
cd libfreenect
git branch --track unstable origin/unstable
git checkout master
git pull
В результате мы получим папку с исходниками C:\OpenKinect\libfreenect

CMake
Утилита, которая поможет нам собрать все наши библиотеки в один проект. Загружаем программу с сайта, на данный момент последняя версия 2.8.4, устанавливаем, во время установки выбираем опцию «Add CMake to the system PATH for all users»

После установки запускаем файл cmake-gui.exe. В первой строке выбираем путь к папке с исходниками, у нас это C:/OpenKinect/libfreenect, вторая строка - папка, где будет собранный проект C:/OpenKinect/Drivers. Ставим галочки на Grouped и Advanced, нажимаем кнопку Configure, в открывшемся окне выбираем Visual Studio 10 и нажимаем кнопку Finish. Программа отработает с ошибкой, т.к. не указаны пути к нашим библиотекам, укажем так, как показано на скриншоте и дважды нажмем кнопку Configure.

Теперь у нас не должно быть ошибок и можно смело нажимать кнопку Generate, в результате в папке C:\OpenKinect\Drivers у нас окажется проект, который нам необходимо будет построить в VS2010.

Visual Studio 2010
Открываем в VS2010 наш свежеиспеченный проект из папки C:\OpenKinect\Drivers (файл libfreenect.sln) и построим его (у меня почему-то проект строился только со второго раза). Если все прошло без ошибок, то мы должны получить папки C:\OpenKinect\Drivers\lib\Debug и C:\OpenKinect\Drivers\bin\Debug, первую из которых нужно добавить в PATH.

На этом этап сборки завершен и переходим непосредственно к подключению Kinect`a

Подключение Kinect
Здесь достаточно все просто. Подключаем Kinect, система его определит как Xbox NUI Motor и не сможет найти драйверы, поможем ей в этом. Через диспетчер устройств находим нашего страдальца, выбираем опцию «Обновить драйвер» и указываем папку C:\OpenKinect\libfreenect\platform\windows\inf, система запросит подтверждение на установку неподписанного драйвера, даем свое согласие, после этого на Kinect`е должен замигать зеленый диод и в списке устройств должны появится еще два неопознанных устройства «Xbox NUI Camera» и «Xbox NUI Audio» , устанавливаем для них драйвера из папки C:\OpenKinect\libfreenect\platform\windows\inf.

На этом все наши работы закончены, осталось только проверить как все работает.

Тестирование
Для проверки дееспособности Kinect мы воспользуемся тремя утилитами из папки
  • C:\OpenKinect\Drivers\bin\Debug:
  • glpclview.exe - Показывает возможности 3D камеры Kinect
  • glview.exe - Показывает работу обычной камеры
  • tiltdemo.exe - Задействует моторы Kinect
Вот и результат:

P.S. Если вы захотите написать свою программу для работы с Kinect, то в папке C:\OpenKinect\libfreenect\wrappers есть обертки под множество языков.

При написании статьи использовалась информация с сайта

Про Кинект уже написано немало разнообразных обзоров. Поэтому, мой обзор будет несколько сумбурный. Не стремлюсь описать все потаенные стороны этого девайса. Остановлюсь на практической составляющей и краткой истории.
А экскурс в историю начну я, пожалуй, с обзора игровых приставок.
Существует некая большая троица производителей на рынке игровых консолей.
Nintendo – консоль
Sony – PlayStation 3
Microsoft –

В 2006 году мир сотрясла новость о появлении нового поколения игровых контроллеров, Nintendo опередив время выпустила на рынок . Продажи приставки, благодаря концепции нового контроллера резко пошли вверх. Конкуренты не желая пасти задних, решили не оставаться в стороне и стали готовить свои решения.
В 2010 свой контроллер представила Sony. Контроллер имел более высокую точность распознавания чем свой прямой конкурент. Правда, для нас с Вами этот контроллер не представляет никакого интереса, потому как Sony пожадничала и не оставила возможность подключать Move непосредственно к ПК.
И вот спустя месяц после презентации Sony на сцену триумфально выходит Microsoft со своим революционным контроллером Kinect. Инженеры софтверного гиганта откинули все стереотипы и создали принципиально новый тип контроллера.
Кинект имеет целый ряд преимуществ по сравнению с другими конкурирующими продуктами:

  • не требует дополнительных устройств,
  • оставляет свободными руки,
  • распознает движения всего тела, а не только рук,
  • распознает движения до 5 человек одновременно,
  • распознает голос,
  • не требует зарядки или замены батареек,
  • умеет определять движения и жесты любой сложности.

Фактически, Кинект – это контроллер без контроллера, это устройство способное распознавать обычные движения человека и передавать их компьютеру для обработки.
Итак, не будем вдаваться в подробности работы устройства, остановим свое внимание лишь на том, что контроллер подключается к приставке по средством несколько модифицированного порта USB. Этот факт заметили еще первые пользователи кинекта, поэтому сразу после выхода устройства началась настоящая охота. Сильные миры сего объявили тысячедоллоровые премии хакерам, которые смогут заставить кинект работать на ПК.
Спустя несколько дней были написаны , а через пару месяцев официальные комплекты драйверов презентовали разработчики чипсета и сам Микрософт.
Год спустя, опустив неудачные попытки разработчиков, стоит остановить свое внимание на двух основных комплектах драйверов и наборов для разработчиков под Kinect.
1) PrimeSense OpenNI/NITE Framework от создателей центрального чипа. .
и
2) Microsoft’s Kinect SDK .
PrimeSense первыми создали и открыли свой SDK для ПК программистов.
Поэтому все первые программы для Кинект работают именно под управлением этих драйверов.
Наблюдая за тем как программисты со всего света создают и модернизируют программную среду для работы с контроллером, Микрософт решила пересмотреть свою политику. Они отказались от идеи эксклюзивности Кинекта для консоли XBOX. Контроллеру был дан зеленый свет для выхода на ПК арену.
На данном этапе Микрософт запрещает создавать коммерческое программное обеспечение для своего контроллера. Правда, такая ситуация продлится не долго. Уже 01.02.2012 нам обещан выход финальной версии набора для разработчиков + старт лицензирование коммерческого ПО. Более того, Микрософт всячески способствует разработке ПО для своего контроллера, назначая высокие денежные гранты командам разработчиков. Добавим к этому тот факт что Микрософт обязал всех разработчиков игр выпускать новые игры для XBOX исключительно с поддержкой Кинект. (Ремарка: Подавляющее большинство современных игр вначале разрабатываются под XBOX, а затем портируется на ПК.) Все это позволяет предположить что в ближайшие месяцы мы увидим появление целого комплекса программ, которые будут ориентированы на управление жестами рук и голосом.
Правда, самые нетерпеливые, могут оценить преимущества кинект уже сейчас.
Существует ряд толковых программ, воспользоваться которыми можно и сегодня:
Для этого нам сначала понадобится установить комплект ПО PrimeSense OpenNI/NITE и Microsoft’s Kinect SDK.

После этого, Вам придется в ручную переключать драйвера в диспетчере задач в зависимости от того, какое программное обеспечение Вы выберете:
1) – набор жестов для управление мышкой и различными программами. Использует . Анонсирован переход на Microsoft’s Kinect SDK в ближайшем будущем.
P.S. Проект имеет высокое юзабилити. Ждем новых версий от разработчика.
2) kinvi – полноценный виртуальный интерфейс для работы с ПК при помощи кинекта. Очень мощная и прогрессивная разработка, поддерживает оба типа SDK.
P.S. К сожалению мне не удалось запустить его на русской винде. Программа выпадает с ошибкой открытия конфиг файла.
3) Kinect Mouse Cursor – простоая, но очень полезная в хозяйстве программа, необходимая для эмуляции хвостатого контроллера. Работает на драйверах Microsoft’s Kinect SDK
4) FAAST – оболочка для эмуляции клавиатуры и мышки при помощи кинекта. Отлично подходит для создания конфигов под игры, в которых не задумана поддержка контроллера. Использует PrimeSense Framework. Анонсирован переход на Microsoft’s Kinect SDK в ближайшем будущем.
P.S. Низкое юзабилити. Простота в настройке. Недавно вышла версия 0.10 которая имеет целый ряд доработок.
5) GlovePIE / FreePIE (новая реинкарнация) – огромный инструментарий для захвата движений при помощи кинекта и преобразование их в команды любых других контроллеров. Поддерживает Microsoft’s Kinect SDK и является лучшим на данный момент проектом для использования контроллера с ПК под управлением Windows.
P.S. Проект бесплатный. Разработчик не богатый человек. Без внешней поддержки ему будет тяжело тянуть на себе такую махину.
6) Win&I , kinclick и другие. Существует еще масса старых проектов от разных разработчиков. Как правило эти проекты имеют ограниченный функционал и на данный момент заморожены.
P.S. Win-and-I – продукт платный. Но настойчивые всегда смогут найти лекарство от жадности. 😉 Не смотря на именитого разработчика, мне продукт не понравился. Слишком много косяков в Wibdows 7.

Скачать файлы можно во вложениях или на сайте производителя.

Итак, что ожидает обычных пользователей в ближайшее время?
Во первых мы можем ожидать активного роста приложений с поддержкой распознавания движений, во вторых, в конце февраля выйдет бета версия windows 8, которая должна иметь глубокую интеграцию с кинект технологиями (распознавание лица, скроулинг и перемещение при помощи движений рук, голосовое управление).
Опираясь на вышеперечисленный анализ можно быть уверенным, что Микрософт готовит нечто огромное. Они готовят революцию в мире контроллеров. Однажды Микрософту удалось изменить ход истории, выпустив на свет OS Windows 3.1

Итак, как же приучить Кинект работать с ПК?
1) для начала купите кинект.
Его стоимость будет колебаться от 100 (за б.у. девайс в штатах) до 300-400 за свеженький вариант девайса, который адаптирован для работы с ПК.
Если вы приобрели вариант кинекта для XBOX, то Вам еще понадобится переходник со стандартного разъема кинект на USB.
Переходник можно легко купить в магазине или сделать самому. Фактически стандартный разъем кинекта – это те же 4 контакта USB + 1 контакт 12 вольт для работы двигателя камеры. 12 вольт можно взять с блока питания Вашего компьютера (любой желтый провод).
2) нужен телевизор. Конечно, монитор тоже подходит, но для полноты эффекта лучше использовать именно ТВ. К тому же, версия кинекта для XBOX имеет слепую зону: 50 см, а значит находиться желательно на расстоянии не менее чем метр от устройства.
3) правильно разместите кинект. Желательно, по середине ТВ, на 15 см ниже или выше кромки экрана. По опыту, даже если Вы разместите его “сикось на кось” и под углом 90 градусов, работать девайс будет, но лучше все же соблюсти рекомендации разработчика. Для правильного размещения необходимо установить контроллер на специальную подставку – , если у Вас его нет, то Вы всегда можете .
4) определитесь с комплектом драйверов. Я бы посоветовал избрать Microsoft kinect SDK. Он перспективней. Рискну предположить, что если Микрософт не наломает дров (уже начал ломать ), то все конкурентные комплекты драйверов в ближайшие 6 месяцев уйдут в тень и поддержка их софта будет бессмысленна.
К тому же лучшее ПО уже сейчас работает именно на драйверах Микрософта. Хотя, и тут зарыта одна собака. Я бы посоветовал использовать последнюю версию. На данный момент прошло всего 11 дней с моменту выхода финальной версии SDK, а это значит, что все существующие программы пока еще адаптированные под версию Бета 2 и не совместимы с финальной версией. Кстати, одним из преимуществ оригинального СДК является то, что в комплекте идет специальное ПО, которое позволяет использовать ваш контроллер как высококачественный 3D сканер. Вы сможете сканировать объекты, а затем легко и просто отсылать их на ваш для печати.

Это все, теперь Вы можете полноценно использовать кинект на Вашем компьютере .
Попробуем воспользоваться им на практике.
Методы применения кинекта в повседневной жизни таковы:
1) Самый простой способ. – Это использовать кинект как высококачественную камеру и микрофон.
Как это сделать?
– Микрофон будет работать сразу после установки Microsoft SDK и дополнительных манипуляций не требует.
– С камерой все немного сложнее.
Для начала необходимо скачать файл
Затем зарегистрировать его в системе примерно такой строчкой “c:windowssystem32regsvr32.exe KinectCam.ax
Так же, может оказаться что у Вас на компьютере не хватает определенных библиотек. В этом случае Вам необходимо докачать их и переписать в папку с файлом
Скачать все необходимые файлы можно во вложении.
После всех этих манипуляций Skype и другие программы начнут видеть Ваш кинект как обычную камеру.
Теперь, проверьте работу камеры с помощью Скайпа, а затем пройди по адресу C: Users AppData Local KinectCam config.ini
В этом файле можно установить угол наклона камеры, а также другие настройки

2) Для управления всевозможным ПО . По причине того, что Микрософт запрещала выпускать коммерческое ПО до выхода финального SDK, стоящих программ для кинекта сейчас не так уж и много.
Могу посоветовать пару программ для управления курсором и windows в целом: или Win&I . Эти программы староваты, зато имеют готовые предустановки для нескольких плееров,браузеров и других программ. У меня они работать нормально не захотели, вероятная причина: новые дрова или новая ОСь.
Использовать их можно, но с рядом существенных оговорок.
Так же, можно использовать программу-конструктор GlovePIE или его новую версию FreePIE, функционал огромный, но для нее готовых скриптов нет, необходимо переделывать под свои нужды чужие скрипты.

3) Третий способ самый правильный. Кинект создавался именно для игр. Только в играх можно раскрыть весь потенциал этого устройства.
Я бы условно поделил все игры на три группы:
3.1) Игры специально созданные для кинекта .

Это самый правильный способ получить удовольствие от игры. За Вас уже все продумали разработчики. Они придумали жесты, адаптировали под них геймплей. Как раз такие игры выходят под XBOX и именно их нам так не хватает на ПК.
Я встречал всего 4 подобные игры, и все они обычные демки, которые позволяют лишь оценить возможности контроллера:
– SkiRanger
– Shape Game Demo
– MotherNature
– ZombieHoldout
3.2) Простенькие игры для ПК.

Такие как Тетрис, Марио и т.д.
Эти программы имеют простейшее управление, а главное, в них можно играть не используя мышь.
Для управления подобными играми подойдет простейший скрипт. Например .

3.3) Высококачественные 3D игры , разработчики которых никогда и не подумывали о совместимости с kinect’ом

Такие как: Skyrim, GTA 5, Mass Effect 3, Batman: Arkham City , да впринципе любая другая игра, в которую Вы бы хотели поиграть
Скрипты для них сложны и многогранны. Игры от первого и третьего лица просто рождены для этого контроллера, только в них Вы можете руками сотворить заклинание или укрыться от пламени дракона воздушным щитом
Приведу в пример .

За разработку этого скрипта приношу огромное спасибо господину Mpoor.
Скрипт хороший, но требует калибровки. Вы должы стоять перед кинектом на таком расстоянии, чтобы в отладочной строке по оси X и Z высвечивались нули. Для того чтобы идти вперед шагните вперед, ну и так далее. Описание более сложных функций можно найти в комментариях скрипта.
А вот схожий .

Скрипт намного проще предыдущего и работает не так эффективно.

P.S. Играя в ПК Windows игры на kinect не стоит забывать о том, что разработчики не задумывали игру для такого способа управления. Динамика игры, обзоры камеры, скорость перемещения и реакции персонажа, все это задумано под ТТХ , клавиатуры или мышки. При помощи кинекта можно сымитировать любой манипулятор, но кинект не в состоянии изменить саму игру, заставить вашу руки не дрожать, тело не качаться, а голову извечно держаться прямо. Все этого приводит к уменьшению динамики игрового процесса, к ошибочным нажатиям и неточным выстрелам из вымышленного оружия =)
Стоит осознать тот факт, что в неадаптированных играх кинект не сможет помочь Вам играть лучше или эффективней, зато, он может наполнить игровой процесс совершенно новыми ощущениями, ну или на худой конец поможет сжечь пару лишних калорий. 😉

Новый виток интереса к самому уникальному контроллеру на планеты вызвало повсеместное засилье Виртуальной реальности. Смартфоны с экранами 2К и более в паре с Google Carfboard сорвали джекпот позволив миллионам людей буквально за гроши погрузится в интересный и красочный мир . Для полноты погружения недостаточно создать 3D картинку и качественный звук, важно так же оцифровать движения человека максимально точно перенеся их в виртуальный мир. Кинект справляется с этой задачей на ура, максимально глубоко погружая своего обладателя в мир компьютерной 3D реальности:

От Microsoft. Но, к счастью или нет, новость о чудо-сенсоре меня не «зацепила». Вспомнил, а точнее напомнили мне о нём спустя год, когда появилась мысль о приобретении, как оказалось, стильного пыле сборника – Xbox 360 Slim. Хоть и включается консоль только во время пьяных вечеринок, положительных эмоций и весёлых видео оставляет после себя не мало. Но наигравшись в стандартные Adventures и Joy Ride , в голову взбрела идея о создании собственной игры для Kinect-а, как оказалось, всё довольно просто…

Идея

Не претендуя на лавры Rovio , Halfbrick и им подобных, решено было создать простую (как тогда ещё думали, для узкого круга знакомых) игру. Идея игры родилась сама собой, после того, как было озвучено слово «простая», тут же вспомнились портативные электронные игры - «Электроника». Да, да…. те самые PSP – 80-х.

Как нельзя лучше, под наши задумки, подошла самая популярная игра из серии - «Ну, погоди!». Определившись с игрой и затарившись пивом, началась работа.

Реализация

Из мягкого использовали:

  • Visual Studio C# 2010
  • Microsoft XNA 4.0
  • Kinect SDK (в начале это была beta, позже пересели на версию 1.5)
  • CorelDRAW
Твёрдого и жидкого:
  • Kinect
  • Пиво, сухарики

В первой версии игры, за основу была взята оригинальная графика классической «Ну, погоди!», управление производилось с клавиатуры. Этого было достаточно для тестирования и настройки всех компонентов. Убедившись, что всё работает, началась работа над взаимодействием игры с Kinect-ом.

Так-как волк имеет всего четыре позиции, следовательно и у игрока их тоже четыре. Управление решено было сделать наиболее естественным и понятным, то есть для ловли яиц, игрок должен повторять движения волка в игре.

Для определения позиции занимаемое игроком, нам потребовалось всего 6 отслеживаемых сенсором точек:

Rh = skeleton.Joints; lh = skeleton.Joints; rs = skeleton.Joints; ls = skeleton.Joints; rk = skeleton.Joints; lk = skeleton.Joints;

  • rh – правая рука/кисть
  • lh – левая рука/кисть
  • rs – правое плечо
  • ls – левое плечо
  • rk – правое колено
  • lk – левое колено
Собственно реализация:

If (rh.Position.Y > rs.Position.Y && (rh.Position.Y - lh.Position.Y) <= 0.1 && (rh.Position.X - lh.Position.X) <= 0.1 && (rh.Position.X - rs.Position.X) >= 0.3) { state = 1; } else if (lh.Position.Y > ls.Position.Y && (rh.Position.Y - lh.Position.Y) <= 0.1 && (rh.Position.X - lh.Position.X) <= 0.1 && (lh.Position.X - ls.Position.X) <= -0.3) { state = 0; } else if (lh.Position.Y < lk.Position.Y && (rh.Position.Y - lh.Position.Y) <= 0.1 && (rh.Position.X - lh.Position.X) <= 0.1 && (lh.Position.X - lk.Position.X) <= 0) { state = 2; } else if (rh.Position.Y < rk.Position.Y && (rh.Position.Y - lh.Position.Y) <= 0.1 && (rh.Position.X - lh.Position.X) <= 0.1 && (rh.Position.X - rk.Position.X) >= 0) { state = 3;

Код проверяет позиции суставов, сопоставляя их друг с другом, и принимает решение о позиции волка, если игрок правильно проделал движения. A именно, для того чтобы поймать яйца с верхних ярусов, придётся поднять кисти рук выше своих плеч. А для яиц с нижних ярусов, кисти рук должны находиться ниже, относительно колен игрока.

Доработка игры

Ура всё заработало! Поигравшись пару дней, как это зачастую и происходит, захотелось чего-то большего от игрушки. Не столько в функциональном плане, сколько в её интерфейсе, уж слишком серо, без году 30 летняя игра, смотрится на большом экране.

Решено было её перекрасить, и не просто перекрасить, а заново всё нарисовать. Но так как среди нас ни художников, ни других «карандашей» не нашлось, пришлось прибегнуть к помощи фрилансеров.

карандаши* - так мы ласково называем графических дизайнеров

Тут началось самое интересное, а именно переговоры с дизайнером. Фрилансер упорно перерисовывал всё в своем стиле, кардинально отходя от представленных мною эскизов, но в результате мне удалось добиться от него желаемых результатов.

Таким получился главный герой:

Но как дело дошло до яиц, всплыл вопрос, который интересовал меня ещё будучи совсем юным. А зачем волку яйца…!? Вроде хищник, так не проще ли ему, вместо ловли яиц, вскарабкаться по жёлобу, да и не прихватить с собой пару кур?
Но так как кардинально переписывать игру не хотелось, нужно было придумать что-то такое, что также бы скатывалось (как и яйца) волку в мешок, но при этом выглядело более логичным, учитывая потребности волка в мясе/дичи.

И на замену яйцам, пришли…
Да! Как вы уже догадались - поросята!


не ищите аналогий с упомянутыми выше играми, поросят придумали сами

В виде бонуса в игру были также добавлены три уровня сложности (отличающиеся между собой начальной скоростью скатывания поросят) и таблица рекордов. Так и появилась игра, с вполне логичным названием, Hungry Wolf.

Пара скришотов:

Ну вот собственно и всё. Спасибо тем, кто дочитал или проскролил до конца, если есть вопросы о технической реализации или какие другие – задавайте, отвечу.

Сенсор Kinect разработан для Xbox 360 и позволяет играть в игры без всяких приспособлений в руках. Появившись в ноябре 2010 года, он стал самым продаваемым электронным устройством в мире: за первые 2 месяца было продано более 10 млн штук. Изначально сенсор работает лишь с консолью, но при помощи ловких движений рук ты сможешь заставить его работать с PC, а он поможет тебе поддерживать физическую форму!

Прежде чем втыкать Kinect в компьютер, разберемся с его внутренностями. Наш экземпляр, который дали помучить ребята из xbox-zone.ru , разбирать мы не решились, да и незачем - на сайте ifixit.com опубликовано подробное пошаговое руководство о том, как разобрать его до винтика. Итак, внутри у Kinect’a находятся:

  1. Камера видимого диапазона - обычная RGB-камера, похожа на среднестатистическую веб-камеру: 640x480 и 30 кадров в секунду.
  2. Инфракрасный лазерный проектор, который создает в пространстве сетку из точек.
  3. Камера, снимающая в инфракрасном спектре, которая регистрирует изображение этой сетки.
  4. Стереомикрофон с продвинутой системой шумопонижения - для правильного голосового управления.
  5. Мотор, регулирующий положение датчика.
  6. Чип PrimeSensor - творит главную часть магии, обрабатывая картинку с ИК-камеры, дает на выходе - 3D-картинку.

Подключение

Kinect’ы, продающиеся в коробках, уже имеют все необходимое для работы, их можно подключить к компьютеру напрямую. Если же сенсор из комплекта с новым xbox’ом, то к нему потребуется специальный адаптер, так как разъем USB там нестандартный, с дополнительным питанием 12 В (сенсору слабенького тока от порта недостаточно). Оригинальный блок питания можешь купить в магазине Microsoft за $34,99, а сэкономить получится, заказав китайский клон в три раза дешевле. Теперь можешь подтыкать к компьютеру и начинать возиться с программной частью.

Драйвера

Как только Кинект появился, компания Adafruit объявила конкурс с призом в $3000 тому, кто создаст открытый драйвер для сенсора. Не прошло и недели, и денежки уже лежали на счету у победителя - Гектора Мартина, а первый работоспособный драйвер - в репозитории на github.com/OpenKinect/libfreenect . Многого он еще не умел, но главное - выводить карту глубин в окне OpenGL у него уже получалось. Драйвер продолжает развиваться, и у него есть преимущества - он распространяется под лицензией apache 2.0, которая позволяет использовать его в коммерческих проектах, и у него есть обертки для целой кучи языков (java, matlab, python, ruby).

Но тебе лучше взять другой драйвер. Сердце Kinect’а разработано не великой и могучей Microsoft, а молодой компанией PrimeSence. Для них Kinect - всего лишь один продукт, использующий их технологию NUI (natural user interface) - естественного пользовательского интерфейса, который позволяет человеку взаимодействовать с системой визуально, при помощи жестов, а также при помощи голосовых команд. Они желают повсеместного распространения своего детища и активно помогают open source-сообществу. В их репозитории на гитхабе лежит драйвер для референсного сенсора. Напрямую с кинектом он не работает, но его допиленная версия справляется с этой задачей отлично!

Скачать его можно, например, с сайта проекта . После установки загляни в диспетчер устройств - в разделе PrimeSensor должно быть три устройства: Kinect Camera, Kinect Motor и Kinect Audio. Но кроме самого драйвера, тебе потребуются библиотеки OpenNI и PrimeSense NITE.

OpenNI - это некоммерческая организация, которая стремится создать открытый стандарт для "Естественных взаимодействий" (Natural Interactions). Также она разработала OpenNI - одноименный фреймворк с открытым исходным кодом, созданный, чтобы взаимодействовать с одной стороны - с оборудованием, и с более высокоуровневыми программными прослойками - с другой стороны. Развивается он бурно, и тебе потребуется последняя нестабильная его версия, загрузить которую можно .

NITE - это промежуточное ПО, которое решает задачи определения жестов для управления компьютером и играми и работает в связке с OpenNI. Хотя это и коммерческий продукт, но его разработчик, PrimeSence, распространяет бесплатный ключ, которым может пользоваться кто угодно. Вот этот ключ - 0KOIk2JeIBYClPWVnMoRKn5cdY4=. Его надо ввести при установке. Загрузить NITE можно по ссылке .

После нужно изменить конфигурационные xml-файлы.

Правильные версии можно загрузить по адресу .

Отличаются они от тех, что уже предустановленны, только указанием серийного ключа. Распакуй архив и скопируй файл SampleConfig.xml из папки KinectXMLsOpenNI в папку Data внутри каталога OpenNI (вероятнее всего, он внутри папки C:Program Files), а файлы из папки KinectXMLsNITE - в C:Program FilesPrime SenseNITEData.

Руки вверх, в позу Пси!

Все готово, теперь можно пробовать кинект в деле. Для начала посмотри, какими готовыми программами ты можешь воспользоваться. Faast (Flexible Action and Articulated Skeleton Toolkit) - это инструментарий, который позволяет завязать движения пользователя на различные нажатия кнопок, перемещения мыши или действия джойстика. Таким образом можно подобрать набор действий, чтобы весьма правдоподобно играться в любую игру на PC. Загрузить его можно с projects.ict.usc.edu/mxr/faast/ .Пользоваться программой нетрудно. Первым делом нужно загрузить файл конфигурации, написать который ты сможешь сам.

Например, так он будет выглядеть для World of Warcraft:

# связь входного и выходного действия

Формат:

названиевходного действия порог типвыходного действия действие

left_arm_out 10 key a
left_arm_across 10 key d
lean_forwards 15 key w
lean_backwards 10 key s
left_arm_forwards 20 key tab
right_arm_forwards 20 key 1
right_arm_up 12 key 4
right_arm_across 15 key 2
right_arm_out 15 key 3

После этого необходимо откалибровать пользователя, чтобы программа поняла, где у тебя руки, а где ноги. Для этого необходимо встать в позу Пси, а проще говоря, встать ровно и поднять руки вверх, словно на тебя навели ствол нехилого калибра. После того как опознание завершится - поверх тела будет изображен схематичный человечек из прямых линий. Все - теперь компьютер покорно следит за твоими жестами.

Kinemote

Другая программка для универсального управления. Из коробки позволяет управлять мультимедиа-центром XBMC и просто курсором мыши. Приятна она тем, что не требует калибровки и переводится в активный режим заранее выбранным жестом. Новые версии периодически выкладываются на сайте kinemote.net . А после последнего обновления в комплекте появилась еще и программа, позволяющая управлять не всем телом, а пальцами рук, правда, несмотря на все попытки, у меня она так и не заработала.

Ultraseven

Ультра Севен - это японский супергерой из конца шестидесятых, который бы мог и потеряться в памяти поколений, если бы не кинект и программка Ultraseven. Благодаря этой маленькой игрушке каждый может предстать в облике этого персонажа. Чтобы одеть его костюм, нужно встать в позу Пси. А уже оказавшись в красном облачении, можешь прикладывать руки к ушам, чтобы стрелять из смертоносного лазера и запускать бумеранг, торчащий из головы в виде ирокеза. Кроме тебя самого, отслеживаются и другие объекты в комнате - лучи будут пролетать за ближе лежащими предметами. Да, важное замечание - игрушка требует достаточно серьезной видеокарты, а на слабом железе работать будет очень нестабильно. Сайт проекта: code.google.com/p/kinect-ultra/ .

В здоровом теле - здоровый дух

Теперь - самое главное! О том, как написать свою программу, которая будет использовать возможности чудо-сенсора, а заодно и поддерживать бодрость тела: после часа работы за компьютером она заблокирует клавиатуру и мышь и не позволит пользоваться вновь, пока не сделаешь десять приседаний. В уже установленном тобой пакете OpenNI есть примеры проектов (как на C++, так и на C#) для Microsoft Visual Studio 2010, которые можно дописать для своих задач. Но эти примеры несколько запутаны, и будет проще воспользоваться оберткой, которую написал греческий студент Вангос Птернеас. Найти его библиотеку - Nui.Vision.dll - можно на его сайте . С ней строчек кода понадобится гораздо меньше.

Сначала создай в Visual Studio проект WPF Application и добавь в него ссылки на библиотеки OpenNi.net.dll (она находится в той папке, куда установлен OpenNI) и Nui.Vision.dll (ее можно положить в папку проекта).

Теперь разберемся с работой сенсора. В описании формы MainWindow.xaml выстави размер 662x520 и добавь к ней изображение, в которое будет выводиться картинка с сенсора, и холст, на который будет выводиться дополнительная информация:


using System.ComponentModel; // нужен для обработки в фоне
using Nui.Vision; // работа с кинектом

Затем объяви новый объект NuiUserTracker и инициализируй его в конструкторе. Да, нужно не забыть скопировать файл SamplesConfig.xml из директории OpenNI в папки Debug и Release твоего проекта.

В классе формы объяви все переменные:

NuiUserTracker _skeleton; // объявление объекта трекера
BackgroundWorker _worker = new BackgroundWorker(); // фоновый обработчик
double topY = 0; // верхнее положение приседания
double bottomY = 0; // нижнее положение приседания
int numOfBobs = 0; // счетчик полуприседаний
bool bottomPosition, topPosition; // биты, в которых фиксируется пересечение линий
Ellipse ellipse = new Ellipse // кружочек на груди
{ Fill = new SolidColorBrush(Colors.AliceBlue), Width = 20, Height = 20 };

В конструкторе инициализируй обработчик событий:

// инициализируем объект и подгружаем конфиги кинекта
_skeleton = new NuiUserTracker("SamplesConfi g.xml");
// объявляем функцию, которая будет обрабатывать
// событие перемещения пользователя
_skeleton.UsersUpdated += new NuiUserTracker.UserListUpdatedHandler(Skeleton_UsersUpdated);

Теперь в переменной NuiUserListEventArgs.Users представлены все обнаруженные пользователи и набор координат всех распознанных частей их тел. Далее напиши обработчик события смены координат пользователя. Как только у тебя появляется ненулевое значение вертикальной координаты шеи пользователя - считай, что он готов приседать. Потом добавь две линии. Одна чуть ниже шеи, а другая - чуть выше пояса. Одним приседанием будет считаться двойное пересечение обеих линий: сначала - сверху вниз, а потом - снизу вверх. Отслеживается пересечение линий шеи (хотя визуально она где-то на груди). Такой вариант не идеальный - можно схалтурить, нагибаясь, или подойдя поближе к сенсору.

// проделываем все манипуляции для каждого пользователя
// (хотя приседать они будут под одну гребенку)

foreach (var user in e.Users) {
// если впервые нашлась шея
if ((topY == 0) && (user.Neck.Y !=0))
{
// определяем положение верхней линии
topY = user.Neck.Y+20;
Line topLine = new Line { // определяем верхнюю линию
Y1 = topY,X1 = 0, Y2 = topY, X2 = 662,
Stroke = new SolidColorBrush(Colors.Red),
StrokeThickness = 4 };
// рисуем верхнюю линию на холсте
LayoutRoot.Children.Add(topLine);
// определяем положение нижней линии
bottomY = user.Torso.Y + 20;
Line bottomLine = new Line { // определяем нижнюю линию
Y1 = bottomY, X1 = 0, Y2 = bottomY, X2 = 662,
Stroke = new SolidColorBrush(Colors.Blue),
StrokeThickness = 4 };
// рисуем нижнюю линию на холсте
LayoutRoot.Children.Add(bottomLine);
// рисуем шею на холсте
LayoutRoot.Children.Add(ellipse);
}

При каждом изменении координат нужно проверять, не произошло ли приседания:

ellipse.Margin= new Thickness(user.Neck.X, user.Neck.Y, 0, 0); //перемещаем кружочек вслед за шеей
// ставим флажок верхнего положения
if (user.Neck.Y+5 < topY) topPosition = true;
// ставим флажок нижнего положения
if (user.Neck.Y + 25 > bottomY) bottomPosition = true;
if (topPosition && bottomPosition)
{ // если оба флага есть
numOfBobs++; // половину приседания в копилку
topPosition = false; // сбрасываем флажки
bottomPosition = false;
}
// если полуприседаний набралось двадцать штук - значит все,
// выключаем программу
if (numOfBobs >= 20)
{
Application.Current.Shutdown(); // выходим из программы
}

Осталось разобраться с таймером и блокировкой клавиатуры и мыши. Сперва в App.xaml.cs нужно добавить еще одно пространство имен:

// работа с неуправляемым кодом, понадобится для
// блокировки клавиатуры
using System.Runtime.InteropServices;

Потом объявить метод блокировки клавиатуры и мыши. Удобно воспользоваться функцией Windows API BlockInput:

public partial class NativeMethods
{

public static extern bool BlockInput(
bool fBlockIt);
}

Для таймера можно создать отдельную форму и указать ее в App.xaml в качестве точки входа в программу. В код этой формы нужно добавить нэймспэйс работы с таймерами:

using System.Timers;

Объявить таймер:

private static System.Timers.Timer TheTimer;

private void button1_Click(object sender, RoutedEventArgs e)
{
// ставим таймер на час
TheTimer = new System.Timers.Timer(3600000);
// как пройдет - блокируем комп
TheTimer.Elapsed += new ElapsedEventHandler(BlockPC);
TheTimer.Enabled = true;
}

А при срабатывании таймера будет блокироваться пользовательский ввод и открываться окошко с видео с кинекта:

void BlockPC(object source, ElapsedEventArgs e)
{
App.NativeMethods.BlockInput(true); // блокируем ввод
// создаем экземпляр формы с картинкой от сенсора
MainWindow w = new MainWindow();
w.Show();

}// и показываем ее

Осталось не забыть добавить отмену блокировки перед выходом из программы:

// возвращаем пользователю клавиатуру и мышь
App.NativeMethods.BlockInput(false);

Если что-то не получилось, то полный код проекта и все файлы, необходимые для запуска, ты сможешь найти на .

Одного кинекта мало

Однако, эксперименты с кинектом одним кинектом ограничиваются! Если к сенсору добавить проектор - то получится система дополненной реальности, хочешь подсвечивай отдельные объекты в комнате, рисуй светом на стенах или создай систему, которая бы интеллектуально гоняла кота за световым пятнышком. Один кинект дает карту глубин с одной стороны, а если их взять 3 или 4 и расставить по углам, то можно получить полную трехмерную картину внутреннего пространства. Настоящий 3d-сканер, работающий в реальном времени!

Но не все только людям! Еще Kinect придется по вкусу и роботам - еще бы, раньше трехмерные лазерные дальномеры стоили несколько тысяч долларов, а это устройство реализует те же возможности всего за две сотни. Таким образом, можно собрать мощного робота на недорогих серийных компонентах. Например: iRobot Create в качестве шасси, обычный нетбук с установленной Ubuntu и ROS - в роли мозга системы, а Kinect - в качестве датчиков. Именно так и выглядит Willow Garage Turtlebot . Да похожим образом устроен и Bilibot , к которому прикреплена еще и миловидная красная клешня. Плюс уже доступен для заказа за $1200.

Вообще кинект - первый представитель нового класса устройств. Уже готов и его конкурент, изначально нацеленный на работу с PC, - Asus WAVI Xtion. Вероятно, пройдет еще немного времени, и к этой гонке подключатся новые производители, библиотеки обзаведутся обертками для множества языков, и готовые решения войдут в повседневную жизнь, а вид человека, машущего руками перед компьютером, станет обычным делом.

Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
ПОДЕЛИТЬСЯ: