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

文章目录
  • 目录
    • SpeechRecognition库(待验证)
      • 1、简介
      • 2、安装
      • 3、使用
        • 场景1:实时麦克风语音识别(最常用,如语音助手)
        • 场景2:识别本地音频文件(如处理录音文件)
        • 场景3:离线语音识别(CMU Sphinx)
        • 场景4:百度语音识别(中文最优)

    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 离线识别。

    # 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
    

    通过麦克风实时采集你的语音,转成文字输出。
    需先校准环境噪声(否则会把背景音误识别)。

    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()
    

    将本地音频文件(如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")
    

    无网络时识别语音(适合嵌入式设备、无网络场景)。
    准确率远低于在线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()
    

    使用百度语音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语音识别的资料请关注风君子博客其它相关文章!

    您可能感兴趣的文章:

    • 基于python简单实现文字转语音和语音识别
    • 讯飞webapi语音识别接口调用示例代码(python)
    • Python使用whisper实现语音识别(ASR)的示例代码
    • Python实现语音识别Whisper的使用示例
    • Python实现语音识别vosk的示例代码

    站内搜索