SpeechRecognition:一个全面的Python语音转文字库

探索SpeechRecognition,一个支持多种在线和离线语音识别引擎及API的多功能Python库,包含实用示例和故障排除技巧。

简介

语音识别是现代应用程序中的关键组件,从虚拟助手和转录服务到无障碍工具和自动化工作流,无处不在。Python的SpeechRecognition库为多种语音识别引擎和API提供了统一接口,使您能够轻松地将语音转文字功能集成到项目中。无论您需要CMU Sphinx的离线识别,还是Google、Azure或OpenAI Whisper的云端精度,这个库都能满足需求。

支持的引擎和API

SpeechRecognition支持多种后端,让您可以根据用例选择最佳方案:

  • 离线引擎:

    • CMU Sphinx (PocketSphinx): 完全离线运行,适合隐私敏感或低延迟应用。
    • Vosk API: 另一种离线选项,支持多种语言。
    • Whisper (本地): OpenAI的Whisper模型可本地运行,无需互联网即可实现高质量转录。
    • Faster Whisper: Whisper的优化版本,推理速度更快。
    • Snowboy热词检测: 用于唤醒词检测(离线)。
  • 云端API:

    • Google语音识别: 提供免费套餐,易于使用。
    • Google Cloud Speech API: 更准确且可定制,需要身份验证。
    • Microsoft Azure语音: 企业级识别。
    • Wit.ai: Facebook的语音API。
    • Houndify: SoundHound的API。
    • IBM语音转文字: IBM Watson的服务。
    • OpenAI Whisper API: 基于云端的Whisper,精度高。
    • Groq Whisper API: 通过Groq硬件实现快速推理。
    • Cohere Transcribe API: Cohere的转录服务。
  • 自托管端点:

    • 支持OpenAI兼容端点,如vLLM和Ollama,让您灵活运行自己的推理服务器。

快速开始

通过pip即可轻松安装:

pip install SpeechRecognition

快速测试:

python -m speech_recognition

这将使用默认麦克风,并尝试通过Google的免费API识别语音。

基本使用示例

从麦克风识别语音

import speech_recognition as sr

# 初始化识别器
r = sr.Recognizer()

# 使用默认麦克风作为音源
with sr.Microphone() as source:
    print("请说话!")
    audio = r.listen(source)

# 使用Google语音识别
尝试:
    text = r.recognize_google(audio)
    print(f"您说的是:{text}")
捕获 sr.UnknownValueError:
    print("无法理解音频")
捕获 sr.RequestError as e:
    print(f"错误:{e}")

转录音频文件

import speech_recognition as sr

r = sr.Recognizer()

with sr.AudioFile("path/to/audio.wav") as source:
    audio = r.record(source)

text = r.recognize_google(audio)
print(text)

将音频数据保存到文件

with sr.Microphone() as source:
    audio = r.listen(source)

# 保存为WAV文件
with open("recording.wav", "wb") as f:
    f.write(audio.get_wav_data())

校准环境噪音

with sr.Microphone() as source:
    r.adjust_for_ambient_noise(source)
    print("已校准环境噪音。请说话!")
    audio = r.listen(source)

后台监听

def callback(recognizer, audio):
    尝试:
        text = recognizer.recognize_google(audio)
        print(f"您说的是:{text}")
    捕获 sr.UnknownValueError:
        print("无法理解")

r.listen_in_background(sr.Microphone(), callback)

# 保持程序运行
import time
while True:
    time.sleep(1)

安装详情

PyAudio(用于麦克风输入)

使用Microphone类需要PyAudio。安装命令:

pip install SpeechRecognition[audio]

在Linux上,可能需要系统包:

sudo apt-get install portaudio19-dev python3-all-dev

PocketSphinx(离线Sphinx)

pip install SpeechRecognition[pocketsphinx]

Vosk(离线Vosk)

pip install SpeechRecognition[vosk]

然后从此处下载Vosk模型,并放置在model目录中。

Whisper(本地)

pip install SpeechRecognition[whisper-local]

Faster Whisper

pip install SpeechRecognition[faster-whisper]

OpenAI Whisper API

pip install SpeechRecognition[openai]

使用前设置环境变量OPENAI_API_KEY

Groq Whisper API

pip install SpeechRecognition[groq]

设置GROQ_API_KEY

Cohere Transcribe API

pip install SpeechRecognition[cohere-api]

设置CO_API_KEY

常见问题排查

识别器过于敏感或不够敏感

调整energy_threshold属性。值通常在50到4000之间。值越高,灵敏度越低,适用于嘈杂环境。

r.energy_threshold = 3000

识别器首次监听时卡住

在监听前调用adjust_for_ambient_noise以设置合适的阈值。

没有默认输入设备

列出可用麦克风:

import speech_recognition as sr
for index, name in enumerate(sr.Microphone.list_microphone_names()):
    print(f"找到名为\"{name}\"的麦克风,可用于`Microphone(device_index={index})`")

然后使用Microphone(device_index=INDEX)

语言/方言问题

设置语言参数以提高准确性。例如,使用"en-GB"表示英式英语:

text = r.recognize_google(audio, language="en-GB")

结论

SpeechRecognition是一个强大且灵活的库,它抽象了不同语音识别后端的复杂性。无论您需要离线功能以保护隐私,还是需要云端精度用于生产环境,它都提供了一致的API,使开发快速且易于维护。凭借对Whisper和Groq等最新模型的支持,它仍然是构建语音应用程序的Python开发者的首选。

更多示例和详细文档,请访问GitHub仓库

来源

Uberi/speech_recognition:Python语音识别模块,支持多种在线和离线引擎及API。