基于Kinect for Windows SDK beta开发语音命令,实现语音控制游戏

微软在2009年6月2日的E3大展上。正式公布的XBOX360体感周边外设。Natal彻底颠覆了游戏的单一操作。使人机互动的理念更加彻底的展现出来。 它是一种3D体感摄影机(开发代号“Project Natal”),同时它导入了即时动态捕捉、影像辨识、麦克风输入、语音辨识、社群互动等功能。微软的Natal不需要使用任何控制器;它是依靠相机捕捉三维空间中玩家的运动。Kinect 的出现不仅带来了一种新的游戏操控体验,由之引发的让机器“读懂人”的交互方式,也正在引领人机交互技术的新一轮变革。

微软在今年的6月16日正式发布了Kinect for Windows SDK beta, 让开发人员可以在Windows上开发出和XBOX上一样的互动程序。

 

Kinect for Windows SDK的下载地址:

http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx

Kinect SDK目前只支持Windows 7,分为x86和x64两个版本。开发工具方面还需要.NET Framework 4.0和Visual Studio 2010 (最低Express版本)的支持。

Kinect SDK的视频开发教程:

http://channel9.msdn.com/Series/KinectSDKQuickstarts?sort=recent#tab_sortBy_recent

Kinect SDK的开发指南:

http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/guides.aspx

Kinect SDK的官方论坛:

http://social.msdn.microsoft.com/Forums/en-US/kinectsdk/threads

硬件设备的需求是:Kinect for Xbox 360 sensor和Xbox 360 Kinect AC Adapter/ Power Supply。

 

 

KINECT为Xbox 360 ®传感器™音频组件,是一个四元麦克风阵列。一个阵列提供了超过一个麦克风一些显着的优势,包括更先进的声学回音消除和噪音抑制,能够使用波束形成算法,它允许作为一种可操纵的定向麦克风阵列功能。
一个自然的用户界面(NUI)的一个关键方面是语音识别。 Kinect感应器的麦克风阵列语音识别基于应用程序是一个出色的输入设备。它提供了更好的音质比类似的单麦克风和耳机比使用更方便。讲话的示例显示了如何使用Kinect感应器的麦克风阵列与Microsoft.Speech API,来识别语音命令。
对于如何实行有管理的应用程序捕获音频流从Kinect感应器的麦克风阵列的一个例子,Windows ® SDK测试的Kinect的网站上看到的“RecordAudio演练”。
对于如何实现一个C + +应用程序中捕获音频流从Kinect感应器的麦克风阵列的例子,见“MicArrayEchoCancellation演练,”的“AudioCaptureRaw演练”和“MFAudioFilter演练SDK Beta版网站”。
试图编译语音应用程序之前,你必须先安装以下内容:
•微软语音平台 - 软件开发工具包(SDK),版本10.2(X86版)
•微软语音平台 - 服务器运行时,版本10.2(X86版)
微软研究院(MSR)KINECT SDK运行时只有x86的,所以你必须讲话运行x86版本下载。
•适用于Windows运行0.9版语言包,KINECT
(从微软语音平台的Windows SDK的Beta版Kinect的声学模型)

注意:在Microsoft ®开发人员网络(MSDN ®)的在线文档的Microsoft.Speech API是有限的。相反,你应该是指与微软语音平台SDK中包含的HTML帮助文件(CHM)。这是位于Program Files \ Microsoft语音平台SDK \ Docs文件。
计划基本知识
语音是安装为Windows SDK测试版\用户\ PUBLIC \文件Kinect的\微软研究院KinectSDK样品\音频\演讲\ CS目录。语音是一个C#控制台应用程序是在一个文件中,Program.cs的实施。
重要RecordAudio目标x86平台。这个SDK不支持x64或任何CPU平台的目标。
基本的程序流程如下:
1。创建一个对象来表示Kinect感应器的麦克风阵列。
2。创建一个语音识别的对象,并指定一个语法。
3。响应命令。

使用语音
1。构建应用程序。
2。按Ctrl + F5运行该应用程序。
3。面对Kinect感应器,并说“红”,“绿色”或“蓝”。

语音识别打印每个命令的通知,包括以下内容:
•最适合的口语命令命令集的成员。
•一个信​​心,估计值。
该命令是否被承认或拒绝不是命令集的一部分。

语音识别引擎打印的通知,如果它承认命令,与信心的措施,是发动机的这个词是正确认识的概率的估计。一个例子是显示在下面的示例输出,其中所说的话是“红”“蓝”和“黄色”。
使用:微软服务器的语音识别语言 - KINECT(EN - US)
认识。说:“红”,“绿色”或“蓝”。按ENTER键停止
语音推测:红色
语音认可:红色
语音假设:蓝色
语音认可:蓝色
假设的语音:绿色
语音拒绝

写入文件:RetainedAudio_4.wav
小号
停止识别...

