Kinect for windows игры. Игру для Kinect, от нечего делать. Различия между версиями сенсора Kinect

Сенсор 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. Вероятно, пройдет еще немного времени, и к этой гонке подключатся новые производители, библиотеки обзаведутся обертками для множества языков, и готовые решения войдут в повседневную жизнь, а вид человека, машущего руками перед компьютером, станет обычным делом.

Компанию Microsoft нередко упрекают в том, что она несвоевременно реагирует на зарождение и последующий стремительный всплеск популярности различных технологических направлений. Так было с интернет-сервисами, где Редмонд по факту проиграл борьбу Google, так сейчас происходит со смартфонами, планшетами и фаблетами.

Есть серьёзные опасения, что в этом году корпорация также уйдёт в категорию догоняющих по направлению носимых девайсов, а-ля Google Glass, Oculus Rift, Android Wear и Apple iWatch.

И всё-таки у Microsoft пока остаются кое-какие весомые козыри, конкуренцию которым до сих пор не могут дать ни Apple, ни Google. Одним из таких является сенсор Kinect, второе поколение которого 15 июля стало официально доступно для Windows.

История Kinect, носившего во время разработки кодовое название Project Natal, стартовала осенью 2010, когда первое поколение этого необычного девайса стало доступно в качестве аксессуара к игровой консоли Xbox 360, который, подключаясь к ней, устанавливался сверху или перед телевизором.

Первое поколение Kinect для Xbox 360 поступило в продажу в ноябре 2010

Kinect мог заменить собой стандартный контроллер этой приставки, позволяя управлять специально адаптированными играми с помощью движений и голоса, причём в отличии от Wii Remote или PlayStation Move пользователю не нужно было держать в руках вообще никаких контроллеров.

Поначалу Kinect оказался очень успешен, умудрившись затмить по числу продаж первое поколение планшетов iPad от Apple, которое вышло в том же году. Да, сравнивать сенсор с планшетом весьма странно, но сам факт того, что новинка Microsoft сумела сходу «выстрелить» мощнее, чем продукт именитого конкурента с многомиллионной армией фанатов, заслуживает внимания. Продажи Kinect даже в качестве аксессуара для консоли исчислялись миллионами.

Через полтора года Microsoft закрепила успех, официально выпустив в начале 2012 первую версию Kinect для Windows.

Kinect для Windows стартовал в феврале 2012

Казалось бы: дело в шляпе, остаётся только лишь развивать и развивать удачную идею, но вот как раз с этим, судя по всему, возникли проблемы.

Kinect для Xbox 360 оказался ограничен исключительно различными казуальными играми, фитнес-симуляторами и дальше этого рубежа, к сожалению, не ушёл. Лишь некоторые разработчики серьёзных игр ААА-класса использовали возможность голосового управления с помощью Kinect, основную же фишку сенсора – управление движением в масштабных проектах так никто всерьёз и не задействовал.

Kinect рядом с одной из последних ревизий Xbox 360

Почему? Сложно сказать, есть несколько версий. Например, часть разработчиков говорила о проблемах самого сенсора, другие указывали на крайне слабые характеристики Xbox 360.

Версия для Windows столкнулась с более тяжёлыми проблемами. Дело в том, что Microsoft, как и Sony с Nintendo, совсем не любит выпускать эксклюзивные для консолей Xbox игры на ПК. В итоге Kinect для Windows остался ещё и без игр. Аудитория Windows-версии девайса оказалась ограничена исключительно энтузиастами, использующими Kinect в своих самых различных проектах.

ПО, взаимодействующее с Kinect

Kinect в качестве основы управления летающим роботом

Microsoft торжественно говорила, что уже довольно скоро Kinect для Windows будет интересен не только энтузиастам, но и появится буквально таки везде: производители начнут включать его в комплект поставки с телевизорами, моноблоками, базовые элементы Kinect появятся в ноутбуках и так далее.

Увы, этого «скоро» не случилось и по сей день. Популяризировать девайс Microsoft не смогла. На консолях он остался уделом нетребовательных казуальных игроков, на Windows – компьютерных гиков и энтузиастов.

В 2013 году Microsoft, изрядно подгоняемая конкурентами в лице Sony и Nintendo, анонсировала свою новую Xbox – , вместе с которой впервые был представлен Kinect 2.

Kinect 2.0

Второе поколение сенсора в отличии от первого не являлось отдельным и необязательным аксессуаром для новой Xbox, а шло уже с ней в комплекте. Это очень важно. По сути Microsoft сделала ставку на Kinect 2, как на некую изюминку новой консоли.

Kinect 2 и Xbox One

По началу всё выглядело весьма интересно: консоль с новым мощным железом, работающая в паре с новым поколением сенсора, где были учтены и исправлены многие слабые стороны Kinect первого поколения…

