You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Speech Recognition录制的音频帧转为Whisper兼容的NumPy数组?

直接将Speech Recognition录制的音频字节转为NumPy数组传入Whisper

核心步骤说明

Speech Recognition录制的音频会封装为AudioData对象,我们可以直接提取其原始字节数据,转换为Whisper兼容的NumPy数组,无需写入文件:

  • 提取AudioData的原始16位PCM字节(单声道、16kHz)
  • 将字节转换为int16格式的NumPy数组,再归一化到Whisper要求的[-1.0, 1.0]范围的float32数组
  • 直接将该数组传入Whisper的transcribe方法

完整代码示例

import speech_recognition as sr
import numpy as np
import whisper

# 初始化Speech Recognition的识别器和麦克风(指定16kHz采样率)
r = sr.Recognizer()
mic = sr.Microphone(sample_rate=16000)

# 录制音频
with mic as source:
    print("正在录音...")
    audio = r.listen(source)

# 将AudioData的原始字节转为NumPy数组
# raw_data是16位有符号小端字节,先转成int16数组
audio_np = np.frombuffer(audio.get_raw_data(), dtype=np.int16)
# 归一化到[-1.0, 1.0]的float32数组(Whisper的要求格式)
audio_np = audio_np.astype(np.float32) / 32768.0

# 加载Whisper模型(根据需求选tiny/base/small等)
model = whisper.load_model("base")

# 直接传入NumPy数组进行转录
result = model.transcribe(audio_np, language="zh")
print("转录结果:", result["text"])

关键细节

  • 确保录制的音频采样率是16kHz:Whisper默认期望16kHz单声道音频,和我们指定的采样率一致,无需额外重采样
  • 归一化必须做:Whisper要求输入的音频数组是float32类型,且数值范围在[-1,1]之间,而Speech Recognition的原始数据是int16(范围-32768到32767),所以除以32768.0完成转换
  • AudioData.get_raw_data()返回的是未经压缩的原始音频字节,没有文件IO开销,完全符合你的需求

内容的提问来源于stack exchange,提问作者potatohprogrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:25:19