image.png

    除去自身逻辑模块,语音助手主要分为四个功能模块:
    钉钉模块、爬虫模块、语音模块、唤醒模块。

    各功能模块代码实现逻辑:

    钉钉模块:

    首先,钉钉的官方sdk分为旧版和新版,两者都有其不同的功能实现,dingtalk.api这个sdk作为源码覆盖至你的项目下,作为项目内部module来引用它。alibabacloud_dingtalk能够通过pip install 将sdk安装至python开发环境的全局module中来引用。两者在使用上的区别是,前者需要在发起请求是填入不同功能的url来实现不同的需求,但是总体代码结构很简单。
    image.png
    后者将所有功能接口的url封装在一个个方法类中,提供给使用者直接调用方法来实现不同的需求,但是总体代码结构较为复杂。
    image.png

    钉钉模块的实现逻辑如下图:

    image.png
    为每个功能实现定义方法,main函数作为机器人语音指令进入钉钉接管后的二级菜单,通过输入的语音指令匹配关键字来实现具体方法的运行,从而实现获取公告、发布公告等功能,除了退出钉钉接管,其他方法在运行完之后会进入整个循环体的下一次循环,退出钉钉接管后,会返回语音助手的一级菜单。

    爬虫模块:

    爬虫模块代码逻辑采用异步多线程方式,主要原理就是根据官网链接的分页参数对每一页的url存入page_list,而后通过多线程异步对page_list中的url发起批量化请求,获取响应数据后通过etree.HTML过滤掉html页面的其他参数,比如

    这类字段,最终得到的是文章的正文内容。关于python异步编程的原理,自行百度,这个需要阅读大量篇幅去理解。
    image.png
    语音模块:
    image.png
    语音模块主要包括 音频播放,文本转语音,语音转文本,音频录制等。音频播放,百度接口调用这类逻辑性不强没什么好说的,音频录制主要就是把command.wav作为语音助手程序的全局指令交换文件,任何一次的指令录入都会刷新这个文件的内容,这个是为了避免方法调用的时候总是需要指定一个新的文件名称,为开发提供方便,而且节约资源。语音唤醒,通过语音助手主行数while循环中每5秒录制一段音频并做转文本处理,最后判断文本中是否存在关键字,如存在则语音助手将被唤醒,实际上唤醒只是语音助手播放一段告诉你它的程序存活的语音而已,针对这种方法来实现语音唤醒,其实会消耗一定的请求资源,百度AI语音识别接口提供15万次的免费请求次数,通过计算假设你运行了语音助手一整天时间,你将会使用掉17280次请求次数,这个用量是相当大的,所以如果没有需要演示语音助手的话,需要传递退出指令给语音助手将进程结束掉。关于语音唤醒,市面上现在有另一种更为科学经济的方案,通过一个声音传感器,识别声道中是否有音波存在,如果存在再去执行语音录入以及语音识别的请求。

    使用playsound播放音频文件时,由于playsound的默认编码的utf-16,这将导致音频播放结束后程序抛出异常,需要找到playsound源码将encode(’utf-16’)注释掉。
    image.png

    为了节省资源,项目中常用语音通过单词文本转语音的方式,保留mp3文件,调用时,只需playsound对应的mp3文件即可,无需再对文本内容进行转语音操作。

    麦克风采样频率报错问题解决:
    在使用pyaudio进行音频采集的时候出现
    IOError: [Errno Invalid sample rate] -9997的错误
    vim ~/.asoundrc 这个文件 粘贴一下内容。

    1. pcm.!default {
    2. type asym
    3. playback.pcm {
    4. type plug
    5. slave.pcm "hw:0,0"
    6. }
    7. capture.pcm {
    8. type plug
    9. slave.pcm "hw:1,0"
    10. }
    11. }
    12. ctl.!default {
    13. type hw
    14. card 1
    15. }

    [

    ](https://blog.csdn.net/u013860985/article/details/79326379)

    操作手册

    启动语音助手 执行命令 python rabot.py

    一级菜单(语音指令包含关键字)

    资料 爬虫程序
    钉钉/接管 钉钉程序
    没有 待机状态
    “语音助手名称” 唤醒
    再见 结束程序

    二级菜单

    钉钉

    查公告 输出公告
    发公告 发布公告
    会议 发起会议
    安排/日程 输出日程
    退出钉钉 退出钉钉程序

    所需硬件 麦克风 鼠标 键盘 hdmi线 音响 网线