用unity开发kinect拍照片

2015年01月26日 09:22 0 点赞 1 评论 更新于 2025-11-21 15:26

问题提出

我想要使用Unity开发基于Kinect的拍照功能。由于拍照需要先调用摄像头,然而Kinect自带摄像头的分辨率较低,拍摄出的照片效果不理想,所以我打算更换一个高清摄像头。但我不知道该如何编写代码来实现这一需求。

单独调用外部摄像头的方法

以下是我在不使用Kinect的情况下,单独调用外部摄像头的代码:

public string deviceName;
WebCamTexture tex;

// Use this for initialization
IEnumerator Start()
{
// 获取授权
yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);
if (Application.HasUserAuthorization(UserAuthorization.WebCam))
{
WebCamDevice[] devices = WebCamTexture.devices;
print(devices.Length);
deviceName = devices[0].name;
tex = new WebCamTexture(deviceName, 1400, 900, 12);
renderer.material.mainTexture = tex;
tex.Play();
}
else
{
// 这里可以添加用户未授权时的处理逻辑
}
}

代码解释

  1. 变量声明
    • deviceName:用于存储外部摄像头的名称。
    • texWebCamTexture 类型的变量,用于获取和显示摄像头的图像。
  2. Start 方法
    • 该方法是一个协程,使用 IEnumerator 类型。在 Start 方法中,首先使用 Application.RequestUserAuthorization 向用户请求使用摄像头的授权。
    • 当用户授权后,通过 WebCamTexture.devices 获取所有可用的摄像头设备列表。
    • 打印出可用摄像头的数量,并将第一个摄像头的名称赋值给 deviceName
    • 创建一个 WebCamTexture 对象,指定摄像头名称、分辨率(1400x900)和帧率(12fps)。
    • WebCamTexture 对象赋值给渲染器的材质主纹理,并调用 Play 方法开始播放摄像头的图像。

遇到的问题

使用上述调用外部摄像头的代码后,Kinect的摄像头无法正常使用,并且一直报以下错误:

Could not start graph
UnityEngine.WebCamTexture:Play()
<Start>c__Iterator2:MoveNext() (at Assets/ZigFu/Scripts/Viewers/ZigToVM.cs:20)

Could not pause pControl
UnityEngine.WebCamTexture:Play()
<Start>c__Iterator2:MoveNext() (at Assets/ZigFu/Scripts/Viewers/ZigToVM.cs:20)

目前我不清楚出现这些错误的原因,希望有大神能帮忙解答。