Microsoft Kinect + Telldus Tellstick
Я надеялся, что кто-нибудь поможет мне сориентироваться в нужном направлении.
Я ищу способ использовать Microsoft Kinect, чтобы выключить лампу. Лампа подключена к домашнему легкому дистанционному выключателю розетки, который соединен с Telldus Tellstick. Я использую C# для написания приложения, теперь у меня есть смутное представление о том, что я хотел бы сделать, и после использования Kinect SDK я лучше понимаю, как использовать Kinect.
Я хотел бы знать, что будет самый логичный способ создать это приложение? Я думал о чем-то вроде:: Инициализация сенсора Kinect > когда Kinect готов сканирование скелета > когда скелет обнаружил, Марк логическое значение, как 'true' > когда значение true, включить свет.
Я знаю, что это очень неопределенно, но я новичок в разработке с kinect и в целом мой я все еще изучаю C#. Любая помощь, даже самая незначительная, будет очень признательна!
С уважением, Джон.
1 ответ:
Вы не можете задать простое логическое значение для этого, потому что подход SDK, основанный на событии, вернет 6 скелетных структур, даже если все они пусты. Использование немного LINQ и нулевой проверки даст вам то, что вы ищете, хотя.
Шаги:
- инициализировать Kinect (я бы использовал включенный KinectSensorChooser для этого приложения WPFViewers) включить и зарегистрировать скелетный поток.
- в скелетном событии проверьте, чтобы убедиться, что вы не получили нулевую коллекцию скелетов (это случается)
- Используйте LINQ, чтобы получить первый скелет, у которого свойство tracking имеет значение tracked. Вы также можете просто использовать цикл for, я просто нахожу LINQ полезным для этих типов итераций.
- Если ваш скелет после запроса 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 } }