コード例 #1
0
        static async Task Main(string[] args)
        {
            Console.WriteLine("Generate translation files using AWS Translate from Blazor I18nText JSON");

            Console.Write("Enter File Path to English JSON: ");
            var file = Console.ReadLine();

            Console.Write("Enter list of languages to translate (comma separated): ");
            var languages = Console.ReadLine().Split(',');

            var dir  = Path.GetDirectoryName(file);
            var data = JsonConvert.DeserializeObject <Dictionary <string, string> >(File.ReadAllText(file));

            using (var trans = new AmazonTranslateClient())
            {
                foreach (var lang in languages)
                {
                    var newData = new Dictionary <string, string>();
                    foreach (var item in data)
                    {
                        var translation = await trans.TranslateTextAsync(new Amazon.Translate.Model.TranslateTextRequest()
                        {
                            SourceLanguageCode = "en",
                            TargetLanguageCode = lang,
                            Text = item.Value
                        });

                        if (translation.HttpStatusCode == System.Net.HttpStatusCode.OK)
                        {
                            newData.Add(item.Key, translation.TranslatedText);
                        }
                        else
                        {
                            newData.Add(item.Key, "NO TRANSLATION");
                        }
                        //TODO: Error
                    }
                    var fn        = Path.GetFileName(file).Split('.');
                    var newFn     = $"{fn[0]}.{lang}.{fn[2]}";
                    var newFnPath = Path.Combine(dir, newFn);
                    Console.WriteLine(newFnPath);
                    if (!File.Exists(newFnPath))
                    {
                        File.Create(newFnPath).Dispose();
                    }
                    using (var fs = new FileStream(newFnPath, FileMode.Truncate))
                    {
                        var newJson = JsonConvert.SerializeObject(newData, new JsonSerializerSettings()
                        {
                            Formatting = Formatting.Indented,
                        });
                        using (var sr = new StreamWriter(fs, System.Text.Encoding.UTF8))
                            await sr.WriteAsync(newJson);
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// This method is called for every Lambda invocation. This method takes in an S3 event object and can be used
        /// to respond to S3 notifications.
        /// </summary>
        /// <param name="evnt"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task <string> FunctionHandler(S3Event evnt, ILambdaContext context)
        {
            var s3Event = evnt.Records?[0].S3;

            if (s3Event == null)
            {
                return(null);
            }

            try
            {
                String content;

                using (var s3Client = new AmazonS3Client())
                {
                    GetObjectRequest request = new GetObjectRequest
                    {
                        BucketName = evnt.Records.First().S3.Bucket.Name,
                        Key        = evnt.Records.First().S3.Object.Key
                    };

                    GetObjectResponse response = await s3Client.GetObjectAsync(request);

                    StreamReader reader = new StreamReader(response.ResponseStream);
                    content = reader.ReadToEnd();

                    using (var translateClient = new AmazonTranslateClient(Amazon.RegionEndpoint.EUWest1))
                    {
                        foreach (string language in languages)
                        {
                            var translateTextResponse = await translateClient.TranslateTextAsync(
                                new TranslateTextRequest()
                            {
                                Text = content,
                                SourceLanguageCode = "EN",
                                TargetLanguageCode = language
                            });

                            await S3Client.PutObjectAsync(new PutObjectRequest()
                            {
                                ContentBody = translateTextResponse.TranslatedText,
                                BucketName  = evnt.Records.First().S3.Bucket.Name,
                                Key         = evnt.Records.First().S3.Object.Key.Replace("EN", language)
                            });
                        }
                    }
                    return("Complete");
                }
            }
            catch (Exception e)
            {
                context.Logger.LogLine(e.Message);
                context.Logger.LogLine(e.StackTrace);
                throw;
            }
        }
コード例 #3
0
        /// <summary>
        /// Use the Amazon Translate Service to translate the document from the
        /// source language to the specified destination language.
        /// </summary>
        /// <param name="client">The Amazon Translate Service client used to
        /// perform the translation.</param>
        /// <param name="srcLang">The language of the source text.</param>
        /// <param name="destLang">The destination language for the translated
        /// text.</param>
        /// <param name="text">A string representing the text to ranslate.</param>
        /// <returns>The text that has been translated to the destination
        /// language.</returns>
        public static async Task <string> TranslatingTextAsync(AmazonTranslateClient client, string srcLang, string destLang, string text)
        {
            var request = new TranslateTextRequest
            {
                SourceLanguageCode = srcLang,
                TargetLanguageCode = destLang,
                Text = text,
            };

            var response = await client.TranslateTextAsync(request);

            return(response.TranslatedText);
        }
コード例 #4
0
        private string TranslateBody(string msg, string lan)
        {
            var translateClient = new AmazonTranslateClient(RegionEndpoint.USEast2);
            var request         = new TranslateTextRequest
            {
                SourceLanguageCode = "en",
                TargetLanguageCode = lan,
                Text = msg,
            };

            var response = translateClient.TranslateTextAsync(request);

            return(response.Result.TranslatedText);
        }
コード例 #5
0
        static async Task Main()
        {
            var region  = RegionEndpoint.APNortheast1;
            var client  = new AmazonTranslateClient(region);
            var request = new TranslateTextRequest
            {
                SourceLanguageCode = "ja",
                TargetLanguageCode = "en",
                Text = "おはようございます"
            };
            var resp = await client.TranslateTextAsync(request);

            var result = resp.TranslatedText;

            Console.WriteLine(result);
        }
コード例 #6
0
        public static async Task Translate(string text, string sourceLangaugeCode = "en",
                                           string targetLangaugeCode = "de")
        {
            //Generate the client, Note: The config is used from your initital CLI configuration
            var translate = new AmazonTranslateClient();
            //Build up request
            var request = new TranslateTextRequest
            {
                Text = text, SourceLanguageCode = sourceLangaugeCode, TargetLanguageCode = targetLangaugeCode
            };

            //Call translate service
            var translation = await translate.TranslateTextAsync(request);


            Console.WriteLine(translation.TranslatedText);
        }
コード例 #7
0
        public ActionResult TranslateComment(TranslateCommentViewModel comment)
        {
            var translate = new AmazonTranslateClient("AKIAX3JSZJ36DOCUNIJY", "vTKVVvQs01qY25LczK5uSdD3gev49cdXfKNr7LRT", RegionEndpoint.USEast1);
            var request   = new TranslateTextRequest()
            {
                Text = comment.CommentText, SourceLanguageCode = "en", TargetLanguageCode = comment.TargetLanguage
            };

            var task = translate.TranslateTextAsync(request); //.TranslateText(request) // Make the actual call to Amazon Translate

            task.Wait();

            var model = new TranslatedCommentViewModel()
            {
                CommentText       = comment.CommentText,
                SubmitterName     = comment.SubmitterName,
                TargetLangauge    = comment.TargetLanguage,
                TranslateResponse = task.Result
            };

            return(View(model));
        }
コード例 #8
0
        public async Task <JsonResult> Post(string translateText, string inputLanguage, string outputLanguage)
        {
            try
            {
                using (var translateClient = new AmazonTranslateClient())
                {
                    var translateTextResponse = await translateClient.TranslateTextAsync(
                        new Amazon.Translate.Model.TranslateTextRequest()
                    {
                        Text = translateText,
                        SourceLanguageCode = inputLanguage,
                        TargetLanguageCode = outputLanguage
                    });

                    return(new JsonResult(translateTextResponse.HttpStatusCode == System.Net.HttpStatusCode.OK ?
                                          translateTextResponse.TranslatedText : "Error processing request"));
                }
            }
            catch (Exception ex)
            {
                return(new JsonResult(ex.Message));
            }
        }
コード例 #9
0
        internal static async Task ProcessJobAssignmentAsync(AwsAiServiceWorkerRequest @event)
        {
            var resourceManager = @event.GetAwsV4ResourceManager();
            var table           = new DynamoDbTable(@event.StageVariables["TableName"]);
            var jobAssignmentId = @event.JobAssignmentId;

            try
            {
                // 1. Setting job assignment status to RUNNING
                await UpdateJobAssignmentStatusAsync(resourceManager, table, jobAssignmentId, "RUNNING", null);

                // 2. Retrieving WorkflowJob
                var job = await RetrieveJobAsync(resourceManager, table, jobAssignmentId);

                // 3. Retrieve JobProfile
                var jobProfile = await RetrieveJobProfileAsync(resourceManager, job);

                // 4. Retrieve job inputParameters
                var jobInput = job.JobInput;

                // 5. Check if we support jobProfile and if we have required parameters in jobInput
                ValidateJobProfile(jobProfile, jobInput);

                S3Locator inputFile;
                if (!jobInput.TryGet <S3Locator>(nameof(inputFile), out inputFile))
                {
                    throw new Exception("Invalid or missing input file.");
                }

                S3Locator outputLocation;
                if (!jobInput.TryGet <S3Locator>(nameof(outputLocation), out outputLocation))
                {
                    throw new Exception("Invalid or missing output location.");
                }

                switch (jobProfile.Name)
                {
                case JOB_PROFILE_TRANSCRIBE_AUDIO:
                    string mediaFileUrl;
                    if (!string.IsNullOrWhiteSpace(inputFile.HttpEndpoint))
                    {
                        mediaFileUrl = inputFile.HttpEndpoint;
                    }
                    else
                    {
                        var bucketLocation = await inputFile.GetBucketLocationAsync();

                        var s3SubDomain = !string.IsNullOrWhiteSpace(bucketLocation) ? $"s3-{bucketLocation}" : "s3";
                        mediaFileUrl = $"https://{s3SubDomain}.amazonaws.com/{inputFile.AwsS3Bucket}/{inputFile.AwsS3Key}";
                    }

                    string mediaFormat;
                    if (mediaFileUrl.EndsWith("mp3", StringComparison.OrdinalIgnoreCase))
                    {
                        mediaFormat = "mp3";
                    }
                    else if (mediaFileUrl.EndsWith("mp4", StringComparison.OrdinalIgnoreCase))
                    {
                        mediaFormat = "mp4";
                    }
                    else if (mediaFileUrl.EndsWith("wav", StringComparison.OrdinalIgnoreCase))
                    {
                        mediaFormat = "wav";
                    }
                    else if (mediaFileUrl.EndsWith("flac", StringComparison.OrdinalIgnoreCase))
                    {
                        mediaFormat = "flac";
                    }
                    else
                    {
                        throw new Exception($"Unable to determine media format from input file '{mediaFileUrl}'");
                    }

                    var transcribeParameters = new StartTranscriptionJobRequest
                    {
                        TranscriptionJobName = "TranscriptionJob-" + jobAssignmentId.Substring(jobAssignmentId.LastIndexOf("/") + 1),
                        LanguageCode         = "en-US",
                        Media = new Media {
                            MediaFileUri = mediaFileUrl
                        },
                        MediaFormat      = mediaFormat,
                        OutputBucketName = @event.StageVariables["ServiceOutputBucket"]
                    };

                    var transcribeService = new AmazonTranscribeServiceClient();

                    var startJobResponse = await transcribeService.StartTranscriptionJobAsync(transcribeParameters);

                    Logger.Debug(startJobResponse.ToMcmaJson().ToString());
                    break;

                case JOB_PROFILE_TRANSLATE_TEXT:
                    var s3Bucket = inputFile.AwsS3Bucket;
                    var s3Key    = inputFile.AwsS3Key;

                    GetObjectResponse s3Object;
                    try
                    {
                        s3Object = await inputFile.GetAsync();
                    }
                    catch (Exception error)
                    {
                        throw new Exception($"Unable to read file in bucket '{s3Bucket}' with key '{s3Key}'.", error);
                    }

                    var inputText = await new StreamReader(s3Object.ResponseStream).ReadToEndAsync();

                    var translateParameters = new TranslateTextRequest
                    {
                        SourceLanguageCode = jobInput.TryGet("sourceLanguageCode", out string srcLanguageCode) ? srcLanguageCode : "auto",
                        TargetLanguageCode = jobInput.Get <string>("targetLanguageCode"),
                        Text = inputText
                    };

                    var translateService  = new AmazonTranslateClient();
                    var translateResponse = await translateService.TranslateTextAsync(translateParameters);

                    var s3Params = new PutObjectRequest
                    {
                        BucketName  = outputLocation.AwsS3Bucket,
                        Key         = (!string.IsNullOrWhiteSpace(outputLocation.AwsS3KeyPrefix) ? outputLocation.AwsS3Key : string.Empty) + Guid.NewGuid() + ".txt",
                        ContentBody = translateResponse.TranslatedText
                    };

                    var outputS3 = await outputLocation.GetClientAsync();

                    await outputS3.PutObjectAsync(s3Params);

                    var jobOutput = new JobParameterBag();
                    jobOutput["outputFile"] = new S3Locator
                    {
                        AwsS3Bucket = s3Params.BucketName,
                        AwsS3Key    = s3Params.Key
                    };

                    Logger.Debug("Updating job assignment");
                    await UpdateJobAssignmentWithOutputAsync(table, jobAssignmentId, jobOutput);
                    await UpdateJobAssignmentStatusAsync(resourceManager, table, jobAssignmentId, "COMPLETED");

                    break;

                case JOB_PROFILE_DETECT_CELEBRITIES:
                    var randomBytes = new byte[16];
                    new Random().NextBytes(randomBytes);
                    var clientToken = randomBytes.HexEncode();

                    var base64JobId = Encoding.UTF8.GetBytes(jobAssignmentId).HexEncode();

                    var rekoParams = new StartCelebrityRecognitionRequest
                    {
                        Video = new Video
                        {
                            S3Object = new Amazon.Rekognition.Model.S3Object
                            {
                                Bucket = inputFile.AwsS3Bucket,
                                Name   = inputFile.AwsS3Key
                            }
                        },
                        ClientRequestToken  = clientToken,
                        JobTag              = base64JobId,
                        NotificationChannel = new NotificationChannel
                        {
                            RoleArn     = REKO_SNS_ROLE_ARN,
                            SNSTopicArn = SNS_TOPIC_ARN
                        }
                    };

                    var rekognitionClient             = new AmazonRekognitionClient();
                    var startCelebRecognitionResponse = await rekognitionClient.StartCelebrityRecognitionAsync(rekoParams);

                    Logger.Debug(startCelebRecognitionResponse.ToMcmaJson().ToString());
                    break;
                }
            }
            catch (Exception ex)
            {
                Logger.Exception(ex);

                try
                {
                    await UpdateJobAssignmentStatusAsync(resourceManager, table, jobAssignmentId, "FAILED", ex.ToString());
                }
                catch (Exception innerEx)
                {
                    Logger.Exception(innerEx);
                }
            }
        }
コード例 #10
0
        public async Task ExecuteAsync(WorkerJobHelper <AIJob> jobHelper)
        {
            S3Locator inputFile;

            if (!jobHelper.JobInput.TryGet <S3Locator>(nameof(inputFile), out inputFile))
            {
                throw new Exception("Invalid or missing input file.");
            }

            S3Locator outputLocation;

            if (!jobHelper.JobInput.TryGet <S3Locator>(nameof(outputLocation), out outputLocation))
            {
                throw new Exception("Invalid or missing output location.");
            }

            var s3Bucket = inputFile.AwsS3Bucket;
            var s3Key    = inputFile.AwsS3Key;

            GetObjectResponse s3Object;

            try
            {
                s3Object = await inputFile.GetAsync();
            }
            catch (Exception error)
            {
                throw new Exception($"Unable to read file in bucket '{s3Bucket}' with key '{s3Key}'.", error);
            }

            var inputText = await new StreamReader(s3Object.ResponseStream).ReadToEndAsync();

            var translateParameters = new TranslateTextRequest
            {
                SourceLanguageCode = jobHelper.JobInput.TryGet("sourceLanguageCode", out string srcLanguageCode) ? srcLanguageCode : "auto",
                TargetLanguageCode = jobHelper.JobInput.Get <string>("targetLanguageCode"),
                Text = inputText
            };

            var translateService  = new AmazonTranslateClient();
            var translateResponse = await translateService.TranslateTextAsync(translateParameters);

            var s3Params = new PutObjectRequest
            {
                BucketName  = outputLocation.AwsS3Bucket,
                Key         = (!string.IsNullOrWhiteSpace(outputLocation.AwsS3KeyPrefix) ? outputLocation.AwsS3Key : string.Empty) + Guid.NewGuid() + ".txt",
                ContentBody = translateResponse.TranslatedText
            };

            var outputS3 = await outputLocation.GetClientAsync();

            await outputS3.PutObjectAsync(s3Params);

            jobHelper.JobOutput.Set("outputFile", new S3Locator
            {
                AwsS3Bucket = s3Params.BucketName,
                AwsS3Key    = s3Params.Key
            });

            await jobHelper.CompleteAsync();
        }
    }