微信公众平台消息接口开发(40)语音识别

简介: 微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别   微信公众平台开发 语音识别 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/archive/2013/02/06/weixin-if40-voice-recognition.html   一、申请微信认证 微信认证后将自动开通高级接口,获得高级接口中所有接口权限,无需二次申请。

微信公众平台开发模式 微信 语音识别 公众平台 消息接口 语音识别

 

微信公众平台开发 语音识别 
作者:方倍工作室 
地址:http://www.cnblogs.com/txw1958/archive/2013/02/06/weixin-if40-voice-recognition.html

 

一、申请微信认证

微信认证后将自动开通高级接口,获得高级接口中所有接口权限,无需二次申请。
高级接口含有获取用户基本信息、客服接口、语音识别等高级接口权限。

 

二、获取语音识别结果

开通语音识别功能,且该功能设置处于开启状态的公众帐号,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段。

开启语音识别后的语音XML数据包如下:

<xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>1357290913</CreateTime>
    <MsgType><![CDATA[voice]]></MsgType>
    <MediaId><![CDATA[media_id]]></MediaId>
    <Format><![CDATA[Format]]></Format>
    <Recognition><![CDATA[深圳天气怎么样]]></Recognition>
    <MsgId>1234567890123456</MsgId>
</xml>
参数说明:

参数    描述
ToUserName    开发者微信号
FromUserName     发送方帐号(一个OpenID)
CreateTime     消息创建时间 (整型)
MsgType     语音为voice
MediaID     语音消息媒体id,可以调用多媒体文件下载接口拉取该媒体
Format     语音格式:amr
Recognition     语音识别结果,UTF8编码
MsgID     消息id,64位整型

 

三、使用中文分词提取关键特征

中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多、困难的多。通过分词可以提取其中关键词语进行搜索。

打个比方:

例如,识别结果为”深圳天气怎么样”,可分词为”深圳”,”怎么样”,三个词。我们提取出“天气”作为名词,“深圳”作为地点名词,

以下是SAE上的分词代码示例:

<?php
$str = "深圳天气怎么样";
$seg = new SaeSegment();
$ret = $seg->segment($str, 1);

print_r($ret);    //输出

if ($ret === false)
     var_dump($seg->errno(), $seg->errmsg());
?>

识别结果如下:

Array
(
    [0] => Array
        (
            [word] => 深圳
            [word_tag] => 102
            [index] => 0
        )

    [1] => Array
        (
            [word] => 天气
            [word_tag] => 95
            [index] => 1
        )

    [2] => Array
        (
            [word] => 怎么样
            [word_tag] => 40
            [index] => 2
        )

)
//词性对应关系
POSTAG_ID_N = 95 (line 322) 
名词
POSTAG_ID_NS_Z = 102 (line 357) 
地名(名处词专指:“中国”)
POSTAG_ID_D = 40 (line 207) 
副词

 

 

三、程序实现

判断是否开启语音识别

private function receiveVoice($object)
{
    if (isset($object->Recognition) && !empty($object->Recognition)){
        $contentStr = "你发送的是语音,内容为:".$object->Recognition;
    }else{
        $contentStr = "未开启语音识别功能或者识别内容为空";
    }
    if (is_array($contentStr)){
        $resultStr = $this->transmitNews($object, $contentStr);
    }else{
        $resultStr = $this->transmitText($object, $contentStr);
    }
    return $resultStr;
}

效果如下:

调用SAE分词

var_dump(segment("明天长沙天气怎么样"));
function segment($str)
{
    $seg = new SaeSegment();
    $ret = $seg->segment($str, 1);

    if ($ret === false){
        return;
    }
    $category = "";
    $keyword = "";
    foreach ($ret as $key => $value) {
        if ($value["word_tag"] == 95){
            $category = $value["word"];
        }
        if ($value["word_tag"] == 102){
            $keyword = $value["word"];
        }
    }
    if (!empty($category) && !empty($keyword)){
        return array('category'=>$category, 'keyword'=>$keyword); 
    }else{
        return;
    }
}

返回结果如下:

array(2) {
  ["category"]=>string(6) "天气"
  ["keyword"]=>string(6) "长沙"
}

这样就获知晓了用户要查询的功能是天气,城市名称是长沙。

功能查询

根据获得的功能类别及关键字,我们可以查询相应的城市天气预报。

