微软在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停止识别过程和终止识别。