想要让树莓派成为智能语音助手,除了会“说”,也要会“听”。接下来,就要让它实现ASR(语音识别)功能了。
本来想用sherpa-onnx来实现离线语音识别的,可惜,我的树莓派系统太老了,折腾了半天发现很多东西不兼容,于是只能放弃了这个方案。最后选择了SpeechRecognition+PocketSphinx来实现。
1安装SpeechRecognition
pip install SpeechRecognition
安装成功后在终端输入:
python
>>import speech_recognition as sr
>>sr.__version__
回车后显示了版本号则表示安装成功。
2 安装PocketSphinx
recognize_sphinx()语音识别器可以脱机工作,但是必须安装pocketsphinx库.
pip install pocketsphinx
3 下载中文模型
pocketsphinx需要安装中文语言、声学模型。
下载地址:
https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/Mandarin/
把cmusphinx-zh-cn-5.2.tar.gz下载解压后,要将文件夹更名为zh-CN,里面的zh_cn.cd_cont_5000文件夹重命名为acoustic-model;zh_cn.lm.bin命名为language-model.lm.bin;zh_cn.dic要改为pronounciation-dictionary.dict(注意,dic改成了dict)。完成这些改名后,把这个文件夹移动到python目录下的\site-packages/speech_recognition/pocketsphinx-data/。
mv zh-CN /usr/local/lib/python3.9/site-packages/speech_recognition/pocketsphinx-data/
4 功能测试
touch asr.py
sudo nano asr.py
创建一个asr的py文件,内容如下:
import speech_recognition as sr
def asr(rate=16000):
r = sr.Recognizer()
with sr.Microphone(sample_rate=rate) as source:
print("说些什么…… ")
audio = r.listen(source)
try:
c=r.recognize_sphinx(audio, language='zh-CN')
#c=r.recognize_sphinx(audio, language='en-US')
print("识别结果: " + c)
except sr.UnknownValueError:
print("无法识别音频")
except sr.RequestError as e:
print("Sphinx error; {0}".format(e))
asr()
注意,如果要让录音定时,audio=的代码就要改成:
audio=r.record(source,duration=5) #设置5秒录音
存档后,执行python3 asr.py,结果如下:
我说的是“今天是个好天气”,识别的结果变成了“好贴心”……
最后,谈谈实测的感受。中文识别率好像不是特别高,而且识别的时间也有点长(也可能是我的系统太老了),先凑合用吧……