В настоящее время я использую Microsoft Kinect для измерения углов между суставами. Большинство измерений работают правильно. Всякий раз, когда человек сидит боком (на стуле), Kinect не будет точно отслеживать скелет. Чтобы проиллюстрировать мою проблему, я добавил 3 изображения обзора глубины Kinect.
Как вы можете видеть, 2 из 3 измерений работают "правильно". Всякий раз, когда я поднимаю ногу, Kinect правильно отслеживает отслеживание скелета. У кого-нибудь есть решение этой проблемы, или это просто ограничение Kinect?
Спасибо.
Обновление 1:
JointTrackingState-Enumeration
на этих гусеничных соединениях, показанных на скриншоте 2, обозначены как Inferred
, однако вид глубины отслеживает мое полное тело.
Обновление 2: На скриншоте 2 я пытаюсь отследить переднюю ногу, выделенную как зеленый. Я знаю, что другая нога не отслеживается, но это не имеет значения, я думаю.
Обновление 3: Следующий код выбирает скелет:
private Skeleton StickySkeleton(Skeleton[] skeletons)
{
if (skeletons.Count<Skeleton>(skeleton => skeleton.TrackingId == _trackedSkeletonId) <= 0)
{
_trackedSkeletonId = -1;
_skeleton = null;
}
if (_trackedSkeletonId == -1)
{
Skeleton foundSkeleton = skeletons.FirstOrDefault<Skeleton>(skeleton => skeleton.TrackingState == SkeletonTrackingState.Tracked);
if (foundSkeleton != null)
{
_trackedSkeletonId = foundSkeleton.TrackingId;
return foundSkeleton;
}
}
return _skeleton;
}
Всякий раз, когда отслеживается скелет, данные будут использоваться для рисования суставов и расчета угла между суставами.
Обновление 4: Я тестировал сидение на "блоке", гораздо более упрощенном, чем стул. К сожалению, Kinect по-прежнему действует одинаково.
Ниже 2 скриншотов: