资讯专栏INFORMATION COLUMN

HTML用javascrip在浏览器上实现语音输入和语义理解功能(speex压缩)

沈建明 / 3126人阅读

摘要:返回的字串如下我要听三国演义这本书正在努力搜索中,请稍等我要听三国演义这本书三国演义通过解析这段,可以得到类型,用于查询书名,是表示行为是播放。

基于javascript用olamisdk实现web端语音识别语义理解(speex压缩)

转载请注明原文地址:传送

olami 开放平台 sdk 除了支持语音识别功能外,更强大的在于支持语义理解功能,在 Android 平台和 iOS 平台都有示例 demo 供大家下载。

语音在线听书demo:传送

语音记账demo:传送

在 web 端,基于 JavaScript 用 olami 开放平台 sdk 也可以实现语音识别语义理解。本文就实现了这样一个小程序,web 客户端本地用麦克风录音,录音的数据用 speex 压缩,然后跨域向服务器发送请求,返回识别的语音和语义字符串并显示。

先上图:

如下图刚载入的时候,未录音前界面

点击开始录音button后

一句话说完自动检测尾音结束标志然后压缩上传给服务器进行识别

将从服务器获取的识别结果显示到界面上

本例中说的语音是:“我要听三国演义这本书”,用的是 android 平台听书 app 建立的语法。
返回的json字串如下:

{
    “data”: {
        “asr”: {
            “result”: “我要听三国演义这本书”,
            “speech_status”: 0,
            “final”: true,
            “status”: 0
        },
        “nli”: [
            {
                “desc_obj”: {
                    “result”: “正在努力搜索中,请稍等”,
                    “status”: 0
                },
                “semantic”: [
                    {
                        “app”: “musiccontrol”,
                        “input”: “我要听三国演义这本书”,
                        “slots”: [
                            {
                                “name”: “songname”,
                                “value”: “三国演义”
                            }
                        ],
                        “modifier”: [
                            “play”
                        ],
                        “customer”: “58df512384ae11f0bb7b487e”
                    }
                ],
                “type”: “musiccontrol”
            }
        ]
    },
    “status”: “ok”
}

通过解析这段 json,可以得到 app 类型,songname (用于查询书名),modifier 是 play 表示行为是播放。

这段 json 的语法当然是用户自定义的,获得了 json 字串就可以解析得到程序需要的字段用于对应的操作,从而实现了语义理解功能。olami 开放平台语法编写介绍

下面来看看实现的 code,用 eclipse 建立 J2EE 工程 WebVoiceRecognize

初次搭建可以参考如下网站: 传送

下面是建立的工程目录结构,发布后,网页打开运行在chrome或者QQ浏览器均可。

下面讲述下 voiceRecognize.html 这个文件,其他都是 min.js,只需知道如何调用就可以了。

  1. voice recognize <span class="hljs-built_in">test</span>
  2. 点击开始button录音,点击停止button停止录音并进行识别

  3. result:

浏览器载入的时候,先调用load()进行初始化

</>code

  1. function load(){
  2. setAuthorization(
  3. "http://cn.olami.ai/cloudservice/api",//serverurl
  4. "51a4bb56ba954655a4fc834bfdc46af1", //appkey
  5. "asr",//api类型
  6. "68bff251789b426896e70e888f919a6d",//appSecret
  7. "nli");//seq
  8. setCallBackFromServerResult(getResultFromServer);
  9. }

initAudio()中初始化了recorder用于获取麦克风资源做录音使用。

setAuthorization函数,参数分别是

url :服务器地址
appkey:开放平台注册应用后获得的appkey
api:api类型选asr为语音
appSecret:开放平台注册应用后获得的appSecret
nli:为seq表示包含语音语义返回,为stt表示只有语音返回

setCallBackFromServerResult(getResultFromServer) 注册录音介绍并且识别出结果后的回调,在回调函数中可以把结果输出到界面上。

当点击开始录音 button 后,调用

</>code

  1. function StartRecording()
  2. {
  3. // start recording
  4. if (audioRecorder == null)
  5. {
  6. initAudio();
  7. alert("need initialize media");
  8. }
  9. audioRecorder.clear();
  10. audioRecorder.record();
  11. recording = true;
  12. bRecorded = false;
  13. ToggleLabels();
  14. RegisterCallBackToRecorder(); //注册recoder回调
  15. }

当在录音的js代码中,会自动检测尾音结束,然后回调注册的函数speexEncode (),点击停止录音button一样调用这个函数

</>code

  1. window.speexEncode = function()
  2. {
  3. exportSpeex();
  4. };
  5. function exportSpeex()
  6. {
  7. recording = false;
  8. bRecorded = true;
  9. ToggleLabels();//更新界面的button状态
  10. audioRecorder.stop();
  11. audioRecorder.exportPCM(uploadSpeexData);
  12. }

audioRecorder.exportPCM(uploadSpeexData) 实现了将录好的 16Kpcm 语音压缩成 speex 格式并上传到服务器,从服务器取得结果后调用注册的

setCallBackFromServerResult(getResultFromServer)函数,然后再函数 getResultFromServer 中进行结果的输出显示。

代码下载地址:

https://github.com/ls0609/Web...

相关网站链接:

olami开放平台语法官方介绍:https://cn.olami.ai/wiki/?mp=...
olami开放平台语法编写简介:http://blog.csdn.net/ls0609/a...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84627.html

相关文章

  • HTMLjavascrip览器上实语音输入语义理解功能speex压缩

    摘要:返回的字串如下我要听三国演义这本书正在努力搜索中,请稍等我要听三国演义这本书三国演义通过解析这段,可以得到类型,用于查询书名,是表示行为是播放。 基于javascript用olamisdk实现web端语音识别语义理解(speex压缩) 转载请注明原文地址:传送 olami 开放平台 sdk 除了支持语音识别功能外,更强大的在于支持语义理解功能,在 Android 平台和 iOS 平台都...

    darkbug 评论0 收藏0
  • GitChat · 人工智能 | 语音自然语言控制智能家居——实例分享

    摘要:代码下载语音和自然语言控制智能家居输出协议实例源码注下载代码后请仔细阅读说明文档。表示处理来自接口的语义结果录音处理为文字处理为是和的数据传递媒介,中会将需要的控件传过去用来处理智能家居的语法解析和命令输出。 GitChat 作者:晶晶郭原文:用语音和自然语言控制智能家居——实例分享关注公众号:GitChat 技术杂谈,一本正经的讲技术 前言 ZigBee作为一种短距离、低功耗的无线通...

    妤锋シ 评论0 收藏0

发表评论

0条评论

沈建明

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<