设为首页 收藏本站
查看: 633|回复: 0

[经验分享] Kinect for windows语音识别(Speech)

[复制链接]

尚未签到

发表于 2018-6-13 09:18:36 | 显示全部楼层 |阅读模式
  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)  
  •        {  
  •            //从Kinect集合中找到连接上的Kinect  
  •            foreach (KinectSensor ks in KinectSensor.KinectSensors)  
  •            {  
  •                //找到连接的Kinect  
  •                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);  
  •                    //读取xml 配置文件的语言库  
  •                    using (var memoryStream = new MemoryStream(Encoding.ASCII.GetBytes(Properties.Resources.SpeechGrammar)))  
  •                    {  
  •                        var g = new Grammar(memoryStream);  
  •                        speechEngine.LoadGrammar(g);  
  •                    }
  •                    #region 程序中用代码添加识别字库  
  •                    //var directions = new Choices();  
  •                    //directions.Add(new SemanticResultValue("した", "した"));  
  •                    //directions.Add(new SemanticResultValue("うえ", "うえ"));  
  •                    //directions.Add(new SemanticResultValue("はじめ", "はじめ"));  
  •                    //directions.Add(new SemanticResultValue("おわり", "おわり"));  

  •                    //var grammarbuilder = new GrammarBuilder { Culture = recognizer.Culture };  
  •                    //grammarbuilder.Append(directions);  

  •                    //Grammar grammar = new Grammar(grammarbuilder);  
  •                    //speechEngine.LoadGrammar(grammar);
  •                    #endregion  

  •                    //订阅语音识别委托实例  
  •                    speechEngine.SpeechRecognized += SpeechRecognized;  
  •                    //设置语音识别流  
  •                    speechEngine.SetInputToAudioStream(kinectsensor.AudioSource.Start(), new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));  
  •                    //开始识别  
  •                    speechEngine.RecognizeAsync(RecognizeMode.Multiple);  
  •                }  
  •            }  
  •        }  
  •        /// <summary>  
  •        /// 从对象中获取要使用的识别对象  
  •        /// </summary>  
  •        /// <returns></returns>  
  •        private static RecognizerInfo GetKinectRecognizer()  
  •        {  
  •            //从系统所有语单识别集合中找到自己使用的语音识别对象  
  •            foreach (RecognizerInfo recognizer in SpeechRecognitionEngine.InstalledRecognizers())  
  •            {  
  •                string value;  
  •                //判断是否为Kinect的语音识别对象(微软的语音识别,有为Kinect的,也有非Kinect的,所以要判断是否为Kinect)  
  •                recognizer.AdditionalInfo.TryGetValue(&quot;Kinect&quot;, out value);//en-US为英主    ja-JP为日语  
  •                //第二个条件为采用那种语言  
  •                if (&quot;True&quot;.Equals(value, StringComparison.OrdinalIgnoreCase) && &quot;en-US&quot;.Equals(recognizer.Culture.Name, StringComparison.OrdinalIgnoreCase))  
  •                {  
  •                    return recognizer;  
  •                }  
  •            }  
  •            return null;  
  •        }  

  •        private void SpeechRecognized(object sender, SpeechRecognizedEventArgs e)  
  •        {  
  •            const double ConfidenceThreshold = 0.4;  
  •            //e.Result.Confidence为词语识别率,值为0到1,值越大,识别率越准确  
  •            if (e.Result.Confidence >= ConfidenceThreshold)  
  •            {  
  •                //匹配的词语  
  •                switch (e.Result.Semantics.Value.ToString())  
  •                {  
  •                    //匹配xml ,为英语识别  
  •                    case &quot;Next&quot;:  
  •                        Message_Lab.Text = &quot;向下&quot;;  
  •                        break;  
  •                    case &quot;Previous&quot;:  
  •                        Message_Lab.Text = &quot;向上&quot;;  
  •                        break;  
  •                    case &quot;Run&quot;:  
  •                        Message_Lab.Text = &quot;开始&quot;;  
  •                        break;  
  •                    case &quot;Close&quot;:  
  •                        Message_Lab.Text = &quot;停止&quot;;  
  •                        break;  
  •                    //匹配xml ,为日语识别  
  •                    //case &quot;した&quot;:  
  •                    //    Message_Lab.Text = &quot;向下&quot;;  
  •                    //    break;  
  •                    //case &quot;うえ&quot;:  
  •                    //    Message_Lab.Text = &quot;向上&quot;;  
  •                    //    break;  
  •                    //case &quot;はじめ&quot;:  
  •                    //    Message_Lab.Text = &quot;开始&quot;;  
  •                    //    break;  
  •                    //case &quot;おわり&quot;:  
  •                    //    Message_Lab.Text = &quot;停止&quot;;  
  •                    //    break;  
  •                }  
  •            }  
  •        }  

  •        private void Form1_FormClosing(object sender, FormClosingEventArgs e)  
  •        {  
  •            if (kinectsensor != null && kinectsensor.Status == KinectStatus.Connected)  
  •            {  
  •                kinectsensor.AudioSource.Stop();  
  •                kinectsensor.Stop();//结束Kinect采集工作  
  •                MessageBox.Show(&quot;Kinect结束工作!&quot;);  

  •            }  
  •        }  

  其中语音识别的匹配xml为:


  • <grammar version=&quot;1.0&quot; xml:lang=&quot;en-US&quot; root=&quot;rootRule&quot; tag-format=&quot;semantics/1.0-literals&quot; xmlns=&quot;http://www.w3.org/2001/06/grammar&quot;>
  •   <rule id=&quot;rootRule&quot;>
  •     <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>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-523067-1-1.html 上篇帖子: windows10/2016上使用docker 下篇帖子: sqlserver2012 安装详解
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表