语音转文字怎么做 python写

在 Python 中实现语音转文字(STT, Speech-to-Text)主要有两种方式:调用第三方 API(简单、准确,但可能有费用或限制)和本地部署模型(免费、隐私安全,但需要配置资源)。以下是具体实现方法:

一、使用第三方 API(以 OpenAI Whisper API 为例)

优点:准确率高、支持多语言、自动处理音频分段
缺点:需要联网、按调用量付费、有音频时长限制

步骤:

  1. 安装依赖:

bash
 
 
pip install openai
 

  1. 调用 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(或等待较长时间)、模型较大

步骤:

  1. 安装依赖:

bash
 
 
pip install git+https://github.com/openai/whisper.git  # 安装 Whisper
pip install torch torchaudio  # 安装 PyTorch (根据你的 CUDA 版本选择)
 

  1. 运行代码:

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)
 

四、其他第三方库推荐

  1. Google Speech-to-Text API:准确率高,支持多语言
  2. Microsoft Azure Speech Services:提供实时转录和自定义模型
  3. DeepSpeech:Mozilla 开源的本地语音识别模型
  4. SpeechRecognition:Python 库,支持多种 API(Google、Wit.ai 等)

注意事项:

  1. 音频格式:通常需要 WAV/MP3 格式,采样率 16kHz 效果较好
  2. 语言支持:大多数模型默认支持多语言,但可通过参数指定(如 language="zh"
  3. 性能优化:本地模型可通过量化(如 INT8)和 GPU 加速提升速度
posted @ 2025-06-18 01:13  m516606428  阅读(310)  评论(0)    收藏  举报