include("segment.php");
$result = sinasegment($content);
if (is_array($result)){
    switch ($result['category'])
    {
        case "天气":
            $url = "http://api100.duapp.com/weather/?appkey=trialuser&city=".urlencode($result['keyword']);
            $output = file_get_contents($url);
            $contentStr = json_decode($output, true);
            break;
        case "空气":
            $url = "http://api100.duapp.com/airquality/?appkey=trialuser&city=".urlencode($result['keyword']);
            $output = file_get_contents($url);
            $contentStr = json_decode($output, true);
            break; 
        default:
            $contentStr = "还不支持这一功能:".$result['category'];
            break;
    }
}else{
    $contentStr = "不能理解你的内容:".$content;
}

 

 

四、效果演示

 

 

相关实践学习
一键创建和部署高分电影推荐语音技能
本场景使用天猫精灵技能应用平台提供的技能模板,在2-5分钟内,创建一个好玩的高分电影推荐技能,使用模板后无须代码开发,系统自动配置意图、实体等,新手0基础也可体验创建技能的乐趣。
达摩院智能语音交互 - 声纹识别技术
声纹识别是基于每个发音人的发音器官构造不同,识别当前发音人的身份。按照任务具体分为两种: 声纹辨认:从说话人集合中判别出测试语音所属的说话人,为多选一的问题 声纹确认:判断测试语音是否由目标说话人所说,是二选一的问题(是或者不是) 按照应用具体分为两种: 文本相关:要求使用者重复指定的话语,通常包含与训练信息相同的文本(精度较高,适合当前应用模式) 文本无关:对使用者发音内容和语言没有要求,受信道环境影响比较大,精度不高 本课程主要介绍声纹识别的原型技术、系统架构及应用案例等。 讲师介绍: 郑斯奇,达摩院算法专家,毕业于美国哈佛大学,研究方向包括声纹识别、性别、年龄、语种识别等。致力于推动端侧声纹与个性化技术的研究和大规模应用。
相关文章
|
4月前
|
数据处理 语音技术
(保姆教程及高级玩法-自定义数据处理)微信同声传译插件-语音识别
(保姆教程及高级玩法-自定义数据处理)微信同声传译插件-语音识别
22 0
|
4月前
|
小程序 前端开发 JavaScript
(保姆教程及高级玩法及坑)微信同声传译插件-语音识别
(保姆教程及高级玩法及坑)微信同声传译插件-语音识别
132 0
|
Web App开发 JavaScript NoSQL
redis,nodejs,php,pub/sub 实战: 微信语音识别
2015年5月22日 20:20:20 星期五 效果: 这边对微信说话,  浏览器端及时显示语音识别的文字 注意: 在连接socket.io时, 按下浏览器f12, 如果一直有请求不断的刷, 说明socket.
1164 0
|
PHP
微信公众平台消息接口开发-封装weixin.class.php
原文:微信公众平台消息接口开发-封装weixin.class.php 一、封装weixin.class.php 由于微信公众平台的通信使用的是特定格式的XML数据,每次接受和回复都要去做一大堆的数据处理。
816 0
|
XML API 数据格式
微信公众平台消息接口开发(32)空气质量指数查询
原文:微信公众平台消息接口开发(32)空气质量指数查询 微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 空气质量指数 PM2.5 作者:方倍工作室 原文:http://www.cnblogs.
1456 0
|
测试技术 语音技术
微信快速开发框架(八)-- V2.3--增加语音识别及网页获取用户信息,代码已更新至Github
不知不觉,版本以每周更新一次的脚步进行着,接下来应该是重构我的代码及框架的结构,有朋友反应代码有点乱,确实如此,当时写的时候只是按照订阅号来写的,后来才慢慢增加到支持API接口。目前还在开发第三方微信平台,旨在使用户能够无需自己开发就能简易搭建微信平台。
1211 0
|
JSON 数据格式
微信公众平台消息接口开发(7)快递查询
微信公众平台消息接口 微信公众平台开发 微信公众平台开发模式  快递查询 作者:方倍工作室原文:http://www.cnblogs.com/txw1958/archive/2013/03/12/weixin-if7-express.
2332 0
微信公众平台消息接口开发(9)骑行西藏自定义菜单
    最新教程,请访问:http://www.cnblogs.com/txw1958/p/weixin-58-custom-menu.html           1. 申请成为服务号(新申请订阅号无法开发申请菜单) 2.
1247 0
|
Web App开发
微信公众平台消息接口开发(6)电话号码链接与网址链接
微信公众平台 开发模式  电话链接 一键拨号 网址链接 A标签 邮箱链接 方倍工作室 作者:http://www.cnblogs.com/txw1958/标题:http://www.cnblogs.com/txw1958/archive/2013/03/05/weixin-if6-link-call-url.html   在微信文本消息中有些特殊的链接能够被自动识别。
1251 0

热门文章

最新文章