Microsoft Kinect + Telldus Tellstick


Я надеялся, что кто-нибудь поможет мне сориентироваться в нужном направлении.

Я ищу способ использовать Microsoft Kinect, чтобы выключить лампу. Лампа подключена к домашнему легкому дистанционному выключателю розетки, который соединен с Telldus Tellstick. Я использую C# для написания приложения, теперь у меня есть смутное представление о том, что я хотел бы сделать, и после использования Kinect SDK я лучше понимаю, как использовать Kinect.

Я хотел бы знать, что будет самый логичный способ создать это приложение? Я думал о чем-то вроде:: Инициализация сенсора Kinect > когда Kinect готов сканирование скелета > когда скелет обнаружил, Марк логическое значение, как 'true' > когда значение true, включить свет.

Я знаю, что это очень неопределенно, но я новичок в разработке с kinect и в целом мой я все еще изучаю C#. Любая помощь, даже самая незначительная, будет очень признательна!

С уважением, Джон.

1 3

1 ответ:

Вы не можете задать простое логическое значение для этого, потому что подход SDK, основанный на событии, вернет 6 скелетных структур, даже если все они пусты. Использование немного LINQ и нулевой проверки даст вам то, что вы ищете, хотя.

Шаги:

  1. инициализировать Kinect (я бы использовал включенный KinectSensorChooser для этого приложения WPFViewers) включить и зарегистрировать скелетный поток.
  2. в скелетном событии проверьте, чтобы убедиться, что вы не получили нулевую коллекцию скелетов (это случается)
  3. Используйте LINQ, чтобы получить первый скелет, у которого свойство tracking имеет значение tracked. Вы также можете просто использовать цикл for, я просто нахожу LINQ полезным для этих типов итераций.
  4. Если ваш скелет после запроса LINQ не равен null, сделайте что-нибудь.

Если вы хотите получить это быстро и с некоторым талантом вы можете использовать образец, который включен при загрузке SDK Kinect Explorer. Есть скелетный зритель вместе с Кинектсенсорхузером это позволит вам иметь полностью функционирующее приложение с очень небольшим количеством кода. подробнее о скелетном просмотрщике, включенном в этот образец здесь


Я немного споткнулся с wether, чтобы предоставить код для этого или нет. Я подумал, что лучше ответить на этот вопрос логикой, необходимой для выполнения действия, а не фактическим кодом... поскольку вы спросили :) однако, если вам нужен код для этого, вы можете либо получить его из Quickstarts канала 9 , либо моей книги Глава четвертая


Edit (Расширение KinectExplorer):

Чтобы расширить KinectExplorer для ответа при обнаружении скелета, просто найдите функцию KinectAllFramesReady в KinectSkeletonViewer.код XAML.CS. Внутри этой функции есть проверка bool для haveSkeletonData, этот оператор if будет вызван, когда есть скелет, присутствующий в видимой рамке Kinect. Итак:

   private void KinectAllFramesReady(object sender, AllFramesReadyEventArgs e)
   {
    //Checking for Skeleton
    if (haveSkeletonData)
    {
     //Do Stuff Here
    }
   }