• Windows Phone自带的语音识别


    WindowsPhone下语音操作包括:

    1、程序内部的语音识别,用户可以通过语音识别进行输入或完成相关任务   

    2、控制程序的语音命令,控制程序启动、打开,并可对页面跳转等进行操作

    这篇文章将构建一个简单的语音识别(一般的会将说的话全部识别出来,而利用SRGS语法可识别一句话里面的组成)

    SRGS(语音识别语法规范),可以定义复杂的语音识别规则.如:识别用同义词替换了词语,漏说了非关键词等。

    SRGS须先保存到StorgeFile,再添加到SpeechRecognizer类的属性上。

    //按钮点击事件,开始进行语音识别
    private async void Button_Click(object sender, RoutedEventArgs e) {   string message = "";   try   {     SpeechRecognizer speechRecognizer = new SpeechRecognizer();
             
        //以下两个事件就不写了     speechRecognizer.StateChanged
    += speechRecognizer_StateChanged;//状态改变     speechRecognizer.RecognitionQualityDegrading += speechRecognizer_RecognitionQualityDegrading;//语音质量     //获取内置的SRGS语法文件,如只是简单的识别出将的话,不要这三行     StorageFile file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("SRGSGrammar.xml");   SpeechRecognitionGrammarFileConstraint grammarFile = new SpeechRecognitionGrammarFileConstraint(file);     speechRecognizer.Constraints.Add(grammarFile);//添加SRGS语法约束     //speechRecognizer.UIOptions.ExampleText = "这里填的是有UI时候的示例";     
        //
    分析语音     SpeechRecognitionCompilationResult compilationResult = await speechRecognizer.CompileConstraintsAsync();   if (compilationResult.Status == SpeechRecognitionResultStatus.Success)     {
          var result = await speechRecognizer.RecognizeAsync();//无界面的语音识别 若为.RecognizeWithUIAsync(); 则是显示系统本身的识别界面       if (result.Confidence == SpeechRecognitionConfidence.Rejected)
          {
            message
    = "识别不到";       }       else       {         resultMessage.Text = result.Text; //识别结果       }     }   }   catch (Exception err)   {     message = "异常信息:" + err.Message + err.HResult;   }
    }

     SRGSGrammar.xml文件

    <?xml version="1.0" encoding="utf-8" ?>
    <grammar version="1.0" xml:lang="zh-cn" root="mediaMenu" tag-format="semantics/1.0" 
          xmlns=http://www.w3.org/2001/06/grammar 
        xmlns:sapi
    ="http://schemas.microsoft.com/Speech/2002/06/SRGSExtensions"><!- 这些都是必不可少的--> <rule id="city" scope="public"> <one-of> <!-- 匹配其中一个短语--> <item>北京</item> <item>上海</item> </one-of> </rule> <rule id="cross" scope="public"> <one-of> <item>到</item> <item>至</item> <item>飞往</item> </one-of> </rule> <rule id="Menu" scope="public"> <item> <ruleref uri="#date"/> <!--指定关联的其他规则的节点--> <tag>out.date = reles.latest();</tag> </item> <item repeat="0-1">从</item> <!--显示1次或0次--> <item> <ruleref uri="#city"/> <tag>out.city = rulels.latest();</tag> </item> <item> <ruleref uri="#cross"/> <tag>out.cross = rulels.latest();</tag> </item> <item> <ruleref uri="#city"/> <tag>out.city = rulels.latest();</tag> </item> </rule> </grammar>

    以上可以实现识别"从(“从”可有可无) 北京/上海  到/至/飞往  北京/上海"
    北京到上海、从北京到上海、北京飞往上海、从上海飞往北京、上海到北京等。

    可惜的是,出发地和到达地是能够重复的。且只支持“ (从)出发地---到达地” 这样特定的规则

    说多了其他的(废)话,就会识别出错。

    PS:最近的项目上要添加语音识别功能,要求用的是百度语音识别的SDK/API,可惜前者只支持Android和Iphone

    后者虽是各个平台通用,但工作量上大了一点,得先进行录音,之后再通过HttpWebRequest和API传输数据,解析。 

  • 相关阅读:
    RxJS 系列 – Error Handling Operators
    RxJS 系列 – Join Creation Operators
    Google – Reviews
    Google Analytics – GA4 & Tag Manager 概念篇
    DOM & BOM – Input File, Drag & Drop File, File Reader, Blob, ArrayBuffer, File, UTF8 Encode/Decode, Download File
    RxJS 系列 – 大杂烩
    RxJS 系列 – Join Operators
    RxJS 系列 – 实战练习
    前端接收文件流并下载解决乱码问题
    package.json 与 packagelock.json 的关系
  • 原文地址:https://www.cnblogs.com/yffswyf/p/4056106.html
Copyright © 2020-2023  润新知