Polly_with_Serverless_HOL_hyouk

Similar documents
KT AI MAKERS KIT 사용설명서 (Node JS 편).indd

PowerPoint 프레젠테이션

제 31회 전국 고교생 문예백일장 산문 부문 심사평.hwp

JMF2_심빈구.PDF

rmi_박준용_final.PDF

ibmdw_rest_v1.0.ppt


SRC PLUS 제어기 MANUAL

28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

T100MD+

歯처리.PDF

( )부록

Week13

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D D382E687770>

오늘날의 기업들은 24시간 365일 멈추지 않고 돌아간다. 그리고 이러한 기업들을 위해서 업무와 관련 된 중요한 문서들은 언제 어디서라도 항상 접근하여 활용이 가능해야 한다. 끊임없이 변화하는 기업들 의 경쟁 속에서 기업내의 중요 문서의 효율적인 관리와 활용 방안은 이

1. SNS Topic 생성여기를클릭하여펼치기... Create Topic 실행 Topic Name, Display name 입력후 Create topic * Topic name : 특수문자는 hyphens( - ), underscores( _ ) 만허용한다. Topi

0.Â÷·Ê

EMBARCADERO TECHNOLOGIES (Humphery Kim) RAD Studio : h=p://tech.devgear.co.kr/ : h=p://blog.hjf.pe.kr/ Facebook : h=p://d.com/hjfactory :

시스코 무선랜 설치운영 매뉴얼(AP1200s_v1.1)

6주차.key

4. #include <stdio.h> #include <stdlib.h> int main() { functiona(); } void functiona() { printf("hihi\n"); } warning: conflicting types for functiona

Modern Javascript

untitled

Chap06(Interprocess Communication).PDF

³»Áö¼öÁ¤

MasoJava4_Dongbin.PDF

final_thesis

Analytics > Log & Crash Search > Unity ios SDK [Deprecated] Log & Crash Unity ios SDK. TOAST SDK. Log & Crash Unity SDK Log & Crash Search. Log & Cras

step 1-1

4 CD Construct Special Model VI 2 nd Order Model VI 2 Note: Hands-on 1, 2 RC 1 RLC mass-spring-damper 2 2 ζ ω n (rad/sec) 2 ( ζ < 1), 1 (ζ = 1), ( ) 1

PL10

Week5

API STORE 키발급및 API 사용가이드 Document Information 문서명 : API STORE 언어별 Client 사용가이드작성자 : 작성일 : 업무영역 : 버전 : 1 st Draft. 서브시스템 : 문서번호 : 단계 : Docum

RUCK2015_Gruter_public

Microsoft PowerPoint - web-part03-ch19-node.js기본.pptx

PRO1_09E [읽기 전용]

UNIST_교원 홈페이지 관리자_Manual_V1.0

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

슬라이드 1

1. efolder 시스템구성 A. DB B. apache - mod-perl - PHP C. SphinxSearch ( 검색서비스 ) D. File Storage 2. efolder 설치순서 A. DB (MySQL) B. efolder Service - efolder

Todo list Universal app

DBPIA-NURIMEDIA

Special Theme _ 모바일웹과 스마트폰 본 고에서는 모바일웹에서의 단말 API인 W3C DAP (Device API and Policy) 의 표준 개발 현황에 대해서 살펴보고 관 련하여 개발 중인 사례를 통하여 이해를 돕고자 한다. 2. 웹 애플리케이션과 네이

PowerPoint 프레젠테이션

라즈베리파이 프로그래밍_130912(최종).indd

No Slide Title

Social Network

신림프로그래머_클린코드.key

교육2 ? 그림

SIGPLwinterschool2012

50_1953.pdf

YV-150-S.CHINESE1.0-1

PowerPoint Template

BGP AS AS BGP AS BGP AS 65250


thesis

HW5 Exercise 1 (60pts) M interpreter with a simple type system M. M. M.., M (simple type system). M, M. M., M.

13주-14주proc.PDF

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Macaron Cooker Manual 1.0.key

untitled