本文件的其余部分将引导您通过应用。
注意:此文件包含代码示例,其中大部分已编辑的简洁性和可读性。特别是,最常规的错误校正代码已被删除。完整的代码,看到的语音样本。超链接在本演练中显示的MSDN网站上的参考内容。
创建和配置一个音频源对象
KinectAudioSource对象表示Kinect感应器的麦克风阵列。在幕后,它使用的MSRKinectAudio微软DirectX ®媒体对象(DMO),SDK Beta版网站上的“MicArrayEchoCancellation演练”中详细描述。
大多数样本是在主要实施。第一步是创建和配置KinectAudioSource的,如下:
static void Main(string[] args)
{
  using (var source = new KinectAudioSource())
  {
    source.FeatureMode = true;
    source.AutomaticGainControl = false;
    source.SystemMode = SystemMode.OptibeamArrayOnly;
    ...
  }
  ...
}
你配置KinectAudioSource通过设置各种属性,这直接映射到MSRKinectAudio DMO的属性键。有关详细信息,请参阅参考文档。语音应用程序配置KinectAudioSource如下:
•功能模式启用。
•自动增益控制(AGC)被禁用。
AGC必须禁用语音识别。
•系统模式设置为自适应波束没有声学回声消除(AEC)。
在这种模式下,作为一个单一的方向性麦克风的麦克风阵列功能,是指音频信号源的数度范围内。
创建一个语音识别引擎
语音创建一个语音识别引擎,如下:
static void Main(string[] args)
{
  using (var source = new KinectAudioSource())
  {
    ...
    RecognizerInfo ri = SpeechRecognitionEngine.InstalledRecognizers()
                         .Where(r => r.Id == RecognizerId)
                         .FirstOrDefault();
    using (var sre = new SpeechRecognitionEngine(ri.Id))
    {
      ...
    }
  }
  ...
}
SpeechRecognitionEngine.InstalledRecognizers是一个静态方法,返回系统上的语音识别引擎的列表。语音使用语言集成查询(LINQ)获得列表中的第一识别的ID作为一个RecognizerInfo对象,并返回结果。发言,然后使用RecognizerInfo.Id创建一个SpeechRecognitionEngine对象。
指定的命令
讲话使用命令识别承认三个语音命令:“红”,“绿色”和“蓝色”您指定这些命令的创建和加载一个包含被认可的话,如下的语法。

static void Main(string[] args)
{
  using (var source = new KinectAudioSource())
  {
    ...
    using (var sre = new SpeechRecognitionEngine(ri.Id))
    {
       var colors = new Choices();
       colors.Add("red");
       colors.Add("green");
       colors.Add("blue");

       var gb = new GrammarBuilder();
       gb.Culture = ri.Culture;
       gb.Append(colors);

       var g = new Grammar(gb);
       sre.LoadGrammar(g);

       sre.SpeechRecognized += SreSpeechRecognized;
       sre.SpeechHypothesized += SreSpeechHypothesized;
       sre.SpeechRecognitionRejected += SreSpeechRecognitionRejected;
       ...
    }
  }
}

 


的选择对象予以确认的话清单。要将单词添加到列表,调用Choices.Add。完成清单后,创建一个新的GrammarBuilder对象提供了一个简单的方法来构造一个语法和指定的文化相匹配识别。然后,通过选择对象GrammarBuilder.Append定义的语法元素。最后,加载到通过调用SpeechRecognitionEngine.LoadGrammar语音引擎的语法。
每次你讲一个字,语音识别比较的话,在语法,以确定的模板你的发言,如果它是公认的命令之一。然而,语音识别是一个具有内在的不确定性的过程。
语音引擎提出了以下三个事件:
•SpeechRecognitionEngine.SpeechHypothesized事件发生的每个尝试的命令。
它传递的事件处理程序的一个SpeechRecognizedEventArgs对象,它包含的命令集和估计最佳识别结果。
•SpeechRecognitionEngine.SpeechRecognized事件发生时企图命令是一个命令集的成员的认可。
它通过一个SpeechRecognizedEventArgs公认的命令对象,它包含的事件处理程序。
•SpeechRecognitionEngine.SpeechRejected事件发生时拒绝命令集的成员企图命令。
它传递的事件处理程序SpeechRecognitionRejectedEventArgs对象。

讲话赞同所有三个事件和执行的处理程序,如下:

static void SreSpeechHypothesized(object sender,
                                  SpeechHypothesizedEventArgs e)
{
  Console.Write("\rSpeech Hypothesized: \t{0}\tConf:\t{1}",
                  e.Result.Text);
}

static void SreSpeechRecognized(object sender,
                                SpeechRecognizedEventArgs e)
{
  Console.WriteLine("\nSpeech Recognized: \t{0}", e.Result.Text);
}

static void SreSpeechRecognitionRejected(object sender,
                                         SpeechRecognitionRejectedEventArgs e)
{
  Console.WriteLine("\nSpeech Rejected");
  if (e.Result != null)
    DumpRecordedAudio(e.Result.Audio);
}

 

