最近做一个kinect的软件,只有一个人玩的,玩家识别是靠近识别。如果有多人在摄像头画面内的时候,识别到的0 号玩家离开了之后,不能够自动识别1号玩家。 需要所有人离开摄像头画面区域或者遮挡一下摄像头,再次玩家进入才能识别,而且识别不灵敏。 经过测试,发现kinect检测到人后,会给userID一个数字,当这个人离开后,还会检测到有其他人,但是给他的编号是0。但是 userID 是0的时候,kinectManager里面标识的是 没有检测到玩家。 感觉有些矛盾。最终我的解决办法如下:红色区域就是 当检测到玩家ID是0的时候,再次将kinectManager里面用户清除 然后重新检测(其实我其他地方点击按钮做了这个KinectManager.Instance.ClearKinectUsers(); 但是不知为啥没效果)。 // 是否初始化完成 if (_manager && _manager.IsInitialized()) { // 是否人物被检测到 if (_manager.IsUserDetected()) { long userId = _manager.GetPrimaryUserID(); GameManager.Instance.textPeopleCount.text = "识别到玩家:"+userId; if (userId==0) { KinectManager.Instance.ClearKinectUsers(); KinectManager.Instance.ResetFilters(); // KinectManager.Instance.ResetGesture(); // KinectManager.Instance.res } // 获取用户ID // 获取目标关节点的索引(以左手为例) int jointIndex = (int)KinectInterop.JointType.HandLeft; // 判断目标关节点是否被追踪 if (_manager.IsJointTracked(userId, jointIndex)) { } } |
|
来自: 鸿蛟家平 > 《Unity 好文章》