语音识别
一、休眠和语音唤醒
这里我以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), (‘
我是佩佩
phrase: 得得
[(‘<s>’, 0, 8516377, 8516528), (‘
我是佩佩
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