python之使用snowboy离线语音唤醒
2021/8/7 12:08:13
本文主要是介绍python之使用snowboy离线语音唤醒,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
python之使用snowboy离线语音唤醒
介绍
snowboy 是一个开源的、轻量级语音唤醒引擎,比较好用。
训练语音模型网址:
训练语音
环境
开发环境为: ubuntu 21.04
sudo apt-get install alsa-base sudo apt-get install alsa-utils sudo apt-get install libasound2-dev sudo apt-get install pulseaudio sudo apt-get install swig sudo apt-get install libatlas-base-dev sudo apt-get install pyaudio
pyaudio 播放音乐
sudo aplay test.wav
获取snowboy
使用
git clone https://github.com/Kitt-AI/snowboy.git
或
git clone https://gitee.com/william_william/snowboy.git
测试使用
打开snowboydecoder.py
文件,将代码 from * import snowboydetect
改为 import snowboydetect
即可。
进入目录 snowboy/examples/Python3 并运行以下命令:
python3 demo.py resources/models/snowboy.umdl
创建一个demo
首先创建一个demo文件夹,
然后把resources
文件夹、demo.py
、 snowboydecoder.py
、snowboydetect.py
_snowboydetect.so
复制到该文件夹,还有把训练的模型也复制其中。
在该文件夹下运行以下命令:
python3 demo.py xxx.umdl
Integration
#!/bin/python3 # 直接 唤醒 并且执行某个函数 import snowboydecoder import sys import signal import os import subprocess as sub # 执行 bash 类 # pip3 install subprocess class Run(): # 初始化 参数;args 为数组 ['python3','xx.py'] def __init__(self,args, shell=True,encoding="utf-8"): self.args = args self.shell = shell self.encoding =encoding # 处理 args 为一个字符串 def Handle(self): arg = '' for item in self.args: arg += item +' ' return arg # 执行 命令行 def run(self): res = self.Handle() res = sub.run( res, shell=self.shell, encoding=self.encoding ) # 方便以后对其进行操作 return res # 第二种: 不使用demo,直接对demo进行再封装;只需要填写model的文件名即可 class Rundev(): def __init__(self,model,sensitivity=0.5,sleep_time=0.03): # 外置参数 self.model = model self.sensitivity = sensitivity self.sleep_time = sleep_time #内置参数 self.interrupted = False def interrupt_callback(self): return self.interrupted def signal_handler(self,signal, frame): self.interrupted = True def run(self): print('正在监听中.........','按 Ctrl+C 停止运行') # capture SIGINT signal, e.g., Ctrl+C signal.signal(signal.SIGINT, self.signal_handler) detector = snowboydecoder.HotwordDetector( self.model, sensitivity =self.sensitivity) # main loop detector.start(detected_callback=snowboydecoder.play_audio_file, interrupt_check=self.interrupt_callback, sleep_time=self.sleep_time) # 使终止 detector.terminate() # 测试 if __name__ == "__main__": # os.getcwd()获取当前工作路径 args = [ 'python3', os.getcwd()+"/python/snowBoyDemo/demo.py", os.getcwd()+"/python/snowBoyDemo/xiaoai.pmdl" ] # dev = Run(args=args) # dev.run() dev = Rundev(os.getcwd()+"/python/snowBoyDemo/xiaoai.pmdl") dev.run()
使用第二个类的可以把demo.py删除了。
成功后:
如果想添加一些唤醒后的操作,打开snowboydecoder.py,第208行:
可以修改这里 这里是被唤醒之后运行的方法 #small state machine to handle recording of phrase after keyword if state == "PASSIVE": if status > 0: #key word found self.recordedData = [] self.recordedData.append(data) silentCount = 0 recordingCount = 0 message = "Keyword " + str(status) + " detected at time: " message += time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) logger.info(message) print("执行一个测试") callback = detected_callback[status-1] if callback is not None: callback() if audio_recorder_callback is not None: state = "ACTIVE" continue
训练语音模型
https://snowboy.hahack.com/
这篇关于python之使用snowboy离线语音唤醒的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器