自定义修改唤醒词的离线语音唤醒实现方案一(sonwboy)

本文介绍了在Ubuntu22.04环境下使用Snowboy实现离线语音唤醒的功能,包括安装依赖、自定义唤醒词生成(仅限Ubuntu16.04)、以及唤醒灵敏度调整。然而,文中提到自定义唤醒词过程繁琐,识别准确度和误识率问题存在。
摘要由CSDN通过智能技术生成

可自定义修改唤醒词的离线语音唤醒实现方案(ubuntu 22.04)sonwboy

目标实现功能:

  • 指定唤醒词可随时唤醒目标

  • 唤醒词可自定义修改

实验方案一:使用 Snowboy Hotword Detection

1. 安装依赖(python3):
$ $ sudo apt-get update
$ sudo apt-get install python3-pyaudio swig libatlas-base-dev
$ cd examples/Python3
$ pip install -r requirements.txt
2. 拉取代码编译
  • 使用git拉取

    $ git clone https://github.com/Kitt-AI/snowboy.git
    
  • 编译

    $ cd snowboy/swig/Python3
    $ make
    
3. 测试
  • 代码修改

    $ cd snowboy/examples/Python3
    $ vim snowboydecoder.py
    
    #!/usr/bin/env python
    
    import collections
    import pyaudio
    #from . import snowboydetect         修改为 import snowboydetect
    import snowboydetect
    import time
    import wave
    import os
    import logging
    from ctypes import *
    from contextlib import contextmanager
    
  • 功能测试

    $ cd ~
    $ cd snowboy/examples/Python3
    $ python3 demo.py resources/models/snowboy.umdl
    # snowboy.umdl 是官方提供的语音唤醒音频模型
    
  • 测试结果

    $ python3 demo.py resources/models/snowboy.umdl
    Listening... Press Ctrl+C to exit
    INFO:snowboy:Keyword 1 detected at time: 2024-03-07 09:56:36	# 每当监测到唤醒词回复
    INFO:snowboy:Keyword 1 detected at time: 2024-03-07 09:56:39
    
4. 自定义唤醒词

snowboy自定义唤醒词需要使用3个wav音频文件音频文件生成语音模型,例如snowboy.umdl就是生成的模型

wav音频采样:

4.1 本地生成pmdl模型

由于sonwboy停止更新已久,只支持python2进行本地唤醒模型生成

$ python --version
Python 2.7.18
$ cd snowboy/examples/Python
$ rec -r 16000 -c 1 -b 16 -e signed-integer -t wav record1.wav  # 录制 3 段语音
$ rec -r 16000 -c 1 -b 16 -e signed-integer -t wav record2.wav
$ rec -r 16000 -c 1 -b 16 -e signed-integer -t wav record3.wav
$ python generate_pmdl.py -r1=record1.wav -r2=record2.wav -r3=record3.wav -lang=zh -n=hotword.pmdl
$ python generate_pmdl.py -r1=record1.wav -r2=record2.wav -r3=record3.wav -lang=zh -n=hotword.pmdl
Traceback (most recent call last):
  File "generate_pmdl.py", line 7, in <module>
    from pmdl.snowboy_pmdl import SnowboyPersonalEnroll, SnowboyTemplateCut
  File "/home/asu/test/sonwboy/snowboy/examples/Python/pmdl/snowboy_pmdl.py", line 12, in <module>
    raise ImportError("pmdl generator only runs on OSX or Ubuntu 16.04.")
ImportError: pmdl generator only runs on OSX or Ubuntu 16.04.

pmdl 只能能使用 ubuntu 16.04 或者 OSX (MacOS)进行生成;(我也尝试了很多方法不行,修改系统未验证)

4.2 网页生成pmdl模型

官方训练网站(已经打不开了):

https://snowboy.kitt.ai/dashboard

某位大佬做的训练网站:

https://snowboy.hahack.com/
# 根据提示录制3段语音进行生成pmdl模型

https://snowboy.hahack.com/
https://snowboy.hahack.com/

4.3 唤醒灵敏度调节
$ cd snowboy/examples/Python3
$ vim demo.py
# detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5)
# sensitivity用来调节灵敏度,根据个人需要调节
$ python3 demo.py bing.pmdl
总结:更换自定义唤醒词繁琐,且识别准确度低,灵敏度调高后误识率高。
  • 27
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
目前安卓系统并没有内置离线语音唤醒的功能,但是可以使用第三方SDK来实现。 其中一个比较常用的SDK是讯飞的离线语音唤醒SDK,其基于声纹技术,可以在不联网的情况下完成语音唤醒的功能,同时还支持多关键、多场景、多模式等功能。使用该SDK需要进行以下步骤: 1. 在讯飞开放平台注册账号,并创建一个新的应用程序。 2. 下载并导入离线语音唤醒SDK的相关资源包和jar包。 3. 在应用程序中初始化SDK,并设置相关参数。 ``` // 初始化唤醒对象 mIvw = VoiceWakeuper.createWakeuper(context, null); // 设置唤醒参数 mIvw.setParameter(SpeechConstant.PARAMS, null); mIvw.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL); mIvw.setParameter(SpeechConstant.WP_WORDS_FILE, "assets:///WakeUp.bin"); mIvw.setParameter(SpeechConstant.IVW_THRESHOLD, "0:20"); mIvw.setParameter(SpeechConstant.IVW_SST, "wakeup"); mIvw.setParameter(SpeechConstant.ASR_PTT, "0"); ``` 4. 启动唤醒服务,开始监听唤醒事件。 ``` // 启动唤醒服务 mIvw.startListening(mWakeuperListener); ``` 5. 实现唤醒事件监听器,处理唤醒事件。 ``` // 唤醒事件监听器 private WakeuperListener mWakeuperListener = new WakeuperListener() { @Override public void onResult(WakeuperResult result) { // 处理唤醒事件 } @Override public void onError(SpeechError error) { // 处理唤醒错误 } @Override public void onBeginOfSpeech() { // 唤醒开始 } @Override public void onEvent(int eventType, int isLast, int arg2, Bundle obj) { // 处理唤醒事件 } @Override public void onVolumeChanged(int volume) { // 处理音量变化事件 } }; ``` 需要注意的是,使用离线语音唤醒SDK需要注意资源文件和jar包的版本兼容性,同时也需要遵循讯飞的开发者规范和隐私政策。另外,离线语音唤醒的准确率和性能也会受到多种因素的影响,如声音质量、环境噪音、场景复杂度等,因此在使用过程中需要进行充分的测试和优化。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值