python实现语音识别:SpeechRecognition库

文章目录

一、SpeechRecognition库(待验证)

文档:https://pypi.org/project/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、安装

bash 复制代码
# 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:实时麦克风语音识别(最常用,如语音助手)

通过麦克风实时采集你的语音,转成文字输出。

需先校准环境噪声(否则会把背景音误识别)。

python 复制代码
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库)。

python 复制代码
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和音频解码依赖:

bash 复制代码
pip install pydub
# Windows需下载ffmpeg并配置环境变量,Mac:brew install ffmpeg

转换并识别MP3的代码:

python 复制代码
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,中文适配差,建议仅用于应急场景。

python 复制代码
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:

bash 复制代码
   pip install baidu-aip
python 复制代码
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}")
相关推荐
kszlgy1 小时前
Day 52 神经网络调参指南
python
wrj的博客3 小时前
python环境安装
python·学习·环境配置
Pyeako3 小时前
深度学习--BP神经网络&梯度下降&损失函数
人工智能·python·深度学习·bp神经网络·损失函数·梯度下降·正则化惩罚
摘星编程4 小时前
OpenHarmony环境下React Native:Geolocation地理围栏
python
充值修改昵称4 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
q_35488851536 小时前
AI大模型:python新能源汽车推荐系统 协同过滤推荐算法 Echarts可视化 Django框架 大数据毕业设计(源码+文档)✅
大数据·人工智能·python·机器学习·信息可视化·汽车·推荐算法
Yeats_Liao6 小时前
开源生态资源:昇腾社区ModelZoo与DeepSeek的最佳实践路径
python·深度学习·神经网络·架构·开源
被星1砸昏头7 小时前
掌握Python魔法方法(Magic Methods)
jvm·数据库·python
love530love7 小时前
彻底解决 ComfyUI Mixlab 插件 Whisper.available False 的报错
人工智能·windows·python·whisper·win_comfyui
不解风水8 小时前
《深度学习入门:基于 Python 的理论与实现》(斋藤康毅)
人工智能·python·深度学习