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}")
相关推荐
yaoxin5211232 小时前
278. Java Stream API - 限制与跳过操作全解析
java·开发语言·python
love530love2 小时前
【探讨】“父级/基环境损坏,子环境全部失效”,如何避免 .venv 受父级 Python 损坏影响?
java·开发语言·人工智能·windows·python·编程·ai编程
BoBoZz193 小时前
FlatVersusGouraud 对比平面着色和高洛德着色
python·vtk·图形渲染·图形处理
智航GIS3 小时前
7.1 自定义函数
前端·javascript·python
import_random3 小时前
[虚拟环境]venv工具(实战)
python
蓝眸少年CY3 小时前
测试Java性能
java·开发语言·python
秃了也弱了。3 小时前
python监听文件变化:Watchdog库
开发语言·python
程序员三藏3 小时前
自动化测试与功能测试详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
山土成旧客3 小时前
【Python学习打卡-Day33】你好,PyTorch!从“自动挡”到“手动挡”的深度学习之旅
python·深度学习·学习