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}")
相关推荐
QH_ShareHub1 分钟前
从 R 到 Python:数据科学生态的“双语”对照手册
开发语言·python·r语言
m0_740796363 分钟前
MongoDB节点一直处于RECOVERING状态怎么排查_Oplog陈旧与全量同步失败
jvm·数据库·python
驼同学.4 分钟前
牛客网面试TOP101 - Python算法学习指南
python·算法·面试
2301_815901975 分钟前
Go语言怎么做秒杀系统_Go语言秒杀系统实战教程【实用】
jvm·数据库·python
2303_821287386 分钟前
C#怎么实现WebAPI版本控制_C#如何管理不同接口版本【核心】
jvm·数据库·python
woxihuan1234566 分钟前
如何使用MongoDB按前缀模糊查询_正则表达式^与索引利用
jvm·数据库·python
2401_824697666 分钟前
Golang怎么用Go实现数据导入导出平台_Golang如何支持CSV和Excel格式的批量数据导入导出【实战】
jvm·数据库·python
得一录11 分钟前
TradingAgents金融股票分析的最小实现
开发语言·数据库·人工智能·python
阿正呀14 分钟前
C#怎么清空Dictionary字典_C#如何管理内存集合【基础】
jvm·数据库·python
yuanpan15 分钟前
Python 与 Conda 编程实战指南:从环境配置到项目运行完整入门
开发语言·python·conda