Amazon Translate에서 Amazon Polly 사용 - Amazon Translate

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Amazon Translate에서 Amazon Polly 사용

번역된 텍스트를 말로 들으려면 Amazon Polly를 Amazon Translate와 함께 사용하면 됩니다. 이 예제에서는 Amazon Translate를 사용하여 텍스트를 번역한 후 Amazon Translate Polly를 사용하여 이 텍스트를 말로 들을 수 있는 웹 페이지를 만들어 보겠습니다. 코드는 다음과 같이 요약할 수 있습니다.

  • 웹 페이지를 만들기 위한 CSS 및 HTML.

  • Amazon Translate 및 Amazon Polly에 대한 컨트롤러를 만드는 초기화 코드.

  • 웹 페이지에서 데이터를 읽고 Amazon Translate Translate를 호출하는 함수입니다.

  • 웹 페이지에서 데이터를 읽고 Amazon Polly를 호출하는 함수.

  • 웹 페이지를 관리하기 위한 유틸리티 함수.

예제를 구성하려면

  1. AWS SDK for JavaScript를 설치하고 구성합니다. 에 대한 SDK 설치 지침 JavaScript, 참조에 대한 SDK 설치 JavaScript.

  2. 예제 코드를 복사하여 웹 서버의 HTML 파일에 붙여 넣습니다.

  3. 업데이트<script>에 대한 SDK를 설치한 위치에 태그를 지정합니다. JavaScript.

  4. 리전과 엔드포인트를 Amazon Translate 및 Amazon Polly 작업을 실행하려는 리전으로 변경합니다. Amazon Translate Translate가 지원되는 리전의 목록은 섹션을 참조하십시오.AWS 리전 및 엔드포인트. Amazon Polly가 지원되는 리전의 목록은 섹션을 참조하십시오.AWS 리전 및 엔드포인트AWS일반 참조.

  5. 이 예제를 실행하는 데 필요한 최소한의 권한을 갖는 IAM 사용자를 만듭니다. IAM 사용자 생성에 대한 자세한 내용은 단원을 참조하십시오.AWS 계정에서 IAM 사용자 생성AWS Identity and Access Management사용 설명서. 필요한 권한 정책의 경우 을 참조하십시오.Amazon Translate 자격 증명 기반 정책Amazon Polly에 대한 자격 증명 정책 (IAM 정책) 사용Amazon Polly 개발자 안내서.

  6. 이전 단계에서 만든 IAM 사용자의 액세스 ID와 비밀 키를 제공합니다.

코드

다음은 예제 웹 페이지의 전체 코드입니다. 이 코드를 HTML 파일로 복사하여 웹 서버에서 이 예제를 실행할 수 있습니다.