Казалось бы, вот теперь то уж точно Microsoft покажет всё, на что способна, представив пользователям невиданный уровень интерактивности новой развлекательной системы.

Небольшая демонстрация Kinect 2.0

Но вышло всё опять как-то сомнительно. На практике, несмотря на то, что Xbox One стоит дороже остальных консолей, её железо отнюдь не впечатляет.

Слабая графика на уровне игрового ПК из категории «ниже среднего» и отсутствие быстродействующей памяти GDDR5, которую Microsoft неудачно решила заменить связкой DDR3+ESRAM привели к тому, что мультиплатформенные игры на Xbox One идут с заметно меньшей частотой кадров и запускаются с меньшим разрешением, чем на той же PlayStation 4.

Суть в том, что уже во время разработки Kinect 2 вместо изюминки стал центральной проблемой Xbox One, из-за которой Microsoft пришлось урезать аппаратную начинку консоли, а ценник при этом всё равно поставить на $100 выше, чем главного у конкурента.

Настольные и портативные консоли 8-го поколения

Кроме того, Kinect 2 дополнительно отбирал 10% ресурсов и без того не самого мощного GPU Xbox One.

Не понятно, на что надеялась Microsoft, ведь для Xbox One и второго Kinect практически не было даже игр. Crytek в своём проекте Ryse: Son of Rome в итоге вообще отказались от Kinect, а Fighter Within в обзорах разгромили так, что планку ниже 23/100 до сих пор ни одна игра для Xbox One пробить не может:

Может быть в Редмонде хотели завлечь всех голосовым управлением приставкой при помощи Kinect? Но и этот вариант не очень правдоподобен. Это у какой-нибудь можно спросить что-либо тремя разными способами и она не растерявшись даст ответ.

Kinect 2 такого не может: он оперирует исключительно определённым набором фраз, которые пользователь должен просто заучивать, что, согласитесь, не очень интересно. Есть, конечно, надежда на , но в 2013 на этом фронте было глухо, да и сейчас речи о появлении Cortana на консолях Xbox пока не идёт.

Microsoft, очевидно, хотела за счёт Xbox One сделать для Kinect 2 определённую пользовательскую базу, а уже потом думать, где и зачем этот сенсор может пригодится. Пользователей такой расклад не устроил, в итоге Kinect 2 потянул за собой вниз уже саму Xbox One.

Люди предпочли более дешёвую и более мощную PlayStation 4:

Общие продажи консолей 8-го поколения по состоянию на первую половину июля

В то время, как новая Xbox до сих пор не может перейти планку в 5 миллионов проданных штук, Sony уже перелетела за 8. Как итог, в начале этого лета Microsoft приняла стратегическое решение начать продажу Xbox One без Kinect, хотя до этого уверяла, что они буквально неразрывны друг с другом. Консоль, потеряв Kinect, подешевела на $100, тем самым сравнявшись по цене с PS4. Увы, но на продажи это почти не повлияло.

В плане железа Xbox One по-прежнему отстаёт. Отказ от Kinect помимо снижения стоимости ещё и слегка поднял производительность консоли, однако если к чему-то небольшому прибавить 10%, большим оно от этого не станет.

Так и с Xbox One: намеченная к выходу на эту осень эксклюзивная игра Sunset Overdrive даже при своей мультяшной графике и даже при том, что задействует весь ресурс приставки, включая ранее зарезервированные под Kinect мощности, все равно «пойдёт» лишь в 900p и 30 FPS.

В середине июля Microsoft вновь обращает свой взор на пользователей Windows и персональных компьютеров в целом, в надежде, что там, хотя бы в кругах энтузиастов, разработчиков приложений, Kinect 2 «выстрелит» более ярко. 15 июля начались продажи Windows-версии девайса.

Kinect 2 для Windows

Чем Kinect 2 отличается от своего предшественника? Оценим технические характеристики в целом:

Технические характеристики Kinect первого поколения в сравнении с Kinect 2

