chenfengyijiu

wukong-robot源码解读

目录解读

./
└── wukong-robot-master
    ├── docker
    │   ├── Dockerfile
    │   └── DockerfileArm
    ├── docs
    │   ├── AI.html
    │   ├── ASR.html
    │   ├── Brain.html
    │   ├── config.html
    │   ├── ConfigMonitor.html
    │   ├── constants.html
    │   ├── Conversation.html
    │   ├── drivers.html
    │   ├── genindex.html
    │   ├── index.html
    │   ├── logging.html
    │   ├── _modules
    │   ├── modules.html
    │   ├── objects.inv
    │   ├── Player.html
    │   ├── plugin_loader.html
    │   ├── plugins.html
    │   ├── py-modindex.html
    │   ├── robot.drivers.html
    │   ├── robot.html
    │   ├── robot.sdk.html
    │   ├── search.html
    │   ├── searchindex.js
    │   ├── snowboy.html
    │   ├── _sources
    │   ├── _static
    │   ├── statistic.html
    │   ├── TTS.html
    │   ├── Updater.html
    │   ├── utils.html
    │   └── wukong.html
    ├── LICENSE
    ├── plugins
    │   ├── Camera.py
    │   ├── CleanCache.py
    │   ├── Echo.py
    │   ├── Email.py
    │   ├── Geek.py
    │   ├── __init__.py
    │   ├── LocalPlayer.py
    │   ├── Poem.py
    │   ├── __pycache__
    │   └── Volume.py
    ├── README.md
    ├── requirements.txt
    ├── robot
    │   ├── AI.py
    │   ├── ASR.py
    │   ├── BCI.py
    │   ├── Brain.py
    │   ├── ConfigMonitor.py
    │   ├── config.py
    │   ├── constants.py
    │   ├── Conversation.py
    │   ├── drivers
    │   ├── __init__.py
    │   ├── logging.py
    │   ├── NLU.py
    │   ├── Player.py
    │   ├── plugin_loader.py
    │   ├── __pycache__
    │   ├── sdk
    │   ├── statistic.py
    │   ├── TTS.py
    │   ├── Updater.py
    │   └── utils.py
    ├── server
    │   ├── __pycache__
    │   ├── server.py
    │   ├── static
    │   └── templates
    ├── snowboy
    │   ├── __init__.py
    │   ├── __pycache__
    │   ├── resources
    │   ├── snowboydecoder.py
    │   ├── snowboydetect.py
    │   └── _snowboydetect.so
    ├── static
    │   ├── beep_hi.wav
    │   ├── beep_lo.wav
    │   ├── camera.wav
    │   ├── default.yml
    │   ├── off.wav
    │   ├── on.wav
    │   ├── qa.csv
    │   ├── wukongbiechao_pi.pmdl
    │   ├── wukongbiechao.pmdl
    │   ├── wukong_pi.pmdl
    │   ├── wukong.pmdl
    │   ├── wukongxingxing_pi.pmdl
    │   ├── wukongxingxing.pmdl
    │   └── zhimakaimen.pmdl
    ├── temp
    │   ├── 6c9b01528e3a408f94cc5e74618ad4e4.mp3
    │   ├── a8d27931414101815a16234486c32759.mp3
    │   ├── baidustt.ini
    │   ├── DIR
    │   ├── f71ad814cf304c86550c4c0873025f0f.mp3
    │   └── wukong.log
    ├── tools
    │   ├── make_json.py
    │   ├── __pycache__
    │   ├── solr_api.py
    │   └── solr_tools.py
    ├── VERSION
    └── wukong.py

docker 文件夹

wukong-robot项目的镜像生成文件

docs 文件夹

wukong-robot项目的文档文件

plugins 文件夹

wukong-robot项目相关插件。如摄像头、缓存清除、邮件、极客模式、播放器、音量等

requirements 文件

记录了wukong-robot项目运行相关依赖包

server 文件夹

wukong-robot项目后台网页服务代码

snowboy 文件夹

wukong-robot项目使用的snowboy热词唤醒功能

static 文件夹

wukong-robot项目使用的资源文件,如声音文件,配置文件等

tools 文件夹

可能会用到的工具。如文件格式转换、引擎切换等

robot 文件夹

wukong-robot项目核心代码存放的文件夹。里面包含主要实现逻辑、封装的第三方开发包、及树莓派驱动。封装的第三方开发包在sdk文件夹。包含阿里、百度、腾讯、讯飞等开发包的封装
树莓派驱动在drivers文件夹。包含spi led等驱动主要实现逻辑有TTS、播放器、ASR、自升级、NLU、日志、配置加载、技能控制等

