程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

关于Python 语音识别库speech_recognition 快速使用大全

hfteth 2025-01-29 15:55:02 技术文章 20 ℃

#头条创作挑战赛#

对于语音识别,算是在应用的热门方向,我们也能用语音玩出很多花样,比如语音控制设备,成语接龙游戏.因此特别研究了Python下的语音识别库,基本使用最多的是 speech_recognition

语音识别库speech_recognition的介绍

这个识别库相当于网上好几种识别引擎的的集合,把各种库整合成统一的接口给开发者调用.

因此相当好用.相当于产家给的直接sdk,大大减少学习成本.

它目前支持如下7个识别引擎

  • recognize_bing():Microsoft Bing Speech
  • recognize_google(): Google Web Speech API
  • recognize_google_cloud():Google Cloud Speech 需要安装 google-cloud-speech包
  • recognize_houndify(): Houndify by SoundHound
  • recognize_ibm():IBM Speech to Text
  • recognize_sphinx():CMU Sphinx - 需要安装 PocketSphinx
  • recognize_wit():Wit.ai

其中完全脱机是是 CMU(美国卡内基梅隆大学 )开发Sphinx引擎.其中PacketSphinx 是针对嵌入式设备的版本.我们后面着力测试这个.

其余几个需要联网在云端识别,但是只有Google Web Speech API内置默认 API 密钥api key可以直接使用,但是google的地址需要调整一下才能在国内访问.

所以可以优先选择这两个包来测试

依赖包和本身的安装


#Mac下声音库安装,只在Mac OSX下安装
brew install portaudio

#语音播放及录音功能需要

pip3 install pyAudio


#识别包安装

pip3 install SpeechRecognition?

#PacketSphinx 安装

pip3 install PocketSphinx


下载Sphinx模型文件

PocketSphinx缺省只支持美国英语识别,如里想支持其它语言,需要单独下载对应的模型文件

下载在其项目首页
http://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/

这里的Mandarin 文件就是普通话模型,下载为一个压缩文件


cmusphinx-zh-cn-5.2.tar.gz 解压到模型文件目录



pip3 show SpeechRecognition

这里提示的Location:
/opt/anaconda3/lib/python3.9/site-packages

进入
speech_recognition/pocketsphinx-data 新建一个
zh-CN,把压缩文件里 zh_cn.cd_cont_5000文件夹重命名为acoustic-modelzh_cn.lm.bin命名为language-model.lm.binzh_cn.dicdic改为
pronounciation-dictionary.dict


修正google连接不上

如果使用Google Web Speech 连接大概率连接不上.会报


speech_recognition.RequestError: recognition connection failed: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。

可以换成google.cn的对应的api.方法如下,找到安装包的目录

pip3 show SpeechRecognition

这里提示的Location:
/opt/anaconda3/lib/python3.9/site-packages 就是安装目录

找到这个目录下的
speech_recognition/__init__.py 修改Google的地址

在这个recognize_google()中url由google.com改为 google.cn


简单代码测试

使用麦克风输入,可以简单识别较短单词

# 注:安装时用的是 SpeechRecognition 这一名称,但是注意 import 时要用 speech_recognition 这一名称。
import speech_recognition as sr

r = sr.Recognizer()
mic = sr.Microphone()

def recognize(r, mic, lang="en-US"):
    print("Please wait...", end="") # 在开始录音前等待
    
    with mic as source:
        r.adjust_for_ambient_noise(source)
        backspace = "\r" * 14 # 退格字符
        print(f'{backspace}Say something: ', end="")
        audio = r.listen(source)
    
    # 调用识别函数(这个函数只有安装了 PocketSphinx 才能调用),具体方法看官方文档
   # result = r.recognize_sphinx(audio, language=lang)
    result = r.recognize_google(audio, language=lang)
    # 打印并返回结果
    print(result)
    return result

if __name__ == '__main__':
    recognize(r, mic,"zh-CN")

这里主要识别代码是在recognize(r, mic,"zh-CN") 函数里,第三个参数指明识别语言,

里面计用recognize_google()表示使用 Google Web Speed接口,注意中文要换成 "cmn-Hans-CN"

如果换成recognize_sphinx() 表示使用 sphinx()接口

实测sphinx可以识别中英文.但google仍然是网络原因

Tags:

最近发表
标签列表