【问题标题】:AWS polly sample example in python?python中的AWS polly示例?
【发布时间】:2017-02-08 05:15:22
【问题描述】:

我第一次尝试 AWS 服务。我必须将 AWS polly 与星号集成以实现文本到语音。

这是我为将文本转换为语音而编写的示例代码

from boto3 import  client
import boto3
import StringIO
from contextlib import closing

polly = client("polly", 'us-east-1' )
response = polly.synthesize_speech(
    Text="Good Morning. My Name is Rajesh. I am Testing Polly AWS Service For Voice Application.",
    OutputFormat="mp3",
    VoiceId="Raveena")

print(response)

if "AudioStream" in response:
    with closing(response["AudioStream"]) as stream:
        data = stream.read()
        fo = open("pollytest.mp3", "w+")
        fo.write( data )
        fo.close()

我收到以下错误。

Traceback (most recent call last):
  File "pollytest.py", line 11, in <module>
    VoiceId="Raveena")
  File "/usr/local/lib/python2.7/dist-packages/botocore/client.py", line 253, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/botocore/client.py", line 530, in _make_api_call
    operation_model, request_dict)
  File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 141, in make_request
    return self._send_request(request_dict, operation_model)
  File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 166, in _send_request
    request = self.create_request(request_dict, operation_model)
  File "/usr/local/lib/python2.7/dist-packages/botocore/endpoint.py", line 150, in create_request
    operation_name=operation_model.name)
  File "/usr/local/lib/python2.7/dist-packages/botocore/hooks.py", line 227, in emit
    return self._emit(event_name, kwargs)
  File "/usr/local/lib/python2.7/dist-packages/botocore/hooks.py", line 210, in _emit
    response = handler(**kwargs)
  File "/usr/local/lib/python2.7/dist-packages/botocore/signers.py", line 90, in handler
    return self.sign(operation_name, request)
  File "/usr/local/lib/python2.7/dist-packages/botocore/signers.py", line 147, in sign
    auth.add_auth(request)
  File "/usr/local/lib/python2.7/dist-packages/botocore/auth.py", line 316, in add_auth
    raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials

我想直接在这个脚本中提供凭据,以便我可以在星号系统应用程序中使用它。

更新: 创建了一个具有以下内容的文件 ~/.aws/credentials

[default]
aws_access_key_id=XXXXXXXX
aws_secret_access_key=YYYYYYYYYYY

现在对于我当前的登录用户,它工作正常,但对于星号 PBX,它不工作。

【问题讨论】:

    标签: amazon-web-services asterisk amazon-polly


    【解决方案1】:

    你的代码对我来说运行得很好!

    最后一行是说:

    botocore.exceptions.NoCredentialsError: Unable to locate credentials
    

    因此,它无法针对 AWS 进行身份验证。

    如果您在 Amazon EC2 实例上运行此代码,最简单的方法是在实例启动时为其分配一个 IAM 角色(以后无法添加)。这将自动分配可供在实例上运行的应用程序使用的凭据——无需更改代码。

    或者,您可以从 IAM 为您的 IAM 用户获取访问密钥和秘密密钥,并通过 aws configure 命令将这些凭证存储在本地文件中。

    将凭据放在源代码中是不好的做法,因为它们可能会被泄露。

    见:

    【讨论】:

    • 我已经创建了 ~/.aws/credentials 文件并在默认部分提供了凭据。现在它为我的用户工作。但是对于星号 PBX,它给出了错误。
    • “但是对于星号 PBX,它会出错”是什么意思? PBX 是否在不同的用户帐户下运行。在这种情况下,也在该用户的主目录中创建一个凭证文件。在最坏的情况下,您可以将凭据放入代码中(在创建 client() 时使用 aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY),但这是一种非常不安全的方法。
    • 感谢我在 Python 中使用用户配置文件并将凭据保存在配置文件中。也成功与星号 PBX 集成。
    【解决方案2】:

    请注意,asterisk pbx 通常在 asterisk 用户下运行。

    所以你已经为那个用户而不是 root 设置了身份验证。

    【讨论】:

      猜你喜欢
      • 2018-12-13
      • 1970-01-01
      • 2017-07-17
      • 2018-07-17
      • 2021-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多