想要让树莓派成为智能语音助手,除了会“说”,也要会“听”。接下来,就要让它实现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,结果如下:

我说的是“今天是个好天气”,识别的结果变成了“好贴心”……

最后,谈谈实测的感受。中文识别率好像不是特别高,而且识别的时间也有点长(也可能是我的系统太老了),先凑合用吧……

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