一、休眠和语音唤醒
这里我以pocketsphinx实现语音唤醒为例子:

1.环境配置
pip install pocketsphinx
pip install pyaudio

如果这样安装失败的,就需要我们到网上下载好指定whl文件,再进行离线安装。

https://www.lfd.uci.edu/~gohlke/pythonlibs/

到上面的那个网站找到 pocketsphinx 和 pyaudio 的whl文件,这里要注意选择对应 你的操作系统

和 python 的版本,下载后放到项目文件夹下,在pycharm的终端中输入:

pip install 包的全名

进行本地离线安装。

比如:我在window上python3.7 进行离线安装pocketsphinx,这里要注意文件的路径,否则会报错找不到指定文件

pip install pocketsphinx-0.1.15-cp37-cp37m-win_amd64.whl

2.如何定制训练自己的唤醒词
建立一个名为keyword的文件,里面输入你想要的唤醒词,以及读音相近的词(相似读音的词越多灵敏度越高),比如:我想训练的终端名为 COCO,则我的keyword内容为:

gogo
coco
yoyo
bobo
lolo
momo
nono
hoho

打开网站:Sphinx Knowledge Base Tool VERSION 3

选择 keyword.txt 进行上传,得到对应的压缩包,下载后放到项目文件夹下,并解压得:

下载下来以后,压缩包里面文件:

这里的数字都是网站随机生成的,不一样是正常的。

测试代码:

import os
from pocketsphinx import LiveSpeech, get_model_path

def wakeup_co():
model_path = get_model_path()
speech = LiveSpeech(
verbose=False,
sampling_rate=16000,
buffer_size=2048,
no_search=False,
full_utt=False,
hmm=os.path.join(model_path, ‘en-us’),
lm=os.path.join(‘.\Sphinx_keyword\keyword_COCO\‘, ‘5995.lm’),
dic=os.path.join(‘.\Sphinx_keyword\keyword_COCO\‘, ‘5995.dic’)
)
for phrase in speech:
#print(“phrase:”, phrase)
#print(phrase.segments(detailed=True))
if str(phrase) in [“GOGO”, “COCO”, “YOYO”,
“BOBO”, “LOLO”, “MOMO”,
“NONO”, “HOHO”]:
print(‘我是COCO’)

这里 ‘.\Sphinx_keyword\keyword_COCO\’ 是我存放文件的地址,5995 也需要根据你的文件来更改,需要根据你的地址来更改。

测试结果:

Allocating 32 buffers of 2500 samples each
我是COCO

进程已结束,退出代码为 0

若想使用中文词作为唤醒词,则需要下载好相关的中文文件:

Download CMU Sphinx from SourceForge.net

下载后放到项目文件夹中解压,得:cmusphinx-zh-cn-5.2 文件夹

和训练英文唤醒词一样,需要建立 keyword.txt 文件,我训练了一个名为“佩佩”的唤醒词:

贝贝
佩佩
蕾蕾
内内
嘿嘿
忒忒
得得
贼贼
尅尅

打开网站:Sphinx Knowledge Base Tool VERSION 3

上传keyword.txt后得到一个压缩包,下载后放到项目路径下并解压。

这里需要更改 dic 为后缀的文件内容,需要在中文后面按格式添加上拼音和声调,所有间隔均为一个空格,修改后,例如:

佩佩 p ei4 p ei3
内内 n ei4 n ei3
嘿嘿 h ei4 h ei3
尅尅 k ei4 k ei3
得得 d ei4 d ei3
忒忒 t ei4 t ei3
蕾蕾 l ei4 l ei3
贝贝 b ei4 b ei3
贼贼 z ei4 z ei3

测试代码:

import os
from pocketsphinx import LiveSpeech, get_model_path

model_path = ‘.\Sphinx_keyword\cmusphinx-zh-cn-5.2\‘

speech = LiveSpeech(
verbose=False,
sampling_rate=16000,
buffer_size=2048,
no_search=False,
full_utt=False,
hmm=os.path.join(model_path ,’zh_cn.cd_cont_5000’),
lm=os.path.join(‘.\Sphinx_keyword\keyword_PeiPei\‘, ‘0738.lm’),
dic=os.path.join(‘.\Sphinx_keyword\keyword_PeiPei\‘, ‘0738.dic’)
)
for phrase in speech:
print(“phrase:”, phrase)
print(phrase.segments(detailed=True))
if str(phrase) in [“贝贝”, “佩佩”, “蕾蕾”,
“内内”, “嘿嘿”, “忒忒”,
“得得”, “贼贼”, “尅尅”,]:
print(“我是佩佩”)
这里 model_path 的路径需要 指向解压后中文文件夹 cmusphinx-zh-cn-5.2 里面的 zh_cn.cd_cont_5000 文件夹。

‘.\Sphinx_keyword\keyword_PeiPei\’ 和 0738 需要根据你的路径和文件名来修改指向你下载解压好的文件。

测试结果:
‘’’
Allocating 32 buffers of 2500 samples each
phrase: 尅尅
[(‘<s>’, 0, 4359242, 4359325), (‘‘, -1331, 4359326, 4359479), (‘‘, -1331, 4359480, 4359801), (‘‘, -1331, 4359802, 4359940), (‘尅尅’, 0, 4359941, 4360080)]
我是佩佩
phrase: 得得
[(‘<s>’, 0, 8516377, 8516528), (‘‘, -5375, 8516529, 8516683), (‘‘, -2035, 8516684, 8516764), (‘得得’, 0, 8516765, 8516968), (‘‘, 0, 8516969, 8516980)]
我是佩佩
phrase: 嘿嘿
[(‘<s>’, 0, 10674834, 10675304), (‘嘿嘿’, -3628, 10675305, 10675382), (‘‘, 0, 10675383, 10675385)]
我是佩佩
‘’’
中英两种唤醒词使用一个就可以了,英文版的比较灵敏,中文版的可能比较迟钝,所以这里我还是推荐训练使用英文版的,快捷且灵敏。

开源仓库
本次使用的第三方库来自开源项目:python-office,其下含有日常办公、学习、生活常用的数十个不同功能的仓库。例如:

poword:一个处理word的自动化办公仓库。
pohan:一个神奇的汉语编程库。
poocr:一个通用型的文字识别库,可以识别发票、车牌、身份证等。
pofinance:一个用来摸鱼炒股的工具包。
poppt:一个免费操作ppt的库,例如:可以把ppt转化为一张图片。
全部功能的介绍,详见官网:http://www.python-office.com