HTML5가 웹 환경에 미치는 영향 고 있어 웹 플랫폼 환경과는 차이가 있다. HTML5는 기존 HTML 기반 웹 브라우저와의 호환성을 유지하면서도, 구조적인 마크업(mark-up) 및 편리한 웹 폼(web form) 기능을 제공하고, 리치웹 애플리케이 션(RIA)을

12-file.key

Web Scraper in 30 Minutes 강철

B _01_M_Korea.indb

slide2

K7VT2_QIG_v3

Microsoft Word - [2017SMA][T8]OOPT_Stage_1000_ docx

IT & Future Strategy 보고서 는 21세기 한국사회의 주요 패러다임 변화를 분석하고 이를 토대로 미래 초연결 사회의 주요 이슈를 전망, IT를 통한 해결 방안을 모색하기 위해 한국정보화진흥원 (NIA) 에서 기획, 발간하는 보고서입니 다. NIA 의 승인

BEef 사용법.pages

2파트-07

Dialog Box 실행파일을 Web에 포함시키는 방법

특허청구의 범위 청구항 1 게임 서버 또는 미들웨어에 의해, 사용자 단말기로부터, GPS 정보, IP 정보, 중계기 정보 중 적어도 하나를 이 용한 위치 정보와, 상기 사용자 단말기에 설정된 언어 종류를 포함하는 사용자 정보를 수신하는 단계; 상기 게임 서버 또는 미들

chap01_time_complexity.key

09-interface.key

untitled

0. 들어가기 전


歯MDI.PDF

Microsoft PowerPoint - User Manual pptx

EMBARCADERO TECHNOLOGIES (Humphery Kim) RAD Studio : h=p://tech.devgear.co.kr/ : h=p://blog.hjf.pe.kr/ Facebook : h=p://d.com/hjfactory :

<31332DB9E9C6AEB7A2C7D8C5B72D3131C0E528BACEB7CF292E687770>

LXR 설치 및 사용법.doc

歯CRM개괄_허순영.PDF

CD-RW_Advanced.PDF

PowerPoint 프레젠테이션

PRO1_02E [읽기 전용]

휠세미나3 ver0.4

Analyst Briefing

untitled

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

Portal_9iAS.ppt [읽기 전용]

User's Guide Manual

, N-. N- DLNA(Digital Living Network Alliance).,. DLNA DLNA. DLNA,, UPnP, IPv4, HTTP DLNA. DLNA, DLNA [1]. DLNA DLNA DLNA., [2]. DLNA UPnP. DLNA DLNA.

Microsoft Word - Automap3

Mstage.PDF

본문서는 초급자들을 대상으로 최대한 쉽게 작성하였습니다. 본문서에서는 설치방법만 기술했으며 자세한 설정방법은 검색을 통하시기 바랍니다. 1. 설치개요 워드프레스는 블로그 형태의 홈페이지를 빠르게 만들수 있게 해 주는 프로그램입니다. 다양한 기능을 하는 플러그인과 디자인

MAX+plus II Getting Started - 무작정따라하기

인켈(국문)pdf.pdf

C H A P T E R 2

Transcription:

{ } "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "polly:synthesizespeech", "dynamodb:query", "dynamodb:scan", "dynamodb:putitem", "dynamodb:updateitem", "sns:publish", "s3:putobject", "s3:putobjectacl", "s3:getbucketlocation", "logs:createloggroup", "logs:createlogstream", "logs:putlogevents", "lambda:invokefunction" ], "Resource":[ "*" ] } ]

import boto3 import os import json import uuid import datetime def lambda_handler(event, context): recordid = str(uuid.uuid4()) voice = event["voice"] origintext = event["text"] hanja = event["hanja"] updatedate = datetime.datetime.now().strftime("%y-%m-%d %H:%M:%S") print('generating new DynamoDB record, with ID: ' + recordid) print('input Text: ' + origintext) print('selected voice: ' + voice) # Hanja to Korean if hanja: lambda_client = boto3.client('lambda') invoke_response = lambda_client.invoke( FunctionName = "HanjaToKorean", InvocationType = 'RequestResponse',

