如何解决AttributeError: 'Audio'对象无'transcribe'属性的问题?
解决SpeechRecognition中recognize_whisper_api与OpenAI v1.x版本兼容问题
问题描述
开发语音识别机器人时,调用AudioInterface.listen()方法触发以下错误:
AttributeError: 'Audio' object has no attribute 'transcribe'
使用的OpenAI版本为1.14.1,移除elevenlabs相关代码后错误仍存在。
原因分析
speech_recognition库的recognize_whisper_api方法沿用了旧版OpenAI API调用逻辑(client.audio.transcribe),但OpenAI v1.x版本已调整API结构,Audio对象不再包含transcribe方法,替代接口为audio.transcriptions.create。
解决方案
方案一:降级OpenAI到兼容版本
安装适配旧API的OpenAI版本:
pip install openai==0.28.1
方案二:适配OpenAI v1.x API修改代码
放弃使用speech_recognition提供的recognize_whisper_api,直接基于OpenAI新API实现语音识别逻辑,修改interface.py中的listen方法:
import speech_recognition as sr import os from elevenlabs import generate, play, set_api_key from openai import OpenAI set_api_key(os.environ['ELEVEN_API_KEY']) client = OpenAI(api_key=os.environ["OPENAI_API_KEY"]) class AudioInterface: def listen(self)->str: recognizer=sr.Recognizer() with sr.Microphone() as source: print("say something") audio=recognizer.listen(source) # 将音频转为wav格式临时文件 with open("temp_recording.wav", "wb") as f: f.write(audio.get_wav_data()) # 调用OpenAI v1.x转录API with open("temp_recording.wav", "rb") as audio_file: transcript = client.audio.transcriptions.create( model="whisper-1", file=audio_file ) return transcript.text def speak(self, text): audio=generate( text=text, voice='Bella', model='eleven_monolingual_v1' ) play(audio)
方案三:修改speech_recognition库源码
找到报错的whisper.py文件(路径示例:venv/lib/python3.12/site-packages/speech_recognition/recognizers/whisper.py),将第43行的旧API调用:
transcript = client.audio.transcribe(model, wav_data, api_key=api_key)
替换为新API调用:
from io import BytesIO wav_file = BytesIO(wav_data) wav_file.name = "temp.wav" transcript = client.audio.transcriptions.create(model=model, file=wav_file, api_key=api_key)
内容的提问来源于stack exchange,提问作者Sevval Kahraman
相关产品推荐
相关产品推荐