И отдельные интересные моменты:

  • Ключевое изменение – камера. По сравнению с VGA (640*480 точек) в предыдущей версии её разрешение увеличилось до 1080p (1920*1080 точек);

  • Увеличенные углы обзора позволят задействовать большее игровое пространство;
  • Существенное увеличение разрешающей способности потока данных о глубине привело к тому, что Kinect 2 может распознавать более мелкие объекты. В частности, если первое поколение сенсора могло распознать объекты от 7,5 см, то теперь это планка уменьшена до 2,5;
  • Первое поколение Kinect полноценно могло распознавать одновременные движения лишь двух людей. Kinect сможет вести распознавание уже шести фигур одновременно, считывая при этом до 2 ГБ данных в секунду;

  • Представлен единый режим для сидячих и стоящих пользователей/игроков;
  • Новый Kinect сможет распознавать не просто больше людей, но и больше суставов человеческого тела. К примеру, система теперь без труда сможет распознать, когда кисть руки сжата в кулак или наоборот;
  • Представлена возможность работы нового Kinect в практически полной темноте. Напомним, предыдущее поколение сенсора комфортно чувствовало себя только в помещениях с достаточной освещённостью. В свою очередь Kinect 2 может «видеть» даже движения губ в темной комнате;

  • Новый сенсор может распознавать ритм сердцебиения по лицу;
  • Kinect 2 получил возможность мгновенно сканировать QR-коды;
  • Новая аудиосистема теперь может определить двух одновременно говорящих людей и распознать два потока речи;
  • Многократно расширена функциональность SDK (доступна версия 2.0) идущего вместе с Kinect.

Список новшеств второго Kinect’a по-хорошему впечатляет. Работа проделана значительная, само устройство стало ещё более интересным хотя бы для тех же компьютерных энтузиастов.

Впрочем, и в этой баночке мёда находятся как минимум две столовые ложки дёгтя. Первую мы уже называли выше: Microsoft просто не может популяризировать Kinect. Тот факт, что сенсор был буквально выкинут из комплекта Xbox One всего через 6-7 месяцев после начала продаж консоли, это наглядно доказывает.

Есть у Microsoft и другая причина понервничать. Дело в том, что если не все, то очень многие, кто в разное время работал над Kinect, ушли из команды. Причём ушли не куда-нибудь, а к прямым конкурентам.

Так, в частности:

  • Джонни Чанг Ли, один из ведущих разработчиков оригинального Kinect, ещё в 2011 ушёл в Google, вошёл там в состав группы ATAP (Advanced Technology and Projects), где возглавил команду занимающуюся разработкой . Сам Project Tango, позволяющий мобильным девайсам ориентироваться и создавать трёхмерные карты окружающего пространства, был впервые представлен в начале текущего года;
  • Джордж Андреас, ещё один известный инженер команды Kinect, в начале 2013 перешёл на работу в Sony, где присоединился к команде Антона Михайлова. За не очень продолжительный срок Джордж, по-видимому, успел поучаствовать в созданием PS Camera и DualShock 4, что осенью прошлого года вышли на рынок одновременно с новым поколением PlayStation. Сейчас эта же команда трудится над шлемом виртуальной реальности и неким пока ещё безымянным гаджетом, который, работая отдельно или в тандеме с Morpheus, сможет отслеживать движения глаз;

Контроллер PS Move от Sony поступил в продажу всего лишь на два месяца раньше первой версии Kinect. Судя по всему, у Project Morpheus фора во времени будет значительно больше

  • Команда промышленных дизайнеров Carbon Design Group, создавшая внешний вид первого Kinect, а также контроллера для Xbox 360 и различных мышек Microsoft, этим летом была куплена Oculus VR, которая, в свою очередь, с недавнего времени принадлежит Facebook. Как нетрудно догадаться Carbon Design Group будет работать над дизайном финальной версии шлема виртуальной реальности . С учётом того, что первое поколение Kinect, над которым работали Carbon, визуально выглядит новее второго, «дизайн» которого являлся уже работой самой Microsoft, приобретение Oculus VR сделали вполне удачное.
  • Израильская компания PrimeSense, разработки которой легки в основу Kinect, осенью 2013 была куплена Apple. Для чего Купертино потребовались разработчики 3D-сенсора пока неизвестно. Есть мнение, согласно которому главной новинкой Apple в 2014 станут умные часы iWatch, а вот на следующий год яблочная компания сосредоточится над неким совершенно новым продуктом, где и будут применяться решения PrimeSense. С другой стороны, Apple может пойти по другому пути, встроив созданный на базе приобретённых технологий «мини-Kinect» в iMac, либо MacBook’и, где уже есть HD-камера FaceTime, которая могла бы работать в паре с сенсором глубины.

Ещё один интересный момент, на которой бы мы хотели бы обратить внимание, заключается в конкурентах Kinect. Как уже было сказано, большие компании вроде Apple и Google прямого конкурента сенсору Microsoft пока не представили, хотя и ведут активные разработки в смежных областях. Что касается конкурентов от компаний рангом поменьше, то они, безусловно, есть.

Пожалуй, самый успешный из них – бесконтактный контроллер Leap Motion от одноимённой компании. Принципы его работы заметно отличаются от Kinect, но именно два этих устройства сегодня наиболее сильно противопоставлены друг другу.

Leap Motion – главная конкурентная угроза Kinect на ПК

