Kinect for windows提供了语音识别的能力,它靠Kinect的语音采集流进行识别的,这是建立在微软的语音识虽库的基础上的,关于微软语音识别可以参考http://msdn.microsoft.com/en-us/library/hh361572(v=office.14).aspx。对别Kinect识别的语音,目前只支持如下语言:en-US,de-DE,en-AU,en-CA,en-GB,en-IE,en-NZ,es-ES,es-MX,fr-CA,fr-FR,it-IT,ja-JP(很遗憾没有中文,相信在不远的将来会有的)。
下列代码为语音识别:
- KinectSensor kinectsensor = null;
- SpeechRecognitionEngine speechEngine;
- private void Form1_Shown(object sender, EventArgs e)
- {
-
- foreach (KinectSensor ks in KinectSensor.KinectSensors)
- {
-
- if (ks.Status == KinectStatus.Connected)
- {
- kinectsensor = ks;
- kinectsensor.Start();
- this.Text = "Kinect开始工作……";
-
- break;
- }
-
- }
- if (kinectsensor != null)
- {
-
- RecognizerInfo recognizer = GetKinectRecognizer();
- if (null != recognizer)
- {
- this.speechEngine = new SpeechRecognitionEngine(recognizer.Id);
-
- using (var memoryStream = new MemoryStream(Encoding.ASCII.GetBytes(Properties.Resources.SpeechGrammar)))
- {
- var g = new Grammar(memoryStream);
- speechEngine.LoadGrammar(g);
- }
- #region 程序中用代码添加识别字库
-
-
-
-
-
-
-
-
-
-
-
- #endregion
-
-
- speechEngine.SpeechRecognized += SpeechRecognized;
-
- speechEngine.SetInputToAudioStream(kinectsensor.AudioSource.Start(), new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
-
- speechEngine.RecognizeAsync(RecognizeMode.Multiple);
- }
- }
- }
-
-
-
-
- private static RecognizerInfo GetKinectRecognizer()
- {
-
- foreach (RecognizerInfo recognizer in SpeechRecognitionEngine.InstalledRecognizers())
- {
- string value;
-
- recognizer.AdditionalInfo.TryGetValue("Kinect", out value);
-
- if ("True".Equals(value, StringComparison.OrdinalIgnoreCase) && "en-US".Equals(recognizer.Culture.Name, StringComparison.OrdinalIgnoreCase))
- {
- return recognizer;
- }
- }
- return null;
- }
-
- private void SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
- {
- const double ConfidenceThreshold = 0.4;
-
- if (e.Result.Confidence >= ConfidenceThreshold)
- {
-
- switch (e.Result.Semantics.Value.ToString())
- {
-
- case "Next":
- Message_Lab.Text = "向下";
- break;
- case "Previous":
- Message_Lab.Text = "向上";
- break;
- case "Run":
- Message_Lab.Text = "开始";
- break;
- case "Close":
- Message_Lab.Text = "停止";
- break;
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- }
- }
-
- private void Form1_FormClosing(object sender, FormClosingEventArgs e)
- {
- if (kinectsensor != null && kinectsensor.Status == KinectStatus.Connected)
- {
- kinectsensor.AudioSource.Stop();
- kinectsensor.Stop();
- MessageBox.Show("Kinect结束工作!");
-
- }
- }
其中语音识别的匹配xml为:
- <grammar version="1.0" xml:lang="en-US" root="rootRule" tag-format="semantics/1.0-literals" xmlns="http://www.w3.org/2001/06/grammar">
- <rule id="rootRule">
- <one-of>
- <item>
- <tag>Next</tag>
- <one-of>
- <item> next </item>
- <item> n </item>
- <item> down </item>
- <item> qian </item>
- </one-of>
- </item>
- <item>
- <tag>Previous</tag>
- <one-of>
- <item> previous </item>
- <item> p </item>
- <item> up </item>
- <item> hou </item>
- </one-of>
- </item>
- <item>
- <tag>Run</tag>
- <one-of>
- <item> run </item>
- <item> open </item>
- <item> r </item>
- </one-of>
- </item>
- <item>
- <tag>Close</tag>
- <one-of>
- <item> close </item>
- <item> exit </item>
- <item> c </item>
- </one-of>
- </item>
- </one-of>
- </rule>
- </grammar>
本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/1186511,如需转载请自行联系原作者