【语音】不动手只动嘴的长文本输入方案
msie88 发布于2021-11 浏览:3903 回复:0
0
收藏

一个不动手只动嘴的长文本输入方案,大家觉得怎么样? 支持的回帖: +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)将含有“删除”这种关键字的语音文件,存起来,用人工标注方式,进行模型训练优化。

点击这里的“立即训练”

五、总结:使用了哪些工具,调用哪些接口

调用了接口“短语音识别极速版”,使用了“语音识别模型”进行模型优化。

 

收藏
点赞
0
个赞
TOP
切换版块