语音转文字怎么做 python写
在 Python 中实现语音转文字(STT, Speech-to-Text)主要有两种方式:调用第三方 API(简单、准确,但可能有费用或限制)和本地部署模型(免费、隐私安全,但需要配置资源)。以下是具体实现方法:
一、使用第三方 API(以 OpenAI Whisper API 为例)
优点:准确率高、支持多语言、自动处理音频分段
缺点:需要联网、按调用量付费、有音频时长限制
缺点:需要联网、按调用量付费、有音频时长限制
步骤:
- 安装依赖:
bash
pip install openai
- 调用 API:
python
运行
import openai
# 设置 API 密钥
openai.api_key = "你的 OpenAI API 密钥"
def speech_to_text(audio_file_path):
try:
# 打开音频文件
with open(audio_file_path, "rb") as audio_file:
# 调用 Whisper API
transcript = openai.Audio.transcribe("whisper-1", audio_file)
return transcript["text"]
except Exception as e:
print(f"语音转文字出错: {e}")
return None
# 使用示例
audio_path = "example.wav" # 替换为你的音频文件路径
text = speech_to_text(audio_path)
if text:
print("识别结果:", text)
二、本地部署模型(以 OpenAI Whisper 为例)
优点:免费、离线使用、隐私安全
缺点:需要较强 GPU(或等待较长时间)、模型较大
缺点:需要较强 GPU(或等待较长时间)、模型较大
步骤:
- 安装依赖:
bash
pip install git+https://github.com/openai/whisper.git # 安装 Whisper
pip install torch torchaudio # 安装 PyTorch (根据你的 CUDA 版本选择)
- 运行代码:
python
运行
import whisper
def speech_to_text_local(audio_file_path, model_size="base"):
try:
# 加载模型 (可选: tiny, base, small, medium, large)
model = whisper.load_model(model_size)
# 转录音频
result = model.transcribe(audio_file_path)
return result["text"]
except Exception as e:
print(f"语音转文字出错: {e}")
return None
# 使用示例
audio_path = "example.wav" # 替换为你的音频文件路径
text = speech_to_text_local(audio_path, model_size="base") # base 模型小且快
if text:
print("识别结果:", text)
模型选择建议:
tiny/base:适合快速识别,对 GPU 要求低medium/large:准确率更高,但需要更多资源
三、实时语音识别(麦克风输入)
如果需要实时从麦克风获取语音并转文字,可以结合
pyaudio 和 whisper:python
运行
import whisper
import torch
import numpy as np
import pyaudio
from io import BytesIO
# 初始化 PyAudio
p = pyaudio.PyAudio()
# 配置录音参数
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 1024
RECORD_SECONDS = 10 # 录音时长
# 加载模型
device = "cuda" if torch.cuda.is_available() else "cpu"
model = whisper.load_model("base").to(device)
# 打开音频流
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
print("* 开始录音")
# 录制音频
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("* 录音结束")
# 关闭流
stream.stop_stream()
stream.close()
p.terminate()
# 转换为 numpy 数组
audio_data = np.frombuffer(b''.join(frames), dtype=np.int16).astype(np.float32) / 32768.0
# 调整音频格式
audio_data = whisper.pad_or_trim(audio_data)
mel = whisper.log_mel_spectrogram(audio_data).to(model.device)
# 解码语音
options = whisper.DecodingOptions(language="zh", fp16=False)
result = whisper.decode(model, mel, options)
print("识别结果:", result.text)
四、其他第三方库推荐
- Google Speech-to-Text API:准确率高,支持多语言
- Microsoft Azure Speech Services:提供实时转录和自定义模型
- DeepSpeech:Mozilla 开源的本地语音识别模型
- SpeechRecognition:Python 库,支持多种 API(Google、Wit.ai 等)
注意事项:
- 音频格式:通常需要 WAV/MP3 格式,采样率 16kHz 效果较好
- 语言支持:大多数模型默认支持多语言,但可通过参数指定(如
language="zh") - 性能优化:本地模型可通过量化(如 INT8)和 GPU 加速提升速度

浙公网安备 33010602011771号