小程序篇
小程序端的实时语音识别以插件的形式调用
- 需要先在控制台开通实时语音识别功能(保存appId,secretkey,secretid)
- 在小程序管理后台添加插件(小程序管理后台-设置-第三方服务-插件管理),插件管理中搜索wx3e17776051baf153并添加使用,个人小程序无法使用
该插件有三种调用方式分别是
- 语音合成
- 实时语音识别(websocket)
- 实时语音识别(http)
这里只记录第三种调用方式:
//声明
var countTime = 5
let plugin = requirePlugin("QCloudAIVoice"); //引入语音识别插件
plugin.setQCloudSecret(你的appId, "secretid", "secretkey", true); //设置腾讯云账号信息,其中appid是数字,secret是字符串,openConsole是布尔值(true/false),为控制台打印日志开关
let manager = plugin.getRecordRecognitionManager(); //获取全局唯一的语音识别管理器
var initTime // 声明一个全局变量,let为局部变量
//调用
async onLoad(options) {
//调用内部方法挂载
manager.onStart((res) => {
console.log('recorder start', res.msg);
})
manager.onStop((res) => {
console.log('recorder stop', res.tempFilePath);
})
manager.onError((res) => {
console.log('recorder error', res.errMsg); // 打印录音识别错误信息
})
}
//methord 调用方法 -------------------------
// 去除逗号句号和空格 方法
cleanString(input) {
// 检查输入是否为有效的字符串
if (typeof input !== 'string' || input.length === 0) {
return '' // 或者返回其他默认值,比如 null 或 undefined,根据需求决定
}
// 使用正则表达式匹配中文逗号和句号
const regex = /[,。]/g
// 替换中文逗号和句号为空字符串
let cleaned = input.replace(regex, '')
// 去除头部和尾部的空格
cleaned = cleaned.trim()
return cleaned
},
/**开始录音并识别 */
start: function () {
this._signBtncountdown() // 开始计时
//开始识别
manager.start({
duration: this.data.duration,
engine_model_type: '16k_zh',
// 以下为非必填参数,可跟据业务自行修改
// hotword_id = '08003a00000000000000000000000000',
// filter_dirty = 0,
// filter_modal = 0,
// filter_punc = 0,
// convert_num_mode = 0,
// needvad = 1
});
//获取识别内容
manager.onRecognize((res) => {
if (res.result || res.resList) {
console.log("识别结果", res.result);
console.log("处理后的识别结果", this.cleanString(res.result));
} else if (res.errMsg) {
console.log("recognize error", res.errMsg);
}
})
},
/**
* 停止识别
*/
stop: function () {
console.log("语音识别停止");
manager.stop();
},
/**
* 继续识别
*/
continue () {
manager.start({
duration: 30000,
engine_model_type: '16k_zh',
// 以下为非必填参数,可跟据业务自行修改
// hotword_id = '08003a00000000000000000000000000',
// filter_dirty = 0,
// filter_modal = 0,
// filter_punc = 0,
// convert_num_mode = 0,
// needvad = 1
});
},
代码部分分三块,顶部引入,onLoad挂载,具体使用方法
H5(vue3)篇
首先去官方sdk文档中webSDk的js文档中访问项目的gitHub仓库,然后把项目下载到本地。
这里采用的asr文件下的版本 参考demo 引入examples/config.js、examples/asrauthentication.js和examples/speechrecognizer.js,需设置用户的SecretID,SecretKey 和 AppId。 在examples/文件下如果找不到speechrecognizer.js文件则去dist/文件下找。然后类似于小程序的接入方式,在配置文件中写入appId,secretkey,secretid即可
// 腾讯语音识别 ---------------
import '../../utils/vioce/asrauthentication'
import '../../utils/vioce/config'
import '../../utils/vioce/speechrecognizer'
//asrauthentication.js文件引入后方法调用存在不生效的情况,可以直接将该文件内部的方法写到引入的文件内如下图
//该部分代码为初始化挂载,放在onBeforeUnmount生命周期也可以放在created生命周期(vue2)
// 初始化腾讯语音识别
const params = {
signCallback: signCallback, // 鉴权函数
// 用户参数
secretid: config.secretId,
appid: config.appId,
// 实时识别接口参数
engine_model_type: '16k_zh', // 因为内置WebRecorder采样16k的数据,所以参数 engineModelType 需要选择16k的引擎,为 '16k_zh'
// 以下为非必填参数,可跟据业务自行修改
voice_format: 1,
hotword_id: '08003a00000000000000000000000000',
needvad: 1,
filter_dirty: 1,
filter_modal: 2,
filter_punc: 0,
convert_num_mode: 1,
word_info: 2
}
// @ts-ignore
webAudioSpeechRecognizer.value = new WebAudioSpeechRecognizer(params)
具体调用方法
opens() {
const params = {
signCallback: signCallback, // 鉴权函数
// 用户参数
secretid: config.secretId,
appid: config.appId,
// 实时识别接口参数
engine_model_type: '16k_zh', // 因为内置WebRecorder采样16k的数据,所以参数 engineModelType 需要选择16k的引擎,为 '16k_zh'
// 以下为非必填参数,可跟据业务自行修改
voice_format: 1,
hotword_id: '08003a00000000000000000000000000',
needvad: 1,
filter_dirty: 1,
filter_modal: 2,
filter_punc: 0,
convert_num_mode: 1,
word_info: 2
}
this.webAudioSpeechRecognizer = new WebAudioSpeechRecognizer(params);
// 开始识别
this.webAudioSpeechRecognizer.OnRecognitionStart = (res) => {
console.log('开始识别', res);
};
// 一句话开始
this.webAudioSpeechRecognizer.OnSentenceBegin = (res) => {
console.log('一句话开始', res);
};
// 识别变化时
this.webAudioSpeechRecognizer.OnRecognitionResultChange = (res) => {
console.log('识别变化时', res.result.voice_text_str);
};
// 一句话结束
this.webAudioSpeechRecognizer.OnSentenceEnd = (res) => {
console.log('一句话结束', res.result.voice_text_str);
};
// 识别结束
this.webAudioSpeechRecognizer.OnRecognitionComplete = (res) => {
console.log('识别结束', res);
};
// 识别错误
this.webAudioSpeechRecognizer.OnError = (res) => {
console.log('识别失败-------------', res)
};
this.webAudioSpeechRecognizer.start();
},
close() {
this.webAudioSpeechRecognizer.stop();
}