gpt4 book ai didi

c# - 如何使用 Kinect 跟踪一个人 (trackingID)

转载 作者:太空狗 更新时间:2023-10-29 17:54:02 26 4
gpt4 key购买 nike

我想跟踪第一个人,并使用此人的右手在我制作的应用程序中导航。

我可以接管光标,现在我只想跟踪一个人。所以基本上当一个人在程序中导航时,有人在他身后走或者在看这个人,如果他们移动,kinect 应该不会识别其他人。

我该如何实现它,我知道它与 trackingId 有关,但是什么? :s

        foreach (SkeletonData s in allSkeletons.Skeletons)
{

if (s.TrackingState == SkeletonTrackingState.Tracked)
{
if (s.TrackingID == 0)
{

foreach (Joint joint in s.Joints)
{
}
}
}
}

最佳答案

每个被跟踪的人都有一个玩家索引。忽略其他指数的玩家即可。
播放器索引是深度流图像中数据的一部分。你必须提取它:

int playerIdx = depthFrame16[i16] & 0x07;

为了获得此信息,您必须正确初始化 Kinect 运行时:

_kinectNui.Initialize(RuntimeOptions.UseDepthAndPlayerIndex | ....

更多信息请看这里: http://www.codeproject.com/KB/dotnet/KinectGettingStarted.aspx

我完全推荐 MS 的这个视频教程: http://research.microsoft.com/apps/video/?id=152249

如果您查看 SDK 附带的 ShapeGameDemo,您可以了解他们是如何做到的。 (他们只是使用数组中骨架的索引):

int playerId = 0;
foreach (SkeletonData data in skeletonFrame.Skeletons) {
if (SkeletonTrackingState.Tracked == data.TrackingState) {
Player player;
if (players.ContainsKey(playerId))
player = players[playerId];
else
player = new Player(playerId);
}
playerId++;
}

简化您可以做的事情(使用您的代码):

int myPlayerIndex = 0; //probably 0 since you are the first person entered the kinect scope
int playerId = 0;
foreach (SkeletonData s in allSkeletons.Skeletons) {
if(playerId != myPlayerIndex)
continue;

if (s.TrackingState == SkeletonTrackingState.Tracked) {
foreach (Joint joint in s.Joints)
{
}
}
playerId++;
}

要在这里总结一下,MS 论坛中的一个类似问题对此进行了解释: http://social.msdn.microsoft.com/Forums/en-US/kinectsdk/thread/d821df8d-39ca-44e3-81e7-c907d94acfca

关于c# - 如何使用 Kinect 跟踪一个人 (trackingID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8442963/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com