IBM文本到语音Python解码错误

IBM文本到语音Python解码错误,python,Python,我刚刚用Python尝试了IBM的文本到语音转换的基本示例: !pip install ibm_watson from ibm_watson import TextToSpeechV1 from ibm_cloud_sdk_core.authenticators import IAMAuthenticator apikey = 'my API KEY' url = 'my SERVICE URL' authenticator = IAMAuthenticator(apikey) tts

我刚刚用Python尝试了IBM的文本到语音转换的基本示例:

!pip install ibm_watson

from ibm_watson import TextToSpeechV1

from ibm_cloud_sdk_core.authenticators import IAMAuthenticator

apikey = 'my API KEY'
url = 'my SERVICE URL'

authenticator = IAMAuthenticator(apikey)
tts = TextToSpeechV1(authenticator=authenticator)
tts.set_service_url(url)

with open('./speech.mp3', 'wb') as audio_file:
    res = tts.synthesize('Hello World!', accept='audio/mp3', voice='en-US_AllisonV3Voice').get_result()
    audio_file.write(res.content)
但我收到一条错误消息: DecodeError:调用decode()时,需要为“algorithms”参数传入一个值*

decode错误回溯(最近一次调用)
在里面
1打开('./speech.mp3',wb')作为音频文件:
---->2 res=tts.synthesis('Hello World!',accept='audio/mp3',voice='en-US\u AllisonV3Voice')。获取结果()
3音频文件写入(res.content)
c:\users\chris\appdata\local\programs\python39\lib\site packages\ibm\u watson\text\u to\u speech\u v1.py in synthesis(self、text、accept、voice、customization\u id、**kwargs)
275
276 url='/v1/synthetic'
-->277请求=自我准备请求(方法='POST',
278URL=url,
279页眉=页眉,
c:\users\chris\appdata\local\programs\python39\lib\site packages\ibm\u cloud\u sdk\u core\base\u service.py in prepare\u请求(self、方法、url、标题、参数、数据、文件、**kwargs)
295请求['data']=数据
296
-->297自我身份验证程序身份验证(请求)
298
299#接下来,我们需要处理“files”参数以尝试填充
c:\users\chris\appdata\local\programs\python39\lib\site packages\ibm\u cloud\u sdk\u core\authenticators\iam\u authenticator.py in authenticate(self,req)
104         """
105 headers=req.get('headers'))
-->106 bearer\u token=self.token\u manager.get\u token()
107头['Authorization']='Bearer{0}'。格式(Bearer\u令牌)
108
获取令牌(self)中的c:\users\chris\appdata\local\programs\python39\lib\site packages\ibm\u cloud\u sdk\u core\jwt\u token\u manager.py
77         """
78如果self.\u已过期():
--->79自配速请求令牌()
80
81如果self.\u令牌\u需要\u刷新():
c:\users\chris\appdata\local\programs\python39\lib\site packages\ibm\u cloud\u sdk\u core\jwt\u token\u manager.py in paced\u request\u token(self)
122如果请求未激活:
123令牌\响应=self.request\令牌()
-->124自我保存令牌信息(令牌响应)
125自请求时间=0
126返回
c:\users\chris\appdata\local\programs\python39\lib\site packages\ibm\u cloud\u sdk\u core\jwt\u token\u manager.py in\u save\u token\u info(self,token\u response)
189
190#通过解码JWT访问令牌找到过期时间
-->191解码\u响应=jwt.decode(访问\u令牌,验证=False)
192#exp是过期时间,iat是令牌检索时间
193 exp=decoded_response.get('exp')
解码中的c:\users\chris\appdata\local\programs\python39\lib\site packages\jwt\api\u jwt.py(self、jwt、key、algorithms、options、**kwargs)
111**夸尔格,
112)->Dict[str,Any]:
-->113解码=自我解码完成(jwt、键、算法、选项,**kwargs)
114返回解码[“有效载荷”]
115
c:\users\chris\appdata\local\programs\python39\lib\site packages\jwt\api\u jwt.py in decode\u complete(self、jwt、key、algorithms、options、**kwargs)
77
78如果选项[“验证签名”]而不是算法:
--->79上升译码错误(
80'调用decode()时,需要为“algorithms”参数传入一个值。'
81             )
DecodeError:调用decode()时,需要为“algorithms”参数传入一个值。

问题可能与最新版本的PyJWT软件包(2.0.0)有关。 使用


降级到以前的版本,您的项目现在就可以工作了。(这对我很有效)

我在使用ibm华生公司的
语音到文本
时遇到了同样的错误,然后我通过安装
PyJWT
版本
1.7.1
来解决我的问题

pip install PyJWT==1.7.1

python -m pip install PyJWT

祝你好运是的,pyjwt>2.0肯定有问题,就像前面提到的那样,你需要卸载以前的版本,并安装一个更稳定的版本,如1.7.1。
对于那些想要使用PyJWT最新版本(在编写本v2.1.0时)的人来说,它对我很有用。


如果您不想继续使用较旧的版本(即
PyJWT==1.7.1
),并且出于某种原因想要升级它,则需要使用
verify_signature
参数并将其设置为False(如果您不提供,则默认为True)。在较旧的版本中(在回溯有点模糊之前),但我猜根本原因是不正确的身份验证(错误的密钥或其他)。
pip install PyJWT==1.7.1
python -m pip install PyJWT