speechrecognition库(待验证)
1、简介
speechrecognition 是 python 生态中最主流的语音识别第三方库,它封装了多个国内外主流语音识别引擎的接口,让你无需关注各引擎的底层实现(比如 api 签名、数据格式转换),只需调用简单的 python api 就能快速实现 “语音转文字” 功能。
你希望详细了解python的speechrecognition库的功能、使用方法,并通过具体案例掌握它在不同场景下的应用,我会从库的基础介绍、核心概念,到不同使用场景的实战案例逐步讲解,让你既能理解原理,也能直接上手使用。
支持的识别引擎(按实用度排序):
| 引擎 | 网络要求 | 准确率 | 费用 | 中文适配 | 核心特点 |
|---|---|---|---|---|---|
| google web speech api | 需网络 | 高 | 免费(非商用) | 较好 | 新手首选,无需申请密钥 |
| 百度语音识别api | 需网络 | 很高 | 免费额度充足 | 最优 | 专为中文优化,需申请密钥 |
| cmu sphinx | 离线 | 较低 | 免费 | 一般 | 无网络场景专用 |
| microsoft bing voice | 需网络 | 高 | 需申请密钥 | 较好 | 微软生态适配 |
recognizer 类:核心类,所有语音识别操作都通过它完成(如噪声校准、音频识别)。
audiodata 类:封装音频数据(采样率、声道、原始数据),是识别的输入载体。
关键方法:
listen():从麦克风采集音频(返回 audiodata)。
record():从音频文件读取音频(返回 audiodata)。
recognize_google():调用 google api 识别音频。
recognize_sphinx():调用 cmu sphinx 离线识别。
2、安装
# 1、核心库安装 pip install speechrecognition # 2、该库处理麦克风实时语音需要依赖`pyaudio`: pip install pyaudio # 若安装失败(windows 常见):先下载对应 python 版本的pyaudio whl 文件(unofficial windows binaries),再本地安装 pip install pyaudio-0.2.13-cp310-cp310-win_amd64.whl # 3、mac 用户:先装底层依赖再装 pyaudio brew install portaudio pip install pyaudio # 4、若需离线识别,额外安装 pip install pocketsphinx
3、使用
场景1:实时麦克风语音识别(最常用,如语音助手)
通过麦克风实时采集你的语音,转成文字输出。
需先校准环境噪声(否则会把背景音误识别)。
import speech_recognition as sr
def microphone_recognition():
# 1. 创建recognizer实例
r = sr.recognizer()
# 2. 获取麦克风设备(默认麦克风)
with sr.microphone() as source:
print("正在校准环境噪声,请保持安静...")
# 校准噪声:监听1秒,获取背景噪声水平(关键步骤,否则识别准确率低)
r.adjust_for_ambient_noise(source, duration=1)
print("校准完成,请开始说话(说完后会自动识别)...")
# 3. 监听麦克风音频(timeout=5表示5秒内无语音则超时)
audio = r.listen(source, timeout=5, phrase_time_limit=10) # phrase_time_limit限制单次语音最长10秒
# 4. 调用google api识别语音
try:
print("正在识别...")
# language="zh-cn"指定中文识别,默认是英文
# 若识别英文可改为`language="en-us"`。
text = r.recognize_google(audio, language="zh-cn")
print(f"你说的内容:{text}")
except sr.waittimeouterror:
print("错误:超过5秒未检测到语音输入")
except sr.unknownvalueerror:
print("错误:无法识别你说的内容(语音模糊/无有效语音)")
except sr.requesterror as e:
print(f"错误:调用google api失败 → {e}")
if __name__ == "__main__":
microphone_recognition()
场景2:识别本地音频文件(如处理录音文件)
将本地音频文件(如wav、flac格式)转成文字。
该库原生支持wav、aiff、flac格式,若为mp3需先转换(可使用pydub库)。
import speech_recognition as sr
def audio_file_recognition(file_path):
# 1. 创建recognizer实例
r = sr.recognizer()
# 2. 读取音频文件
with sr.audiofile(file_path) as source:
# 读取完整音频(也可指定时长:r.record(source, duration=5) 读取前5秒)
audio = r.record(source)
# 3. 识别音频
try:
text = r.recognize_google(audio, language="zh-cn")
print(f"音频内容:{text}")
except sr.unknownvalueerror:
print("错误:无法识别音频内容")
except sr.requesterror as e:
print(f"错误:api调用失败 → {e}")
if __name__ == "__main__":
# 替换为你的音频文件路径(建议用wav格式)
audio_file_recognition("test_audio.wav")
扩展(处理mp3):
先安装pydub和音频解码依赖:
pip install pydub # windows需下载ffmpeg并配置环境变量,mac:brew install ffmpeg
转换并识别mp3的代码:
import speech_recognition as sr
from pydub import audiosegment
# 转换mp3为wav
audio = audiosegment.from_mp3("test_audio.mp3")
audio.export("test_audio_wav.wav", format="wav")
# 调用上面的识别函数
audio_file_recognition("test_audio_wav.wav")
场景3:离线语音识别(cmu sphinx)
无网络时识别语音(适合嵌入式设备、无网络场景)。
准确率远低于在线api,中文适配差,建议仅用于应急场景。
import speech_recognition as sr
def offline_recognition():
r = sr.recognizer()
with sr.microphone() as source:
r.adjust_for_ambient_noise(source, duration=1)
print("离线模式,请说话...")
audio = r.listen(source)
try:
# 离线识别(中文需额外配置语言包,默认英文)
text = r.recognize_sphinx(audio, language="zh-cn")
print(f"离线识别结果:{text}")
except sr.unknownvalueerror:
print("错误:离线识别失败(语音无法解析)")
except sr.requesterror as e:
print(f"错误:sphinx引擎初始化失败 → {e}")
if __name__ == "__main__":
offline_recognition()
场景4:百度语音识别(中文最优)
使用百度语音api识别(中文准确率远超google,有免费额度)。
前置步骤:
1.登录百度智能云,创建“语音识别”应用,获取app_id、api_key、secret_key。
2.安装百度sdk:
pip install baidu-aip
import speech_recognition as sr
from aip import aipspeech
# 替换为你的百度应用信息
app_id = "你的app_id"
api_key = "你的api_key"
secret_key = "你的secret_key"
def baidu_recognition(audio_data):
# 初始化百度语音客户端
client = aipspeech(app_id, api_key, secret_key)
# 将audiodata转为百度要求的格式(pcm/16k/16位/单声道)
pcm_data = audio_data.get_raw_data(convert_rate=16000, convert_width=2)
# 调用百度api识别
result = client.asr(pcm_data, "pcm", 16000, {
"dev_pid": 1536, # 1536=普通话(支持简单的英文),1537=英语
})
if result["err_no"] == 0:
return "".join(result["result"])
else:
raise exception(f"百度api错误:{result['err_msg']}")
# 主流程:麦克风采集+百度识别
if __name__ == "__main__":
r = sr.recognizer()
with sr.microphone(sample_rate=16000) as source: # 百度要求16k采样率
r.adjust_for_ambient_noise(source, duration=1)
print("请说话(百度语音识别)...")
audio = r.listen(source)
try:
text = baidu_recognition(audio)
print(f"百度识别结果:{text}")
except exception as e:
print(f"识别失败:{e}")
以上就是python使用speechrecognition库实现语音识别功能的详细内容,更多关于python speechrecognition语音识别的资料请关注代码网其它相关文章!
发表评论