В отличии от Kinect этот сенсор ориентируется исключительно на персональные компьютеры и заглядывать на консоли в обозримом будущем даже не собирается. В чём же успешность Leap Motion? Дело в том, что пока Microsoft рассуждала о том, как их Kinect будет «везде и повсюду», небольшой коллектив Leap Motion сумели не только выпустить своё решение, но и договориться с HP и Asus о встраивании сенсора Leap Motion в их технику. Уже воплощённым в жизнь примером такого сотрудничества является ноутбук HP Envy 17-j110 Leap Motion SE.

Примечательно, что и HP и Asus когда-то сами вели разработки в области бесконтактного управления, но потом объединились вокруг Leap Motion. Сегодня этот девайс можно купить как отдельно, так и в составе вполне конкретных устройств от вышеназванных компаний.

Leap Motion, подключённый к ноутбуку, распознаёт «парящие» рядом с ним объекты

Успех Leap Motion был обеспечен ценой (в 2-3 раза доступнее Kinect) и сверхкомпактными размерами самого сенсора.

Сегодня команда LM работает над второй версией устройства, которая сделает мощный скачок в качестве распознавания движений:

Второе поколения технологий Leap Motion

На этом фоне будущее Kinect’а кажется уже далеко не безоблачным. Microsoft провела огромную работу, благодаря которой версия 2.0 выглядит наголову выше и технологичнее своего предшественника. Но, увы, этого оказывается мало. Неспособность компании построить экосистему вокруг гаджета, создать достаточное число эксклюзивных проектов и наглядно показать сферы применения, приводит к стагнации всей идеи бесконтактного контроллера.

Кроме того, производителей, которые могли бы интегрировать Kinect в свои устройства, отпугивает завышенная цена и относительно большие габариты сенсора, не позволяющие легко оснастить им моноблок или ноутбук.

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

Песочница

Наташа 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 есть обертки под множество языков.

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

От 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, и захотелось мне поработать с ним на ПК. Что может быть проще: вставить USB в порт компьютера, установить драйвера и начать разбираться в этой чудо-технике?
Не тут-то было. Невиданный ранее оранжевый разъем наотрез отказался залезать куда-либо без молотка, а адаптера питания с переходником на USB в комплекте не было предусмотрено (данный экземпляр сенсора шел в бандле с консолью).
Достать оригинальй адаптер оказалось не так просто: отдельно он продается лишь в США за 35$, не считая доставки, к тому же БП рассчитан только на 110В. Невостребованного адаптера у купивших полный комплект сенсора так же не нашлось: желающих купить его оказалось на порядок больше.
Выход остался один: сделать переходник самостоятельно.

Что потребуется

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

Не сложно разобрать, что +5V, D-, D+, Gnd - относятся к USB, а остальные четыре, +12V и Gnd - к питанию. В качестве источника питания решено было использовать компьютерный БП, который по странному стечению обстоятельств умел выдавать +12V и имел запас в 1А, так необходимый кинекту.

Остался последний вопрос: как подсоединить все это к разъему кинекта, не отрезая его?
Первое, чо пришло на ум - использовать полимерную глину для создания ответной части разъема нужной формы. Приглядевшись повнимательнее, я заметил сходство четырех контактов каждой стороный с контактами USB, их то и было решено использовать в качестве основы.

Список необходимого:
USB-A вилка, 2 шт.
любой резистор 0,5-1 Ватт
USB разъем любого типа, для подключения к пк
разъем MOLEX (или FDD, PW11-4M)
провода (шлейф на 6-8 проводников)
напильник
паяльник и сопутствующие приспособления
суперклей

Собираем

Извиняюсь за низкое качество фото, на мобильный телефон лучше снять очень сложно.

Вскрываем два разъема:



Напильником уменьшаем толщину пластмассы, пока обе части спиной к спине не влезут в разъем кинекта:



Подпиливаем один край разъема, дабы контактные площадки 6-9 совпали:

Склеиваем две половинки, совмещая по подпиленному краю:

Осталось добавить контакт для пин 5, берем ножку от резистора и вплавляем на соответсвующее место:


Разъем готов. Если получилось так, что он свободно болтается и нет надежного контакта - можно напаять олова на контактные площадки до нужной толщины.

Соединяем проводами соотвествующие контакты свежесозданного разъема, разъема питания и USB :

Проверяем еще раз, что все соединено верно. Добавляем немного изоленты и термоусадки:

Подключаем разъем питания вместо давно неиспользуемого флоппи, подключаем адаптер к кинекту, вставляем USB в ПК…

Работает!

Система радостно сообщает о подключении новых устройств. Можно работать!
Для теста скачал набор для Windows , драйвера установились, демо запускается. Картинка передается, данные обрабатываются.

Что можно добавить?
Данный адаптер можно использовать так же и для подключения сенсора к старым версиям Xbox 360. Что бы постоянно не переставлять usb из компьютера в консоль и наоборот, можно установить переключатель.