kinect+Unity 关于Kinect设备是否正确连接 C#版本
分享一下本人在制作unity+Kinect项目时遇见的一个小问题以及坚决方法
问题描述:
当开发的的程序在Kinect设备接入与不接入时,会有不同的功能,如何判断Kinect是否正确接入,本人以前用的方法是
if (KinectManager.Instance.IsInitialized())
后来发现,该方法只要你本地环境配置完毕,返回值都是true.
解决办法:
提前获取未Kinect时,调用Kinect相机,获取彩色数据。保存该数据,需要判断Kinect是否正确连接时,只需要再获取一次与此数据进行对比即可。
注意:
1.本人使用的Kinect V2版本。
2.保存的空图片的像素点数据为"RGBA(0.804, 0.804, 0.804, 0.804)"
3.如果在程序一开始就进行对比,建议手动加一个延时,否则在程序启动的一瞬间,有概率导致结果不准确
代码
// An highlighted block
public bool kinectCamera = true;
private Texture2D texture1;
private const string nullData = "RGBA(0.804, 0.804, 0.804, 0.804)";//空相机内容,勿改!!!!!
private int num = 0;//不匹配次数,大于五次认为是不匹配;
private void Awake()
{
StartCoroutine("Matching");
}
//为避免第一帧检测时发生错误,加0.1秒延时,并检测10次怎加准确性
IEnumerator Matching()
{
int count = 0;
while (count<10)
{
yield return new WaitForSeconds(0.1f);
//此处须在KinectManager中勾选获取彩色通道数据
texture1 = KinectManager.Instance.GetUsersClrTex();
//此处以1920*1080为例,根据实际情况自行修改
for (int i = 0; i < texture1.width; i += 120)
{
for (int j = 0; j < texture1.height; j += 120)
{
if (texture1.GetPixel(i, j).ToString() == nullData)
{
num++;
}
}
}
//尽可能增加准确性,大于5处为空数据时才返回false;
if (num > 5)
{
Debug.Log("匹配,未调用相机");
kinectCamera = false;
}
else
{
Debug.Log("不匹配,调用相机");
kinectCamera = true;
}
num = 0;
count++;
}
StopCoroutine("Matching");
}
分享一下在实际开发过程中遇见的问题,如有错误请指正。