<!DOCTYPE html> <html> <head> <title>Amazon Translate</title> <script src="aws-sdk/dist/aws-sdk.js"></script> </head> <body> <h1 style="text-align: left">Amazon Translate Demo</h1> <br/> <table class="tg"> <tr> <th align="left"> Source Language Code: <select id="sourceLanguageCodeDropdown"> <option value="en">en</option> <option value="ar">ar</option> <option value="cs">cs</option> <option value="de">de</option> <option value="es">es</option> <option value="fr">fr</option> <option value="it">it</option> <option value="ja">ja</option> <option value="pt">pt</option> <option value="ru">ru</option> <option value="tr">tr</option> <option value="zh">zh</option> <option value="zh-TW">zh-TW</option> </select> </th> <th align="left"> Target Language Code: <select id="targetLanguageCodeDropdown"> <option value="en">en</option> <option value="ar">ar</option> <option value="cs">cs</option> <option value="de">de</option> <option value="es">es</option> <option value="fr">fr</option> <option value="it">it</option> <option value="ja">ja</option> <option value="pt">pt</option> <option value="ru">ru</option> <option value="tr">tr</option> <option value="zh">zh</option> <option value="zh-TW">zh-TW</option> </select> </th> </tr> <tr> <th> <textarea id="inputText" name="inputText" rows="10" cols="50" placeholder="Text to translate..."></textarea> </th> <th> <textarea id="outputText" name="outputText" rows="10" cols="50" placeholder="Translated text..."></textarea> </th> </tr> <tr> <th align="left"> <button type="button" name="translateButton" onclick="doTranslate()">Translate</button> <button type="button" name="synthesizeButton" onclick="doSynthesizeInput()">Synthesize Input Speech</button> <button type="button" name="clearButton" onclick="clearInputs()">Clear</button> </th> <th align="left"> <button type="button" name="synthesizeButton" onclick="doSynthesizeOutput()">Synthesize Output Speech</button> </th> </tr> </table> <script type="text/javascript"> // set the focus to the input box document.getElementById("inputText").focus(); /** * Change the region and endpoint. */ AWS.config.region = 'region'; // Region /** * In a production application you should use a secure method of authenticating uses, such as the ones * described here: * https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-browser.html * * Note that Amazon Translate does not work with Amazon Cognito Identity. * * For this example you place the credentials of an IAM user in the HTML page. The IAM user associated * with these credentials must have permissions to call Amazon Translate. We recommend using the following * permissions policy and nothing more, as anyone that has access to this HTML page will also have access to * these hard-coded credentials. * { * "Version": "2012-10-17", * "Statement": [ * { * "Action": [ * "translate:TranslateText", * "polly:SynthesizeSpeech" * ], * "Resource": "*", * "Effect": "Allow" * } * ] * } * * For more information about the AWS Credentials object, see: * http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html */ AWS.config.credentials = new AWS.Credentials("access key", "secret key"); var translate = new AWS.Translate({region: AWS.config.region}); var polly = new AWS.Polly(); function doTranslate() { var inputText = document.getElementById('inputText').value; if (!inputText) { alert("Input text cannot be empty."); exit(); } // get the language codes var sourceDropdown = document.getElementById("sourceLanguageCodeDropdown"); var sourceLanguageCode = sourceDropdown.options[sourceDropdown.selectedIndex].text; var targetDropdown = document.getElementById("targetLanguageCodeDropdown"); var targetLanguageCode = targetDropdown.options[targetDropdown.selectedIndex].text; var params = { Text: inputText, SourceLanguageCode: sourceLanguageCode, TargetLanguageCode: targetLanguageCode }; translate.translateText(params, function(err, data) { if (err) { console.log(err, err.stack); alert("Error calling Amazon Translate. " + err.message); return; } if (data) { var outputTextArea = document.getElementById('outputText'); outputTextArea.value = data.TranslatedText; } }); } function doSynthesizeInput() { var text = document.getElementById('inputText').value.trim(); if (!text) { return; } var sourceLanguageCode = document.getElementById("sourceLanguageCodeDropdown").value; doSynthesize(text, sourceLanguageCode); } function doSynthesizeOutput() { var text = document.getElementById('outputText').value.trim(); if (!text) { return; } var targetLanguageCode = document.getElementById("targetLanguageCodeDropdown").value; doSynthesize(text, targetLanguageCode); } function doSynthesize(text, languageCode) { var voiceId; switch (languageCode) { case "de": voiceId = "Marlene"; break; case "en": voiceId = "Joanna"; break; case "es": voiceId = "Penelope"; break; case "fr": voiceId = "Celine"; break; case "pt": voiceId = "Vitoria"; break; default: voiceId = null; break; } if (!voiceId) { alert("Speech synthesis unsupported for language code: \"" + languageCode + "\""); return; } var params = { OutputFormat: "mp3", SampleRate: "8000", Text: text, TextType: "text", VoiceId: voiceId }; polly.synthesizeSpeech(params, function(err, data) { if (err) { console.log(err, err.stack); // an error occurred alert("Error calling Amazon Polly. " + err.message); } else { var uInt8Array = new Uint8Array(data.AudioStream); var arrayBuffer = uInt8Array.buffer; var blob = new Blob([arrayBuffer]); var url = URL.createObjectURL(blob); audioElement = new Audio([url]); audioElement.play(); } }); } function clearInputs() { document.getElementById('inputText').value = ""; document.getElementById('outputText').value = ""; document.getElementById("sourceLanguageCodeDropdown").value = "en"; document.getElementById("targetLanguageCodeDropdown").value = "en"; } </script> </body> </html>