wukong.py 文件

wukong-robot项目运行的入口文件

一、wukong.py

Wukong类的公开属性有

  • bci。封装后的MUSE接口对象
  • detector。对snowboy进行封装后的唤醒词检测对象

和方法

  • init。初始化。主要进行变量初始化,配置检查,脑机接口初始化
  • _loop_event 死循环变量,检测转换相应
  • _signal_handler 信号处理函数
  • _detected_callback 检测唤醒词回调函数
  • _do_not_bother_on_callback 勿扰模式打开
  • _do_not_bother_off_callback 勿扰模式关闭
  • _interrupt_callback 中断模式
  • _init_aiy_button_event 初始化AIY按钮
  • run。主运行程序
  • initDetector。初始化唤醒词检测对象
  • help。打印帮助
  • md5。计算md5
  • fetch/update。检测/执行更新
  • upload。上传 QA 数据集
  • restart。重启 wukong-robot
  • train。生成snowboy模型
  • profiling。运行过程中打印耗时数据,通过私有变量_profiling来控制
    dev。在测试环境中运行,通过私有变量_dev来控制

二、唤醒词检测-snowboy

  • snowboydetect.py。swig封装的python接口
  • snowboydecoder.py。 对snowboy库进行封装的源码文件

snowboydecoder:

  • logger。日志记录

  • TOP_DIR

  • RESOURCE_FILE

  • DETECT_DING。定义声音文件

  • DETECT_DONG。定义声音文件

  • ERROR_HANDLER_FUNC。定义asound库出错后的回调接口

  • c_error_handler。asound库出错后的回调
    函数:

  • py_error_handler。asound库出错后实际执行的函数

  • no_alsa_error。asound库出错回调管理器

  • play_audio_file。播放声音文件
    类:

  • RingBuffer。环形缓冲区。实现多次部分写入,一次全部读出

  • ActiveListener。激活并开始循环热词监测。

  • HotwordDetector。检测麦克风是否有自定义的热词。

  • ActiveListener

    ActiveListener是对snowboy库的封装,以更方便地使用热词唤醒功能

    ActiveListener生成对象时,会将热词模型文件列表传入snowboy库。热词模型文件可通过调用snowboy.kitt.ai网络接口生成

    ActiveListener对象生成后,就可以通过listen方法进行热词监听了。listen方法主要做了以下几件事情:

    打开录音设备,以持续地将录到的声音存储在前面定义的RingBuffer对象中
    在设定的循环次数recording_timeout和设定的安静次数silent_count_threshold内循环读取RingBuffer对象中的值,然后调用snowboy库的RunDetection接口进行热词唤醒检测。
    检测次数到或检测到热词后退出listen方法
    在退出listen方法之前,保存从ActiveListener对象创建到本次记录完成的声音到以时间命名的wav文件中

  • HotwordDetector
    HotwordDetector是对snowboy库的封装。跟ActiveListener相比可设定的参数更多,如输入声音增益,每一个唤醒词的灵敏度等;可在检测到热词后马上调用回调函数,增加反应的实时性;在检测到唤醒词后经过一定延时才进行下一次热词检测

    HotwordDetector生成对象时,会将热词模型文件列表、每一个唤醒词的灵敏度传入snowboy库。同时设置snowboy库的输入声音增益

    HotwordDetector对象生成后,就可以通过start方法进行热词监听了。start方法主要做了以下几件事情:

    打开录音设备,以持续地将录到的声音存储在前面定义的RingBuffer对象中
    针对每一个唤醒词注册唤醒后的回调函数
    在内部不断的循环中进行热词检测
    检测到热词后调用本热词对应的回调函数
    检测到热词后在设定的循环次数recording_timeout和设定的安静次数silent_count_threshold达到再开始下一次检测
    在开始下一次检测之前,保存本次热词检测记录的声音到以时间命名的wav文件中
    HotwordDetector对象还提供了terminate方法来强制停止start方法的循环过程

三、

二、

分类:

技术点:

相关文章:

  • 2021-10-12
  • 2021-10-19
  • 2020-03-14
  • 2020-03-17
  • 2018-04-15
  • 2019-12-08
  • 2019-08-31
  • 2018-10-05
猜你喜欢
  • 2021-11-04
  • 2021-11-30
  • 2021-11-30
  • 2021-10-19
  • 2021-09-02
  • 2021-09-07
  • 2021-09-20
相关资源
相似解决方案