开发一款智能语音助手

前段时间在开发一款语音助手,不过是在Windows系统上运行,.NET构建。给它取名为XiaoYue(小月),灵感来源于小米小爱,因为小爱的训练计划挺有意思。我也给小月弄了个相似自定义问答的功能,就是菜了点,没那么多功夫,目前只可以自定义文字,还不能自定义图片音频啥的,后期感兴趣就弄弄。

小月可以语音交互,我给她的定位是交流问答型。也可以帮你操作任务,如定时啥的。不过目前还没具体实现,只是写了个框架,关于语义分析是否是用户想要执行任务的命令,需要折腾,打算以后可以用相关的接口。智能交流问答用的是WolframAlpha,这个非常好,就是需要英文搜索的,导致其他语音去搜索是不建议的,非常不理想,具体同学们可以去试试WolframAlpha。所以后台我将用户输入的文字转为英文去调用,再把获取的结果翻译成中文。所以这些步骤大大增加了相关线程的执行时间,这些以后需要进行优化吧。

定时打开某个应用、锁屏关机、闹钟提醒,小月都可以做到,不过这些都不厉害,还搞了个图像识别、文字识别,也就玩玩,都是用的百度的相关API。当按下空格键,监听用户语音输入,调用的win32 api,MCI媒体控制。设置了超时时间,按着不放肯定不行😄。还有音频转码,转成PCM,用了ffmpeg。语音合成就是用了Speech.Synthesis命名空间中的类。

按理说语音输入就行了,我还弄了个输入框,可以文字输入,后面想想有点多此一举,不过没关系,可以输入一些数学问题,语音识别转化文字一些符号啥的不好搞,可以在输入框里输,WolframAlpha很厉害的,它也许会返回答案哦。

界面是用WPF写的,启动窗口还是个动画,有点早了,都忘了这个xaml动画我是怎么写的了,当初只是想意思意思。当输入命令时,小月会首先查询用户自定义问答里的数据,这个是每个人都不同的,如果没有,再查询Redis数据库,Redis里可以保存一些常用的问题,且都是共享的,最后才去调用wolframAlpha,后期也可以继续扩展匹配的数据接口/模型。还有要说的有空再更新文章。

github:https://github.com/BlueSkyCaps/XiaoYueAssistant