Алгоритм скелета Kinect из изображений глубины

Мне любопытно, можно ли использовать алгоритм скелета от сенсора Kinect.

Более конкретно, у меня есть изображения глубины, и я хочу извлечь скелет. Является ли это возможным?


person crow    schedule 05.05.2014    source источник
comment
Вы смогли найти ответ?   -  person John Doe    schedule 10.08.2015
comment
Не совсем. Я не проверял, есть ли хорошая реализация алгоритма с открытым исходным кодом, кроме OpenNI.   -  person crow    schedule 02.09.2015


Ответы (2)


Да, это возможно.

Но, наверное, это не просто.

Алгоритм, позволяющий отслеживать скелет, называется «Распознавание позы человека в реальном времени по частям из изображения с одной глубиной». Другими словами, это было сделано для оценки суставов скелета по одному снимку глубины, это то, что вам нужно.

Преимущество использования SDK (например, Microsoft или любого другого, который вы предпочитаете) заключается в том, что вам не нужно повторно реализовывать алгоритм отслеживания скелета. На самом деле, это довольно сложно, и для этого нужно искусственно создать и правильно использовать множество обучающих данных.

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

person Vito Gentile    schedule 25.03.2015

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

Сначала вам нужно включить скелетный поток в вашем приложении, как если бы вы делали это с потоком глубины или цветным потоком (я предполагаю, вы это понимаете, поскольку у вас уже есть изображения глубины).

sensor.SkeletonStream.Enable(new TransformSmoothParameters() 
            {
                Smoothing = 0.5f,
                Correction = 0.5f,
                Prediction = 0.5f,
                JitterRadius = 0.5f,
                MaxDeviationRadius = 0.04f

            });; // enable the skeleton stream, you could essentially not include any of the content in between the first and last curved brackets, as they are mainly used to stabilize the skeleton information (e.g. predict where a joint is if it disappears)

skeletonData = new Skeleton[kinect.SkeletonStream.FrameSkeletonArrayLength]; // this array will hold your skeletal data and is equivalent to the short array that holds your depth data.

sensor.SkeletonFrameReady += this.SkeletonFrameReady;

Затем у вас должен быть метод, который запускается каждый раз, когда у Kinect есть каркасный фрейм для отображения (фрейм со всей скелетной информацией).

private void SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) 
{
     using (SkeletonFrame skeletonFrame = e.SkeletonFrame()) //get all the skeleton data
     {
     if (skeletonFrame == null) //if there's no data, then exit
            {
                return;
            }

            skeletonFrame.CopySkeletonDataTo(skeletonData); //copy all the skeleton data into our skeleton array. It's an array that holds data for up to 6 skeletons

            Skeleton skeletonOfInterest = (from s in skeletonData
                              where s.TrackingState == SkeletonTrackingState.Tracked
                              select s).ElementAtOrDefault(1); //define the first skeleton thats tracked

           //put code to manipulate skeletons. You have to go do some reading to find out how to work with the skeletons.
     }
}

MSDN обычно является моим ресурсом goto для изучения того, как работать с Kinect. . Если вы установили Kinect SDK, в браузере Developer Toolkit также есть несколько хороших примеров. Наконец, еще один хороший ресурс - это Начало программирования Kinect с помощью Microsoft Kinect SDK от Apress, на которое я много полагался. Вы можете найти его на Amazon.

person Gaessaki    schedule 06.05.2014
comment
Спасибо за ответ, но мне было интересно, могу ли я предоставить свои собственные изображения глубины, которые я сохранил, и использовать алгоритм отслеживания скелета для поиска суставов. Из того, что я искал, в настоящее время это невозможно. Но я обнаружил, что, возможно, смогу сделать это с OpenNI. - person crow; 07.05.2014
comment
привет @crow, вы нашли способ сделать анализ скелета на изображениях глубины? - person Shehroz; 15.04.2016