识别命令
这个讲话过程已配置了语音识别后,所有需要做的是启动进程。语音识别引擎识别出关键词,并提出了相应的事件,如下面的代码示例所示:

static void Main(string[] args)
{
  using (var source = new KinectAudioSource())
  {
    ...

    using (var sre = new SpeechRecognitionEngine(ri.Id))
    {
      ...
      using (Stream s = source.StartCapture(3))
      {
        sre.SetInputToAudioStream(s,
                      new SpeechAudioFormatInfo(EncodingFormat.Pcm,
                                                16000, 16, 1,
                                                32000, 2, null));

        sre.RecognizeAsync(RecognizeMode.Multiple);
       Console.ReadLine();
       Console.WriteLine("停止识别 ...");

        sre.RecognizeAsyncStop();
      }
    }
  }
}



语音启动调用KinectAudioSource.StartCapture Kinect感应器的麦克风阵列捕捉音频。 然后语音执行以下操作:
1。 呼吁SpeechRecognitionEngine.SetInputToAudioStream指定的音频信号源及其特点。
2。 调用SpeechRecognitionEngine.RecognizeAsync和指定异步识别。
发动机运行在后台线程上,直到用户按一个键停止的过程。
3。 SpeechRecognitionEngine.RecognizeAsyncStop停止识别过程和终止识别。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
### 回答1: Kinect for Windows SDK 2.是微软推出的一款软件开发工具包,用于开发基于Kinect传感器的应用程序。它提供了丰富的API和工具,可以帮助开发者快速构建出具有深度感知、语音识别、姿态跟踪等功能的应用程序。同时,它还支持多种编程语言和开发环境,包括C++、C#、Visual Studio等,方便开发者进行开发和调试。 ### 回答2: Kinect for Windows SDK 2.0是微软公司推出的一款面向Windows平台Kinect开发工具包。该工具包提供了一系列的工具和API,使开发者能够轻松地利用Kinect设备在Windows应用程序中实现身体姿态跟踪、语音识别、深度感应等功能。下面就详细介绍一下Kinect for Windows SDK 2.0的内容和特点。 首先,Kinect for Windows SDK 2.0支持多种操作系统,包括Windows 7、Windows 8、Windows 8.1和Windows 10,支持32位和64位的应用程序运行。它还支持多种开发语言,包括C++、C#和Visual Basic等,若使用这些语言编写代码也可以充分发挥Kinect设备的功能,帮助开发实现其想要的效果。 其次,Kinect for Windows SDK 2.0提供了一些著名的工具和API。比如,它提供了基于深度感应器的底层API,可以实现目标检测、骨骼跟踪、手势识别等功能。这些底层API是非常有用的,因为开发者可以根据需要进行自定义设置,更好地进行应用程序开发。 此外,Kinect for Windows SDK 2.0还提供了许多高级功能,包括声学模型、语音指定、身体处于位置追踪等,这些功能是很有用的,因为它们可以让开发者的应用程序变得更加智能、全面。例如,开发者可使用该设备的语音识别功能来触发应用程序中的事件,还可以使用身体处于位置追踪功能来实现用户体验的增强,使游戏、培训等应用程序变得更加吸引人。 最后,Kinect for Windows SDK 2.0优秀的交互能力也是其非常突出的特点。它的 API 可以让开发者在应用程序中实现更加真实、独特的交互体验和增强现实效果。同时,在使用过程中,Kinect设备还可以轻松地与现有的应用程序进行整合。 总而言之,Kinect for Windows SDK 2.0是一款功能非常强大、易于使用的开发工具包,非常适合开发者用于创建基于Kinect设备的应用程序,帮助开发实现更加智能、全面的应用程序,让 Kinect 生态系统更加繁荣。 ### 回答3: Kinect for Windows SDK2.0是微软公司发布的一款软件开发工具包,旨在帮助开发者利用Kinect传感器开发Windows应用程序。该工具包支持C++、C#、VB和JavaScript等多种编程语言,拥有丰富的API和示例代码,可以实现人体骨骼追踪、手势识别、声音识别、运动捕捉等多种功能。 首先,该工具包提供了一整套API,包含了Kinect的各种功能,如颜色和深度图像获取、骨骼跟踪、音频采集、麦克风阵列控制等。这些API可以让开发者轻松地构建运用Kinect的应用程序,提高开发效率。 其次,该工具包提供了许多示例代码和教程,可供开发者学习借鉴。这些示例代码覆盖了Kinect的各个功能,可以帮助开发者深入了解Kinect的工作原理和应用场景,从而更好地利用其开发应用程序。 此外,由于Kinect for Windows SDK2.0是一款Windows平台的软件开发工具包,所以它与Windows操作系统的兼容性较好,在开发时不需要考虑不同平台之间的兼容性问题,可以更加专注于应用程序本身的开发。 总之,Kinect for Windows SDK2.0是一款功能强大、易于使用的软件开发工具包,旨在帮助开发者充分发挥Kinect的功能和优势,构建出更具创意性和实用性的应用程序,具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尹成

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值