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传输数据,解析。

时间: 2024-11-07 00:19:00

Windows Phone自带的语音识别的相关文章

windows 7自带分区工具实现磁盘重分区

在使用电脑时,有时会感觉当前硬盘分区不合理,例如以前使用XP系统,只需10G左右的磁盘空间就够了,而后安装Windows 7,则需要20G左右的空间,如果C盘过小,则会影响Windows 7的正常运行,诸如分区魔法师(PQ)的软件不能与Windows 7兼容,我们完全可以使用Windows 7自带的分区工具,实现无损数据而对磁盘重新分区!下面虾虾就为朋友们介绍详细的分区方法: [一]启动磁盘管理1.在开始菜单中,右键点击『计算机』,在弹出的菜单中点击『管理』. 如出现用户帐户控制窗口,点击『继续

windows系统自带命令查看硬件信息,怎样dos命令查看硬盘和内存/CPU信息

如何在windows系统自带命令查看硬件信息,怎样dos命令查看硬盘和内存/CPU信息?最直接的是:开始→运行→CMD打开命令提示符,在该窗口下输入systeminfo执行,即可看到几乎所有想知道的系统信息,甚至包括机器上已安装的网卡及其IP. 问题描述: 如何从系统中 查看主板上内存条的数量. 最佳答案: 在cmd命令下 输入:wmic memorychip list brief 就会看到内存条的数量 如何在windows系统自带命令查看硬件信息? 对于在windows下查看系统信息大家一定不

windows系统自带工具

辅助功能向导:单击"开始→运行",在弹出的对话框中输入:accwiz 计算器:单击"开始→运行",在弹出的对话框中输入:calc 字符影射表:单击"开始→运行",在弹出的对话框中输入:charmap 磁盘清理:单击"开始→运行",在弹出的对话框中输入:cleanmgr SQL Server 客户端网络实用工具:单击"开始→运行",在弹出的对话框中输入:cliconfg 剪贴薄查看器:单击"开始→运

励志:98岁老爷爷用Windows系统自带画图软件制作的神作

哈尔拉斯科,是一位很出名的老爷爷,他70岁才接触MS Paint(就是我们熟知的Windows自带的画图软件).他曾经是一名图形艺术家,但是之前他都是手工创作.他熟知怎么用双手进行艺术创作.但是后来,他的家人给他介绍了微软的画图软件. 现在,老爷爷花了无数时间,在空白的画布加入色彩点.他的工作是结合制作8位像素的点画.你必须亲自看看这些作品. 哈尔是一位老爷爷,而且也是一位像素画家. 什么事情现在做都不晚.就像哈尔一样. 本文由趣爱哟特邀翻译李小艾原创翻译,转载请注明! 转自:http://ww

利用Windows系统自带的Powershell功能计算文件的MD5、SHA256等Hash值

概述 windows系统自带的Powershell非常的强大, 是为了代替CMD而设计的, 本文将介绍如何不使用第三方软件计算文件的校验值 前提 windows系统必须是Windows 7 SP1及以上 使用 如图, 要校验图中的Test.hex文件 在当前目录下点击文件->打开Windows Powershell->打开Windows Powershell 输入Get-FileHash -Algorithm MD5 .\Test.hex回车即可 -Algorithm后面是计算hash的算法,

替换Windows系统自带记事本

Windows自带的记事本打开一些简单的短小文本不错,但自带的这个记事本相应的也很残.比如查找替换功能,比如编码格式兼容问题- 为了使记事本使用更方便,我们有不少替代方案,比如 notepad2,notepad++,ultraedit- 个人比较喜欢notepad2-mod,替换分两种,一种直接改名为notepad.exe替换文件,另一种则是使用映像劫持,将名称为notepad.exe的进程劫持到我们指定的程序,以此实现启动记事本时打开我们要的notepad2.exe. 替换文件 Windows

windows操作系统自带的TCP端口转发

因为工作中一个项目,总部与各个分部只有citrix服务器才能通讯,总部客户端想通过分部citrix访问分部内网资源.基本思路,通过程序修改获取的ICA文件中的IP地址和端口,将修改后的ICA文件返回给客户端,实现客户端通过连接本地citrix,自动跳转到另外一个网络的citrix.之前用的是haproxy,但是haproxy与程序交互不是很好,如果各个分部只有一台citrix服务器,事先静态写好还可以,但是一般分部会有多台citrix服务器,不能确定每次使用的是哪台citrix服务器,这样想通过

终于懂了:Delphi消息的Result完全是生造出来的,不是Windows消息自带的(Delphi对Windows编程体系的改造越大,学习收获就越大)

Windows中,消息使用统一的结构体(MSG)来存放信息,其中message表明消息的具体的类型, 而wParam,lParam是其最灵活的两个变量,为不同的消息类型时,存放数据的含义也不一样. time表示产生消息的时间,pt表示产生消息时鼠标的位置. 里面没有Result的选项.然后我用VC2008实测MSG结构的大小: #include <afx.h> void Cxe111Dlg::OnBnClickedButton1() { CString m_Str; int ddd = siz

删除 Windows 10 自带的程序,如新闻、邮件等

要用到的是 Windows PowerShell 这个程序,它是升级版的 CMD,可以使用的指令比较多,用 Windows 的搜索功能输入 PowerShell 就可以找到,然后右键以系统管理员身份运行. 只要在 PowerShell 里输入以下指令按下 Enter 就会立刻移除运动这个应用程式: Get-AppxPackage *bingsports* | Remove-AppxPackage 如果想要重新使用删除的应用程式,只要到市场里重新安装即可. 其他程序删除指令: 3D Builder