Python使用SpeechRecognition库实现语音识别功能

 更新时间:2026年01月22日 10:09:34   作者:秃了也弱了。  
SpeechRecognition 是 Python 生态中最主流的语音识别第三方库,它封装了多个国内外主流语音识别引擎的接口,本文将带大家了解Python的SpeechRecognition库的功能、使用方法,并通过具体案例掌握它在不同场景下的应用,需要的朋友可以参考下

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语音识别的资料请关注脚本之家其它相关文章!

相关文章

  • 利用OpenCV+Tensorflow实现的手势识别

    利用OpenCV+Tensorflow实现的手势识别

    这几天没事,想着再学点一些视觉识别方向的东西,因为之前做了验证码识别,有了机器学习的信心,因此这次打算做个手势识别,下面这篇文章主要给大家介绍了关于利用OpenCV+Tensorflow实现的手势识别的相关资料,需要的朋友可以参考下
    2022-11-11
  • python求质数的3种方法

    python求质数的3种方法

    这篇文章主要为大家详细介绍了python求质数的多种方法,多种方法求质数的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • python实现IOU计算案例

    python实现IOU计算案例

    这篇文章主要介绍了python实现IOU计算案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • 七个Python必备的GUI库

    七个Python必备的GUI库

    这篇文章主要介绍了七个Python必备的GUI库,帮助大家更好的理解和学习使用python制作gui程序,感兴趣的朋友可以了解下
    2021-04-04
  • Python列表list解析操作示例【整数操作、字符操作、矩阵操作】

    Python列表list解析操作示例【整数操作、字符操作、矩阵操作】

    这篇文章主要介绍了Python列表list解析操作,结合实例形式分析了Python列表针对整数、字符及矩阵的解析操作实现技巧,需要的朋友可以参考下
    2017-07-07
  • pandas 获取季度,月度,年度首尾日期的方法

    pandas 获取季度,月度,年度首尾日期的方法

    下面小编就为大家分享一篇pandas 获取季度,月度,年度首尾日期的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python游戏开发的五个案例分享

    python游戏开发的五个案例分享

    本文给大家分享了作者整理的五个python游戏开发的案例,通过具体设计思路,代码等方面详细了解python游戏开发的过程,非常的详细,希望大家能够喜欢
    2020-03-03
  • Python中跨越多个文件使用全局变量的方法

    Python中跨越多个文件使用全局变量的方法

    全局变量是不属于函数范围的变量,可以在整个程序中使用,这表明全局变量也可以在函数体内部或外部使用,这篇文章主要介绍了Python中跨越多个文件使用全局变量,需要的朋友可以参考下
    2023-09-09
  • 在Python下进行UDP网络编程的教程

    在Python下进行UDP网络编程的教程

    这篇文章主要介绍了在Python下进行UDP网络编程的教程,UDP编程是Python网络编程部分的基础知识,示例代码基于Python2.x版本,需要的朋友可以参考下
    2015-04-04
  • Python中subprocess.run()执行命令、检查状态与结果处理深入理解

    Python中subprocess.run()执行命令、检查状态与结果处理深入理解

    这篇文章主要介绍了Python中subprocess.run()执行命令、检查状态与结果处理的相关资料,文中通过代码介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2025-04-04

最新评论