一个不动手只动嘴的长文本输入方案,大家觉得怎么样? 支持的回帖: +1, 不看好的回帖: -1
一、背景:
很多情况下,写文章有字数要求,比如本次比赛,就要求文章内容字数不少于 600 字。要想字数多,就得用嘴说,而不是靠手打字。但是,目前输入法的语音输入,不能实现不用手的全语音操控,比如:删除刚才说错的一句话,换行。语音输入时,经常会出现说错的情况,需要删除。另外,全语音操控模式更有利于思维的输出和不被打搅。
二、技术方案简介
采用百度的短语音识别极速版,这里为什么不用短语音识别版,而用短语音识别极速版呢,因为在我所设定的场景中,实时性要求比较强,所以使用极速版。
语音文件的采集时,在用户说话停顿大于1秒时,就将语音文件上传百度云进行解析。
除了相声演员说顺口溜能,没有人能一口气说话超过1分钟的,所以,采用短语音识别,也能满足不应用的要求。
遇到用户说“删除上一句”等命令时,自动执行命令。
因为很多用户口音严重,不能精确匹配成““删除上一句”,所以,将含有“删除”这种关键字的语音文件,存起来,用人工标注方式,进行模型训练优化。
可以做成小程序。
三、具体实现的步骤
a) 在百度云开通“短语音识别极速版”;
b) 在服务器安装语音识别 PHP SDK
c) 修改php代码:
这些值在创建应用后获取
// 你的 APPID AK SK
const APP_ID = '你的 App ID';
const API_KEY = '你的 Api Key';
const SECRET_KEY = '你的 Secret Key';
d) 小程序端将用户说话停顿1秒前的语音文件发送到服务器的php接口;
e) 服务器php文件将结果文本返回小程序;
f) 小程序将文本显示给用户,如果是命令,就执行命令,如“删除上一行”,具体代码如下:
if (wordAdd.indexOf('全部清空') > -1 || wordAdd.indexOf('全部删除') > -1) {
self.clearAll();
self.longdelayStart()
return
}
else if (wordAdd.indexOf('换行') > -1) {
self.replaceFuhao(wordAdd, '换行', '\n')
return
}
else if (wordAdd.indexOf('回车') > -1) {
self.replaceFuhao(wordAdd, '回车', '\n')
return
}
else if (wordAdd.indexOf('句号') > -1) {
self.replaceFuhao(wordAdd, '句号', '。')
return
}
else if (wordAdd.indexOf('双引号') > -1) {
self.replaceFuhao(wordAdd, '双引号', '"')
return
}
else if (wordAdd.indexOf('感叹号') > -1) {
self.replaceFuhao(wordAdd, '感叹号', '!')
return
}
else if (wordAdd.indexOf('问号') > -1) {
self.replaceFuhao(wordAdd, '问号', '?')
return
}
else if (wordAdd.indexOf('逗号') > -1) {
self.replaceFuhao(wordAdd, '逗号', ',')
return
}
else if (wordAdd.indexOf('省略号') > -1) {
self.replaceFuhao(wordAdd, '省略号', '... ...')
return
}
else if (wordAdd.indexOf('删掉一个字') > -1) {
self.deleteWord(wordAdd, "删掉一个字", 1)
return
}
else if (wordAdd.indexOf('删掉两个字') > -1) {
self.deleteWord(wordAdd, "删掉两个字", 2)
return
}
else if (wordAdd.indexOf('删掉三个字') > -1) {
self.deleteWord(wordAdd, "删掉三个字", 3)
return
}
else if (wordAdd.indexOf('删掉四个字') > -1) {
self.deleteWord(wordAdd, "删掉四个字", 4)
return
}
else if (wordAdd.indexOf('删掉五个字') > -1) {
self.deleteWord(wordAdd, "删掉五个字", 5)
return
}
else if (wordAdd.indexOf("删掉上一句,") > -1 || wordAdd.indexOf("删除上一句,") > -1 || wordAdd.indexOf("撤销,") > -1) {
console.log("触发 删掉上一句,:" + wordAdd);
self.fileUploadData = self.lastText + wordAdd;
var arrtmp = wordAdd.split(",");
var newjuzi = "";
for (var i = 0; i < (arrtmp.length - 3); i++) {
newjuzi += arrtmp[i] + ",";
}
if (arrtmp.length <= 2) { //删除lastText里面的
arrtmp = self.lastText.split(",");
newjuzi = "";
for (var i = 0; i < (arrtmp.length - 2); i++) {
newjuzi += arrtmp[i] + ",";
}
self.lastText = newjuzi;
self.aiResult = "";
}
else {
self.aiResult = newjuzi;
}
self.stopRecord();
self.delayStart();
}
else {
self.aiResult = wordAdd;
self.fileUploadData = self.lastText + self.aiResult;
}
四、实现的效果:识别效果的截图
g)将含有“删除”这种关键字的语音文件,存起来,用人工标注方式,进行模型训练优化。
点击这里的“立即训练”
五、总结:使用了哪些工具,调用哪些接口
调用了接口“短语音识别极速版”,使用了“语音识别模型”进行模型优化。