每日一语
2019-第三次更新
调包师
的今日调包项目
过程
项目是做一个教学辅助平台,帮助教师和学生减轻负担(其实也没啥负担)。成品比较像一个手机助手,类似于小爱同学,Siri, 微软小娜和Amazon的alexa。
直接看流程图吧。
讲解一下流程图和我的思路。假设我们的最终成品是一个APP。
首先肯定是软件的唤醒了。从市面上已有的产品来看,手机端的手机助手有些需要通过指定物理操作来启动的,比如我手机上的小爱同学,就是通过长按Home键来唤醒的,其他的如Siri则是通过唤醒词来唤醒的。智能音箱的唤醒也是通过唤醒词来实现的。
唤醒后进行音频的录制。
然后根据接口的限制对音频进行转换,如采样率之类需要进行更改。我接下来使用的讯飞的语音识别就对接受的音频就有一些要求。
之后是上传处理过的音频,提交给语音识别的服务商去识别,然后接收返回的识别出的文本内容。
再接下来是文本的分词,将连续的文本分解为单个的词组。
然后是匹配操作(为什么我想到的是匹配呢?因为语义识别我不会啊。),根据匹配到的操作去进行下一步的任务,比如数据库的擦查找啥的,如果匹配不到的话就提示错误。
照着这个思路,我做了一个Demo, 功能是通过语音命令打开一个word文件,然后通过语音合成读出word的内容。
接下来讲一下具体的实现了。
首先是录音,因为只是一个Demo,所以懒得写格式转换的代码,直接找了一个符合讯飞语音识别要求的录音软件。
然后是语音识别了,我用的是讯飞的服务。如何用呢? 自然是注册 -> 新建应用 -> 添加服务->获取APPID&APIKey这种循规蹈矩的操作了。
这些弄完后你会得到一个这样的界面:
线框圈出来的就是APPID和APIKey,这两个在代码里面调用的时候需要,就相当于你的账号了。
IP白名单也是需要注意的,如果不将你的运行代码的电脑的IP加入白名单,就无法访问。
这个服务每天调用的次数限制是500次,但是我发现有一个小漏洞可以钻,就是如果你创建多个应用,再在每个应用里面都添加一个语音识别的服务,调用次数在不同的应用间是不关联的。所以我们可以在代码里面做个字典,检测到某个应用里面的调用次数用完了之后再换一个应用,操作起来还是很简单的。
上面两个图片展示了不同应用间API调用次数无关
代码我用的是示例代码,稍微改了点。
然后是通过识别出来的文本来分词,确定说话者说的到底是啥意思。
我这里简化了操作。只判断了是不是要打开某个文件,就判断了下面这些关键字。
然后是检查要打开的文件是否存在,判断的也比较简单。先找出所有文件,再匹配。
找到了之后,接下来是打开word。
再接下来是从word中提取文字。
然后是上传文本,做语音合成,用的还是讯飞的代码,改了点。
最后就是接收返回的语音,接着播放了。
播放有个问题没解决,就是播的特别快,可能是默认的播放速率比讯飞返回的要快。
总结
代码很多都参考了网上的,我只是一个小小的搬运工和整合商。感谢开源让世界更美好。
项目上传到了GitHub, 阅读原文可直达。
排版|Carl
文案|Carl
乐观生活
领取专属 10元无门槛券
私享最新 技术干货