2017-02-08 20 views
5

Lần đầu tiên tôi đang thử dịch vụ AWS. Tôi phải tích hợp AWS một cách lịch sự với dấu sao cho văn bản thành lời nói.AWS ví dụ mẫu polly trong python?

đây là mã ví dụ tôi bằng văn bản để chuyển đổi văn bản thành giọng nói

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() 

Tôi nhận được lỗi sau.

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 

Tôi muốn cung cấp thông tin đăng nhập trực tiếp trong tập lệnh này để tôi có thể sử dụng trong ứng dụng hệ thống dấu hoa thị.

UPDATE: tạo ra một tập tin ~/.aws/thông tin với bên dưới nội dung

[default] 
aws_access_key_id=XXXXXXXX 
aws_secret_access_key=YYYYYYYYYYY 

bây giờ cho người dùng đăng nhập hiện tại của tôi làm việc tốt của nó, nhưng đối với dấu hoa thị PBX nó không được làm việc.

Trả lời

2

Mã của bạn chạy hoàn toàn tốt cho tôi!

Dòng cuối cùng đang nói:

botocore.exceptions.NoCredentialsError: Unable to locate credentials 

Vì vậy, nó là không thể xác thực đối với AWS.

Nếu bạn đang chạy mã này trên một cá thể EC2 của Amazon, phương pháp đơn giản nhất là gán vai trò IAM cho cá thể khi nó được khởi chạy (nó không thể được thêm vào sau). Điều này sẽ tự động gán các thông tin có thể được sử dụng bởi ứng dụng đang chạy trên cá thể - không cần thay đổi mã.

Hoặc, bạn có thể lấy Khóa truy cập và Khóa bí mật từ IAM cho Người dùng IAM của bạn và lưu trữ các thông tin xác thực đó trong một tệp cục bộ qua lệnh aws configure.

Thực tiễn không tốt là đặt thông tin đăng nhập vào mã nguồn, vì chúng có thể bị xâm phạm.

Xem:

+0

tôi đã tạo tệp ~/.aws/credentials và cung cấp thông tin xác thực trong phần mặc định. hiện đang hoạt động cho người dùng của tôi. Nhưng đối với một dấu hoa thị, nó cho lỗi. – rajesh6115

+0

Bạn có ý gì khi nói "Nhưng đối với dấu hoa thị, nó cho lỗi"? PBX có chạy dưới một tài khoản người dùng khác không. Trong trường hợp đó, hãy tạo tệp thông tin xác thực trong thư mục chính của người dùng đó. Trường hợp xấu nhất bạn có thể đặt thông tin đăng nhập trong mã (sử dụng 'aws_access_key_id = ACCESS_KEY, aws_secret_access_key = SECRET_KEY' khi tạo 'client()'), nhưng đó là một phương pháp rất không an toàn. –

+0

Cảm ơn tôi tập tin cấu hình người dùng bằng Python và giữ thông tin đăng nhập trong tệp cấu hình. Cũng được tích hợp thành công với tổng đài Asterisk. – rajesh6115

0

Xin lưu ý, PBX Asterisk thường chạy theo người sử dụng dấu hoa thị.

Vì vậy, bạn đã đặt xác thực cho người dùng đó, không phải root.