前言
在公司的Web项目中,我们需要实现语音搜索功能,经过考察,我们选择了使用迅飞语音听写(流式版)WebAPI。这是一项强大的语音识别服务,它能将语音转换成文本,使机器能够理解人类语言。
语音听写功能简介
主要特点:
-
语音转文本:将60秒以内的语音转换为对应的文本信息,实现了让机器"听懂"人类语言的功能。
-
流式语音识别:支持实时返回识别结果,使得在上传语音的同时获取识别文本的效果,适用于需要边说话边识别的场景。
-
Websocket API:提供了通用的Websocket接口,支持流式数据传输,满足了需要实时数据传输的AI服务需求。
-
跨语言支持:相较于SDK,WebAPI更轻量、跨语言,便于在不同平台上使用。
-
跨域优势:Websocket API原生支持跨域请求。
-
个性化热词:可以上传个性化热词以提高识别准确度。语音听写流式WebAPI 服务热词使用方式:登陆开放平台(https://www.xfyun.cn/) 后,找到控制台–我的应用—语音听写—个性化热词,上传热词。
运行过程概述:
-
实例化API:在使用前,需要实例化迅飞语音听写(流式版)WebAPI。这里我们提供了一个示例代码,它包括了API的初始化、状态变化回调以及识别结果回调等功能。
-
获取API参数:为了使用API,需要获取以下参数:
appId
、apiKey
、apiSecret
,这些参数可以在迅飞开放平台注册应用后获得。 -
开始识别:调用API的
start()
方法来开始语音识别。 -
识别结果处理:监听识别结果的变化,一旦有新的文本识别出来,可以在回调函数中进行相应的处理,比如更新页面内容或触发其他交互逻辑。
-
自动关闭:为了避免不必要的持续识别,可以设置一个超时机制,例如在3秒内没有语音输入时自动停止识别。
-
关闭识别:当识别完成或需要手动停止时,调用
stop()
方法来关闭识别。 -
获取API认证信息:在迅飞开放平台注册并登录后,可以在控制台中创建应用并获取API认证信息,包括
appId
、apiKey
、apiSecret
。 -
本地环境要求:为了使用浏览器录音功能,需要在localhost、127.0.0.1或https环境下运行,并且允许API调用麦克风权限。
-
识别运行过程:整个识别过程包括建立WebSocket连接、获取浏览器录音权限、获取录音数据、处理数据格式、通过WebSocket传输数据、接收和处理服务器返回的数据等多个步骤。
讯飞文档使用说明
语音听写简介:
https://www.xfyun.cn/services/voicedictation
语音听写(流式版)WebAPI 文档:
https://www.xfyun.cn/doc/asr/voicedictation/API.html
SDK&API 错误码查询:
https://www.xfyun.cn/document/error-code
封装JS库及使用方式
我为大家提供了一个已封装好的库,去除了很多不必要的插件和代码,可以直接Web前端、H5中调用(在html文件中引入js文件调即可,使用起来很方便,不用去打包编译等)
需要注意的是,获取浏览器录音功能,因安全性问题,需要在localhost 或 127.0.0.1 或 https 下才能获取权限,在这里记录一下,方便以后再次用到。
注意事项
要使用该功能,请先去迅飞开放平台(https://www.xfyun.cn/)注册账户(只限新用户),然后登录到控制台,创建应用拿到迅飞语音听写(流式版)WebAPI服务接口认证信息,分别是appId: ‘’, apiKey: ‘’, apiSecret: ''这3种参数。
迅飞语音相对来说做得还是比较成熟了,不过是收费的,是按照调用API次数来收费,但是有试用次数,新用户注册每天有500次调用次数,用户实名认证后每天有15万次调用次数。
使用前提条件
-
要有appId,apiKey,apiSecret这3个参数,并且还要有API次数。
-
要有硬件设备(麦克风)并且允许受权API调用麦克风的权限。
-
使用要在服务环境下运行如(WAMP、XAMPP、Phpstudy、http-server、WebServer)以localhost 或 127.0.0.1 或 在https环境下运行。
实例化API
let times = null;
// 实例化迅飞语音听写(流式版)WebAPI
const voice = new Voice({
// 服务接口认证信息 注:apiKey 和 apiSecret 字符串的长度都差不多,请不要填错了哦!
appId: '',
apiSecret: '',
apiKey: '',
// 注:要获取以上3个参数,请到迅飞开放平台:https://www.xfyun.cn/services/voicedictation 【注册的新用户,每天服务量500(也就是调500次),如果你需求里大请购买服务量:https://www.xfyun.cn/services/voicedictation?target=price】
onWillStatusChange: function (oldStatus, newStatus) {
//可以在这里进行页面中一些交互逻辑处理:注:倒计时(语音听写只有60s),录音的动画,按钮交互等!
},
onTextChange: function (text) {
//监听识别结果的变化
console.log('识别结果:', text)
// 3秒钟内没有说话,就自动关闭
if (text) {
clearTimeout(times);
times = setTimeout(() => voice.stop(), 3000);
};
}
});
// 开始识别方法
voice.start();
// 关闭识别
voice.stop();
具体使用Demo请见 https://github.com/ilovejiabao/VoiceDictation
评论区