如何结合Python SpeechRecognition与OpenAI Whisper实现麦克风语音无文件转写?
无需保存本地文件实现SpeechRecognition+Whisper语音转写
原代码问题分析
你之前的代码报错主要有两个原因:
- 用
open("audio.wav", "r+")打开文件时,r+模式要求文件已存在,不存在就会报错;而且SpeechRecognition的AudioData对象不是原始字节数据,不能直接写入文件。 - OpenAI的Whisper接口需要的是符合WAV格式的有效文件对象或字节流,你传递的文件对象没有正确写入音频数据,自然触发错误。
正确实现方案
SpeechRecognition的AudioData对象自带get_wav_data()方法,可直接导出标准WAV格式的字节数据。我们用io.BytesIO把这些字节包装成内存中的文件对象,完全不需要保存到本地硬盘,就能直接传给Whisper接口。
复用原有录音逻辑的完整代码
import speech_recognition as sr import openai import io def whisper_listen(): r = sr.Recognizer() with sr.Microphone() as source: print("Speak Anything :") audio = r.listen(source) # 将AudioData转为WAV字节流,包装成内存文件对象 wav_data = audio.get_wav_data() audio_file = io.BytesIO(wav_data) audio_file.name = "audio.wav" # 给文件对象指定名字,Whisper需要识别文件格式 try: transcript = openai.Audio.transcribe("whisper-1", audio_file) print("You said : {}".format(transcript["text"])) return transcript["text"] except Exception as e: print(f"转写失败: {str(e)}") return "write me some code to print hello world"
注意事项
- 提前通过
openai.api_key = "你的API密钥"配置好OpenAI密钥 get_wav_data()默认导出PCM 16-bit、16kHz的WAV数据,完全符合Whisper的输入要求- 必须给内存文件对象指定
name属性,否则Whisper无法识别文件格式
内容的提问来源于stack exchange,提问作者Lukas Baker
相关产品推荐
相关产品推荐

