项目中用到了 olami sdk把录音或者文字转化为用户可以理解的json字符串。
效果图
重要jS代码:
//手指按下时 语音转文字
voiceToChar:function(){
var urls = app.globalData.slikToCharUrl;
var voiceFilePath = that.data.filePath;
if(voiceFilePath == null){
console.log("[Console log]:File path do not exist!");
wx.showModal({
title: '录音文件不存在',
content: '我也不知道哪错了,反正你就再试一次吧!',
showCancel: false,
confirmText: '确定',
confirmColor: '#09BB07',
})
return;
}
var appkey = app.globalData.NLPAppkey;
var appsecret = app.globalData.NLPAppSecret;
var NLPCusid = app.globalData.NLPCusid;
wx.showLoading({
title: '语音识别中...',
})
wx.uploadFile({
url: urls,
filePath: voiceFilePath,
name: 'file',
formData: { "appKey": appkey, "appSecret": appsecret, "userId": NLPCusid },
header: { 'content-type': 'multipart/form-data' },
success: function (res) {
wx.hideLoading();
var data = JSON.parse(res.data);
var seg = JSON.parse(data.result).seg;
console.log("[Console log]:Voice to char:" + seg);
if(seg == null || seg.length == 0){
wx.showModal({
title: '录音识别失败',
content: "我什么都没听到,你再说一遍!",
showCancel: false,
success: function (res) {
}
});
return;
}
that.addChat(seg, 'r');
console.log("[Console log]:Add user voice input to chat list");
that.sendRequest(seg);
return;
},
fail: function (res) {
console.log("[Console log]:Voice upload failed:" + res.errMsg);
wx.hideLoading();
wx.showModal({
title: '录音识别失败',
content: "请你离WIFI近一点再试一次!",
showCancel: false,
success: function (res) {
}
});
}
});
},
olami 技术的识别语音代码:
// 发送语料到语义平台
sendChat: function (e) {
let word = e.detail.value.ask_word ? e.detail.value.ask_word : e.detail.value;
console.log("[Console log]:User input:" + word);
that.addChat(word, 'r');
console.log("[Console log]:Add user input to chat list");
that.setData({
askWord: '',
sendButtDisable: true,
});
that.sendRequest(word);
},
// 发送请求到语义平台
sendRequest(corpus){
app.NLIRequest(corpus, {
'success': function (res) {
if (res.status == "error") {
wx.showToast({
title: '返回数据有误!',
})
return;
}
var resjson = JSON.parse(res);
var data = JSON.stringify(resjson.data);
that.NLIProcess(data);
},
'fail': function (res) {
wx.showToast({
title: '请求失败!',
})
return;
}
});
},
// 处理语义
NLIProcess: function(res){
var nlires = JSON.parse(res);
var nliArray = nlires.nli;
if(nliArray == null || nliArray.length == 0){
wx.showToast({
title: '返回数据有误!',
})
return;
}
var answer = nliArray[0].desc_obj.result;
if(answer == null){
wx.showToast({
title: '返回数据有误!',
})
return;
}
console.log("[Console log]:Add answer to chat list...");
that.addChat(answer, 'l');
var dataArray = nliArray[0].data_obj;
if(dataArray != null && dataArray.length > 0){
var objType = nliArray[0].type;
if(objType == 'selection' && dataArray.length > 1){
that.newsProcess(dataArray);
return;
}
if (objType == 'news' && dataArray.length == 1) {
console.log("[Console log]:Add news to chat list...");
var title = dataArray[0].title;
var detail = dataArray[0].detail;
var news = title + "\n" + detail;
that.addChat(news, 'l');
return;
}
var content = dataArray[0].content;
if (content != null && content != answer){
console.log("[Console log]:Add content to chat list...");
that.addChat(content, 'l');
}
}
return;
},
源码:
百度云:https://pan.baidu.com/s/1jHJj1HG
网友评论