我有一个使用Kinect(或者更可能是其中四个)处理视频会议的项目。现在,我的公司为我们的VTC房间使用这些价格非常昂贵的相机。希望是,使用一对Kinect链接在一起,我们可以降低成本。计划中有四/五个覆盖180度弧线,因此Kinects可以看到整个房间/桌子(仍然比我们现有的相机便宜很多!)。应用程序会根据桌子上的对象选择来自Kinect的视频流。理论上计划很好,但我碰到了一个障碍。将Kinect音频与视频相匹配
据我所知,没有办法确定哪个麦克风阵列对应于Kinect运行时对象。使用
Device device = new Device();
Runtime[] kinects = new Runtime[device.Count];
for(int i = 0; i < kinects.Length; i ++)
kinects[i] = new Runtime(i);
而且每个麦克风阵列:我可以使用代表每个Kinect的对象
var source = new KinectAudioSource();
IEnumerable<AudioDeviceInfo> devices = source.FindCaptureDevices();
foreach(AudioDeviceInfo in device in devices)
{
KinectAudioSource devSpecificSource = new KinectAudioSource();
devSpecificSource.MicrophoneIndex = (short)device.DeviceIndex;
}
,但我找不到任何办法知道运行时对应于KinectAudioSource B.这不是这是我使用的两个Kinect的一个大问题(我只是猜测哪个是哪个,如果他们错了就切换它们),但是当我们得到四个或五个Kinect时,我不需要每次应用程序运行时进行任何类型的校准。我考虑过假设运行时和KinectAudioSource对象的顺序是相同的(运行时索引0对应于设备中的第一个AudioDeviceInfo),但这似乎有风险。
所以,问题:有没有办法将运行时对象与其KinectAudioSource相匹配?如果没有,是否保证它们的顺序是正确的,以便我可以将Runtime 0与设备中的第一个KinectAudioSource麦克风索引匹配?
UPDATE: 最后撞上我的脸对WPF的单线程单元要求和Kinect的声音的多线程公寓需求足以让两个表现在一起。问题是,据我所知,Kinect运行时对象和KinectAudioSources的排列顺序是而不是。我在一个相当响亮的实验室(我是其中一个,也许在这个房间里有40个实习生),所以很难测试,但我相当肯定,我插入的两个Kinect的顺序是切换的。我有两个运行时对象和两个KinectAudioSource对象。当第一个KinectAudioSource报告声音直接来自它前面时,我实际上站在与第二个Runtime对象关联的Kinect前面。所以不能保证两者的订单会一致。所以现在,重复这个问题:我如何使用Nui.Runtime对象匹配KinectAudioSource对象?现在,我只有两个Kinects,但由于目标是四到五个。我需要一个具体的方法来做到这一点。
更新2: 带来了我在工作回家的两个Kinects玩。三个Kinect,一台电脑。有趣的东西(实际上让他们全部安装是一件痛苦的事情,其中一个视频源似乎并没有工作,所以我现在回到2)。 musefan的回答让我希望我错过了AudioDeviceInfo对象中的某些东西,这些东西可以揭示这个问题,但没有运气。我在运行时对象中发现了一个名为NuiCamera.UniqueDeviceName的有趣外观字段,但是我无法在AudioDeviceInfo中找到与该内容之间的任何链接。从这些领域
输出,在希望福尔摩斯看到线程,并注意到一个连接:
Console.WriteLine("Nui{0}: {1}", i, nuis[i].NuiCamera.UniqueDeviceName);
//Nui0: USB\VID_0409&PID_005A\6&1F9D61BF&0&4
//Nui1: USB\VID_0409&PID_005A\6&356AC357&0&3
Console.WriteLine("AudioDeviceInfo{0}: {1}, {2}, {3}", audios.IndexOf(audio), device.DeviceID, device.DeviceIndex, device.DeviceName);
//AudioDeviceInfo0: {0.0.1.00000000}.{1945437e-2d55-45e5-82ba-fc3021441b17}, 0, Microphone Array (Kinect USB Audio)
//AudioDeviceInfo1: {0.0.1.00000000}.{6002e98f-2429-459a-8e82-9810330a8e25}, 1, Microphone Array (2- Kinect USB Audio)
更新3: 我不是找校准技术。我正在寻找一种在运行时在应用程序中将Kinect相机与其麦克风阵列相匹配的方法,无需事先设置。请停止发布可能的校准技术。发布该问题的整个目的是找到一种避免需要用户进行设置的方法。
更新4: WMI绝对看起来像是要走的路。不幸的是,我没有太多时间来处理它,因为我一直在努力让3个Kinect互相配合。有些USB集线器无法处理带宽?我已经通知我的老板,似乎没有任何简单的方法将3个Kinect连接到普通计算机,而不是蓝屏。我可能仍然会在空闲时间尝试解决这个问题,但就工作而言......这几乎是一个死路一条。
感谢您的答案,很抱歉,我无法发布工作解决方案。
我觉得* *听说某处的SDK目前只允许您在同一时间从一个设备获取音频..我可能是错的,但是你可能想在这条道路上走得太远之前进行验证。 –
骨骼跟踪和深度图有一个限制(只能从主要的Kinect中获得),但据我所知,音频没有任何限制。我会尽快确定的。 – Coeffect
对任何阅读我的评论的人来说:我错了,你可以从任何Kinect获得深度信息。尽管如此,骨骼信息仍然局限于主要的Kinect,因此玩家指数信息也是如此。 – Coeffect