欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > 内容正文

WP中的语音识别(上):基本识别,wp中语音识别识别

来源: 开发者 投稿于  被查看 16010 次 评论:252

WP中的语音识别(上):基本识别,wp中语音识别识别


WP 8.1目前许多内容仍处于未确定状态,因此,本文所提及的语音识别,是基于WP8的,在8.1中也差不多,也是使用运行时API来实现,如果大家不知道什么是运行时API,也没关系,不影响学习和开发,因为在VS创建项目后,默认会帮我们引用所有的库。

在本篇中,我们先从简单的实现入手,下一篇会给大家介绍如何自己设计语音命令。

先给大家说说库的位置,与语音识别有关的API在Windows.Phone.Speech.Recognition命名空间下,看名字就能猜到99.999998%了。在该命名空间下,有两个类可用于完成语音识别:

a、SpeechRecognizer

b、SpeechRecognizerUI

两个类的功能其实是等效的,带UI结尾的类在识别时会显示一个识别界面,待会看示例时大家就会看到的。对于SpeechRecognizer类,调用RecognizeAsync方法,异步等待后会返回一个SpeechRecognitionResult实例,其中Text属性表示已经识别出来的文本;对于SpeechRecognizerUI类,可以调用RecognizeWithUIAsync方法进行识别,同样,异步等待后,会返回SpeechRecognitionUIResult实例,从该实例的RecognitionResult属性中得到对SpeechRecognitionResult的引用,就能得到被识别的文本。

下面,我们可以看示例了。

1、启动VS,新建一个项目,命名为“我的高大上应用”。

2、在默认的MainPage.xaml页面中加入以下XAML。

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <StackPanel>
                <Button Content="开始识别" FontSize="40"/>
                <TextBox x:Name="txtInput" Height="250" Margin="0,11,0,0"/>
            </StackPanel>
        </Grid>

3、为Button控件加上Click事件处理方法。

<Button Content="开始识别" FontSize="40" Click="OnClick"/>

4、转到代码视图,先using一下我们要用到的命名空间。

using Windows.Phone.Speech.Recognition;

5、在OnClick方法中加入以下代码。

        private async void OnClick(object sender, RoutedEventArgs e)
        {
            // 实例化
            SpeechRecognizer sr = new SpeechRecognizer();
            // 开始识别
            Button btn = (Button)sender;
            btn.IsEnabled = false;
            SpeechRecognitionResult result = await sr.RecognizeAsync();
            // 显示被识别的文本
            txtInput.Text = result.Text;
            btn.IsEnabled = true;
        }

6、原则上,我们的高大上示例已经完成了,不过,还有一个小步骤,打开清单文件——WMAppManifest.xml,加上以下功能需求项:
ID_CAP_NETWORKING:允许使用网络,启用语音识别是必须项。

ID_CAP_MICROPHONE:都说语音识别了,话筒怎么能少呢?

ID_CAP_SPEECH_RECOGNITION:使应用支持语音识别。

即:

    <Capabilities>
      <Capability Name="ID_CAP_NETWORKING" />
      <Capability Name="ID_CAP_MEDIALIB_AUDIO" />
      <Capability Name="ID_CAP_MEDIALIB_PLAYBACK" />
      <Capability Name="ID_CAP_SENSORS" />
      <Capability Name="ID_CAP_WEBBROWSERCOMPONENT" />
      <Capability Name="ID_CAP_MICROPHONE" />
      <Capability Name="ID_CAP_SPEECH_RECOGNITION" />
    </Capabilities>

现在,请确保你的手机已经连上网络,建议连Wi-Fi,因为老虎网络会计流量的,成本较高。
好,不要犹豫,果断运行吧。当你看到程序运行后,请点击“开始识别”按钮,然后对着手机拼命表白,稍等一会,识别结果会显示在页面的文本框中,如下图所示。

唉,这时候,估计大伙要说我是骗子,是的,意外地报错了,我虽不敢说都报错,至少经过我测试,大多数时候,都会发生异常,这可能是系统的听写模式仍未对中文友好支持的原因。没事,既然听写模式不行,那咱们就来搜索模式。
在上面的OnClick上把代码改为如下:

        private async void OnClick(object sender, RoutedEventArgs e)
        {
            // 实例化
            SpeechRecognizer sr = new SpeechRecognizer();
            sr.Grammars.AddGrammarFromPredefinedType("cns", SpeechPredefinedGrammar.WebSearch);
            // 开始识别

也就是说加了这一行:

sr.Grammars.AddGrammarFromPredefinedType("cns", SpeechPredefinedGrammar.WebSearch);

cns是一个key名,可以随便取,这行代码就是告诉识别系统:“我要用搜索模式”,搜索模式是可以识别中文的。经过这样一改后,再次运行,然后你对着手机表白一下,好家伙,总算等到结果了。

啊,总算可以了。


我发现wp的搜索功可以太强大了无论是语音识别还是音乐

wp的搜索理念早已超越google。百度的框计算也跟不上bing的搜索理念。bing做搜索走的是“?”。有问题可通过各种方式:文字,图片,声音,扫描,相机等各种接口处理。不过,貌似google想估的搜索是“我猜你有什么问题”。哈哈,不用用户提问,直接给答案。
 

自然语言识别与语音识别有什不同?

自然语言识别也是语音识别。

他是区别指令式语音而命名,其基本原理都是一致。自然语音识别亮点是自然语言理解功能,即用户可以按照个人的语言习惯,用自己惯用的语气、惯用的词,将需要被识别的语音任务说出来即可。自然语音识别与指令式语音识别主要区别是词库大小及处理方式,指令语音所有处理都是本地进行,自然语音识别目前基本都是采用云处理方式,这样其语音库及处理能力是指令语音无法比拟的。

如:

当一条命令(如说:“发送短信给刘涛,今天晚上七点图书馆见。”)发出后,本地端会对“刘涛”这个命令词进行识别,而后将刘涛的电话号码从通讯录中调出,放在短信的收信人一栏中;随后将“今天晚上七点图书馆见”这段语音发送至云端,云端识别器识别完毕之后,把语音转化为文本反馈回来,本地端将文本填在短信内容里。这就是自然语音识别。

人:“请输入兴趣点名称”

  机器:“滨海”

  人:“您说的是滨海吗?”

  机器:“是。”

  人:“导航到上海滨海森林公园”

这就是指令式语音识别。
 

相关文章

    暂无相关文章
相关频道:

用户评论