Payload = json.dumps({"inputtext": origintext}) ) data = invoke_response['payload'].read() resulttext = json.loads(data) replacetext = resulttext['outputtext'] print('hanja to Korean Text: ' + replacetext) else: replacetext = origintext # Creating new record in DynamoDB table dynamodb = boto3.resource('dynamodb') table = dynamodb.table(os.environ['db_table_name']) table.put_item( Item={ 'id' : recordid, 'voice' : voice, 'text': origintext, 'replacetext': replacetext, 'status' : "PROCESSING", 'updatedate': updatedate } ) # Sending notification about new post to SNS client = boto3.client('sns') client.publish( TopicArn = os.environ['sns_topic'], Message = recordid ) return recordid

{ } "voice": "Seoyeon", "text": ",. Polly.", "hanja": false

sudo apt-get install maven brew install maven mvn package

{ } "inputtext": " "

{ } "voice": "Seoyeon", "text": ".", "hanja": true

import boto3 import os from contextlib import closing from boto3.dynamodb.conditions import Key, Attr def lambda_handler(event, context): postid = event["records"][0]["sns"]["message"] print "Text to Speech function. Post ID in DynamoDB: " + postid #Retrieving information about the post from DynamoDB table dynamodb = boto3.resource('dynamodb') table = dynamodb.table(os.environ['db_table_name']) postitem = table.query( KeyConditionExpression=Key('id').eq(postId) ) text = postitem["items"][0]["replacetext"] voice = postitem["items"][0]["voice"] rest = text #Because single invocation of the polly synthesize_speech api can # transform text with about 1,500 characters, we are dividing the # post into blocks of approximately 1,000 characters. textblocks = [] while (len(rest) > 1100): begin = 0 end = rest.find(".", 1000) if (end == -1): end = rest.find(" ", 1000) textblock = rest[begin:end] rest = rest[end:] textblocks.append(textblock) textblocks.append(rest) #For each block, invoke Polly API, which will transform text into audio polly = boto3.client('polly') for textblock in textblocks: response = polly.synthesize_speech( OutputFormat='mp3', Text = textblock, VoiceId = voice ) #Save the audio stream returned by Amazon Polly on Lambda's temp # directory. If there are multiple text blocks, the audio stream # will be combined into a single file. if "AudioStream" in response: with closing(response["audiostream"]) as stream: output = os.path.join("/tmp/", postid) with open(output, "a") as file: file.write(stream.read()) s3 = boto3.client('s3') s3.upload_file('/tmp/' + postid, os.environ['bucket_name'],

postid + ".mp3") s3.put_object_acl(acl='public-read', Bucket=os.environ['BUCKET_NAME'], Key= postid + ".mp3") location = s3.get_bucket_location(bucket=os.environ['bucket_name']) region = location['locationconstraint'] if region is None: url_begining = "https://s3.amazonaws.com/" else: url_begining = "https://s3-" + str(region) + ".amazonaws.com/" \ url = url_begining \ + str(os.environ['bucket_name']) \ + "/" \ + str(postid) \ + ".mp3" #Updating the item in DynamoDB response = table.update_item( Key={'id':postId}, UpdateExpression= "SET #statusatt = :statusvalue, #urlatt = :urlvalue", ExpressionAttributeValues= {':statusvalue': 'UPDATED', ':urlvalue': url}, ExpressionAttributeNames= {'#statusatt': 'status', '#urlatt': 'mp3url'}, ) return

import boto3 import os from boto3.dynamodb.conditions import Key, Attr def lambda_handler(event, context): postid = event["postid"] dynamodb = boto3.resource('dynamodb') table = dynamodb.table(os.environ['db_table_name']) if postid == "*": items = table.scan() else: items = table.query(keyconditionexpression=key('id').eq(postid)) return items["items"] { } "postid": "*"

{ } "postid": "$input.params('postid')"

{ } "Version":"2012-10-17", "Statement":[ { "Sid":"PublicReadGetObject", "Effect":"Allow", "Principal":"*", "Action":[ "s3:getobject" ], "Resource":[ "arn:aws:s3:::bucket_name/*" ] } ]