我正在开发一个应用程序当 kinect 传感器检测到一个人可以在其上工作的骨架时,如果其他人靠近现有用户,它会检测到第二个人。
我想限制用户 kinect 传感器首先检测到它,如果其他用户来,这不应该检测到另一个。
提前致谢
问问题
8455 次
5 回答
7
另请参阅 Jurgeon D 对Kinect SDK player detection的回答,因为它处理骨架索引。@Fixus 也是正确的,因为您可以使用 ID。但是,如果您的意思是检测到超过 2 个人,则仅检测到一个,即不是编程,即在 Kinect 的硬件和@FelixK 中。是正确的。
骨骼指数
void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
SkeletonFrame sf = e.SkeletonFrame;
//check which skeletons in array are active and
// use that array indexes for player index
SkeletonData player1 = sf.Skeletons[playerIndex1];
SkeletonData player2 = sf.Skeletons[playerIndex2];
}
骨架 ID
void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
SkeletonFrame sf = e.SkeletonFrame;
if (sf.TrackingState == SkeletalTrackingState.Tracked)
{
int ID1 = sf.TrackingID;
}
也是检测人类的代码
DepthImageFrame depthFrame;
short[] rawDepthData = new short[depthFrame.PixelDataLength];
depthFrame.CopyPixelDataTo(rawDepthData);
Byte[] pixels = new byte[depthFrame.Height * depthFrame.Width * 4];
int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask;
if (player > 0)
{
//do something
}
于 2012-05-14T13:25:29.207 回答
4
Kinect 将检测新用户,因为这是他的工作 :) 但请记住,每个用户都有自己的 ID,因此您始终知道第一个用户是第一个用户,第二个是第二个用户。这样你就可以只在你想使用的用户的骨架上工作
于 2012-05-14T05:33:48.443 回答
3
如果我正确理解您的问题,这是不可能的,您不能修改 Kinects 行为以及它如何检测用户(如果框架中没有任何内容;我认为没有什么)。
你必须在你的代码中解决这个问题。
于 2012-05-14T05:31:04.857 回答
0
在其中一个 kinect 快速入门教程中,有一种仅检测一个用户的方法。我为自己的应用程序尝试了它并且它有效。
using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
if (skeletonFrame == null)
return;
Skeleton[] skeletons= new Skeleton[skeletonFrame.SkeletonArrayLength];
skeletonFrame.CopySkeletonDataTo(skeletons);
if (skeletons.All(s => s.TrackingState == SkeletonTrackingState.NotTracked))
return;
Skeleton skeleton = (from s in skeletons
where s.TrackingState == SkeletonTrackingState.Tracked
select s).FirstOrDefault();
if (skeleton == null) return;
// TODO: Do something to the skeleton data...
}
于 2012-09-04T14:00:16.260 回答
0
KinectManager kinectManager = KinectManager.Instance;
AvatarController avatarCtrl = avatar ? avatar.gameObject.GetComponent<AvatarController> () : null;
if (kinectManager != null && kinectManager.IsInitialized () && avatar != null && avatarCtrl && kinectManager.IsUserTracked (avatarCtrl.playerId)) {
//User detected. You can do the remaining thing.
}
于 2019-12-24T07:01:31.700 回答