ubuntu离线中文语音识别

一.目的

本人需要一个开源免费的语音库,目的是用来给机器人发指令,也就是说只需要只个简单的词。

二.准备

在windows10、ubuntu18.04下需要成功实现了中文识别。
windows下可以采用:大佬的方法
ubuntu下,依然是这位大佬的延伸,其中en-US文件在

~/.local/lib/python3.6/site-packages/speech_recognition/pocketsphinx-data

中,而不是在~/.local/lib/python3.6/site-packages/pocketsphinx/model中,这个一定要注意,本人就改错了。
别外如果上述大佬的文件链接失效了,本人提供如下:
(本人没有百度网盘会员,下载微有痛苦,特以天翼云盘的方式给出)

https://cloud.189.cn/web/share?code=NNr2E3NzaeEb(访问码:8gnk)

三.详细步骤

  1. 首先把包给安了,既然说了要离线的,还有免费的,所以下面的都是开源的,尽管拿去用。

  2. pip install SpeechRecognition(win)
    pip3 install SpeechRecognition(ubuntu)(下面就不说了,ubuntu下我用的是python3.6)

  3. 接着同样把sphinx、PyAudio给安了,然后将提示的包全安了,嫌速度慢可以参考:如下:
    (注意ubuntu下最好用sudo apt-get install pocketsphinx)(pip3会报错,当然也可以解决pip3报错问题:https://blog.csdn.net/weixin_44895651/article/details/104445102)
    win下链接:https://blog.csdn.net/wxkhturfun/article/details/100387273
    linux下:
    ubuntu离线中文语音识别_第1张图片关于pyaudio:https://blog.csdn.net/LCCFlccf/article/details/108313149
    (备注:上述图片截图于https://www.fujieace.com/python/pypi.html)

  4. 然后就是偷梁换柱了
    找到这个路径(没安上面的包当然找不到)

D:\Python\Python37\Lib\site-packages\speech_recognition\pocketsphinx-data

当然,自己的路径自己找,用pip安装的话是在“speech_recognition\pocketsphinx-data”包里了,ubuntu下也一样,在这个路径下你会发现一个名为en-US的文件夹,没错,要是不动这个文件夹,你可以识别英文,比如执行以下代码:

# -*- coding: utf-8 -*-
import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source) 
    print('say something')

    # print("")
    audio = r.listen(source)

try:
    print("Sphinx thinks you said " + r.recognize_sphinx(audio))
    print("ok")
except sr.UnknownValueError:
    print("Sphinx could not understand audio")
except sr.RequestError as e:
    print("Sphinx error; {0}".format(e))

但是我要是想改成中文呢?这里可以用我的中文包拿去(2020年4月初下的),直接用下面的包替换原来的en-US即可(当然做人要留条后路,万一以后要识别英文呢,还是备份原来的吧)
天翼云盘链接:(百度网盘本人没有会员,等有会员再改吧)
https://cloud.189.cn/t/yArAbyIVZb6r
同样运行上面的代码,大概率事件是可以识别中文了。

  1. 精确一点?
    有些词识别的不是很准?总不能自己去训练语音吧,本人上次把PC跑死也没跑动(当然你有服务器另说)。
    下面给出一个“将错就错”的办法,比如:上述python代码,我说“右转”,它老是显示“柔道”;那么找到en-US下的“pronounciation-dictionary.dict”,直接将“柔道”两字改为“右转”。
    呃—本人也觉得粗暴了点,但是赶时间,能用就行。
    然后你还可以缩小范围,毕竟大不了让它识别不出来重复识别自己多说几次就行了,总比识别出一个错误的好。直接删除“pronounciation-dictionary.dict”里面不需要的,比如提取成这样:
    https://cloud.189.cn/t/qE7zii7baqqa
    现在确实大功造成了,ubuntu18.04(其他版本的不知道)下同样适用。
    参考:
    https://blog.csdn.net/qq_40965177/article/details/86766703
    https://blog.csdn.net/itas109/article/details/78999477

你可能感兴趣的:(比赛,python)