Exemple #1
0
        private async Task ProcessTranscribe(string bucket, string key)
        {
            Settings settings = new Settings();

            settings.ShowSpeakerLabels = true;
            settings.MaxSpeakerLabels  = 2;
            settings.VocabularyName    = "Vocab";

            Media media = new Media();

            media.MediaFileUri = string.Format("https://s3.us-east-2.amazonaws.com/{0}/{1}", bucket, key);
            CancellationToken token = new CancellationToken();


            StartTranscriptionJobRequest startRequest = new StartTranscriptionJobRequest();

            startRequest.LanguageCode         = LanguageCode.EnUS;
            startRequest.Settings             = settings;
            startRequest.Media                = media;
            startRequest.MediaFormat          = MediaFormat.Mp3;
            startRequest.TranscriptionJobName = Guid.NewGuid().ToString();

            StartTranscriptionJobResponse response = await transClient.StartTranscriptionJobAsync(startRequest, token);


            GetTranscriptionJobRequest request = new GetTranscriptionJobRequest();

            request.TranscriptionJobName = startRequest.TranscriptionJobName;

            bool isComplete = false;

            while (!isComplete)
            {
                GetTranscriptionJobResponse response2 = await transClient.GetTranscriptionJobAsync(request);

                if (response2.TranscriptionJob.TranscriptionJobStatus == TranscriptionJobStatus.COMPLETED)
                {
                    //we need to DL the file to S3
                    isComplete = true;

                    WriteFileToS3(response2.TranscriptionJob.Transcript.TranscriptFileUri, startRequest.TranscriptionJobName);
                }
                else if (response2.TranscriptionJob.TranscriptionJobStatus == TranscriptionJobStatus.FAILED)
                {
                    isComplete = true;
                    //need to log the error.
                }
                else
                {
                    System.Threading.Thread.Sleep(5000);//wait 5 seconds and check again
                    //not done yet
                }
            }
        }
Exemple #2
0
        /// <summary>
        /// Unmarshaller the response from the service to the response class.
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context)
        {
            GetTranscriptionJobResponse response = new GetTranscriptionJobResponse();

            context.Read();
            int targetDepth = context.CurrentDepth;

            while (context.ReadAtDepth(targetDepth))
            {
                if (context.TestExpression("TranscriptionJob", targetDepth))
                {
                    var unmarshaller = TranscriptionJobUnmarshaller.Instance;
                    response.TranscriptionJob = unmarshaller.Unmarshall(context);
                    continue;
                }
            }

            return(response);
        }
        public async Task <SpeechRecognitionResult> ParseSpeectToText(string[] args)
        {
            if (string.IsNullOrEmpty(args[0]))
            {
                return(null);
            }

            var uploadDetails = await _amazonUploaderService.UploadBase64Wav(args[0]);

            if (string.IsNullOrEmpty(uploadDetails.FileRoute))
            {
                return(null);
            }

            var transciptionJobName = "Transcribe_" + uploadDetails.FileRoute;
            var request             = new StartTranscriptionJobRequest()
            {
                Media = new Media()
                {
                    MediaFileUri = "https://s3." + uploadDetails.BucketRegion + ".amazonaws.com/" + uploadDetails.BucketName + "/" + uploadDetails.FileRoute
                },
                LanguageCode         = new LanguageCode(LanguageCode.EnUS),
                MediaFormat          = new MediaFormat("Wav"),
                TranscriptionJobName = transciptionJobName
            };

            try
            {
                var res = await _amazonTranscribeService.StartTranscriptionJobAsync(request);

                var jobComplete = false;
                GetTranscriptionJobResponse jobRes = null;
                while (!jobComplete)
                {
                    jobRes = await _amazonTranscribeService.GetTranscriptionJobAsync(new GetTranscriptionJobRequest()
                    {
                        TranscriptionJobName = transciptionJobName
                    });

                    if (jobRes != null && jobRes.TranscriptionJob.TranscriptionJobStatus !=
                        TranscriptionJobStatus.COMPLETED)
                    {
                        System.Threading.Thread.Sleep(5000);
                    }
                    else
                    {
                        jobComplete = true;
                    }
                }

                var jsonRes = "";
                using (var client = _httpProxyClientService.CreateHttpClient())
                {
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    var response = client
                                   .GetAsync(jobRes.TranscriptionJob.Transcript.TranscriptFileUri).Result;

                    if (!response.IsSuccessStatusCode)
                    {
                        return(null);
                    }
                    jsonRes = response.Content.ReadAsStringAsync().Result;
                }

                // Once done delete the file
                await _amazonUploaderService.DeleteFile(uploadDetails.FileRoute);

                return(new SpeechRecognitionResult()
                {
                    StatusCode = 200,
                    JSONResult = jsonRes
                });
            }
            catch (AmazonTranscribeServiceException ex)
            {
                Console.WriteLine("Error: " + ex.Message);
            }

            return(null);
        }
        public string GetTranscriptURL()
        {
            string result = string.Empty;

            try
            {
                AmazonTranscribeServiceClient client = new AmazonTranscribeServiceClient(ConfigurationManager.AppSettings["AmazonAccessKey"],
                                                                                         ConfigurationManager.AppSettings["AmazonSecretAccessKey"],
                                                                                         RegionEndpoint.EUWest1);

                if (client != null)
                {
                    string url = String.Format(ConfigurationManager.AppSettings["AmazonBucketURL"],
                                               ConfigurationManager.AppSettings["AmazonBucketName"],
                                               keyName);

                    Media media = new Media();
                    StartTranscriptionJobResponse transcriptionJobResponse = null;
                    GetTranscriptionJobResponse   checkJob = null;

                    media.MediaFileUri = url;



                    StartTranscriptionJobRequest transcriptionJobRequest = new StartTranscriptionJobRequest();
                    string name = Guid.NewGuid().ToString();
                    transcriptionJobRequest.TranscriptionJobName = name;
                    transcriptionJobRequest.MediaFormat          = "wav";
                    transcriptionJobRequest.Media        = media;
                    transcriptionJobRequest.LanguageCode = "en-US";

                    GetTranscriptionJobRequest getTranscriptionJobRequest = new GetTranscriptionJobRequest();
                    getTranscriptionJobRequest.TranscriptionJobName = name;

                    bool finished = false;
                    transcriptionJobResponse = client.StartTranscriptionJob(transcriptionJobRequest);

                    while (!finished)
                    {
                        checkJob = client.GetTranscriptionJob(getTranscriptionJobRequest);

                        if (checkJob != null)
                        {
                            if (!checkJob.TranscriptionJob.TranscriptionJobStatus.Value.Contains("IN_PROGRESS"))
                            {
                                finished = true;
                            }

                            Thread.Sleep(1000);
                        }
                    }


                    result = checkJob.TranscriptionJob.Transcript.TranscriptFileUri;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

            return(result);
        }
Exemple #5
0
        private async void BeginTranscription_Click(object sender, RoutedEventArgs e)
        {
            this._ctlBeginTranscription.IsEnabled = false;
            try
            {
                this._ctlStatusLog.Text     = "";
                this._ctlTranscription.Text = "";

                var filepath = this._ctlFilepath.Text;
                if (string.IsNullOrEmpty(filepath))
                {
                    MessageBox.Show($"An mp4 file must be selected first before transcribing", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }
                if (!System.IO.File.Exists(filepath))
                {
                    MessageBox.Show($"File {filepath} does not exist", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                var s3Key    = System.IO.Path.GetFileName(filepath);
                var s3Bucket = _ctlS3Bucket.Text;


                var            chain = new CredentialProfileStoreChain();
                AWSCredentials credentials;
                if (!chain.TryGetAWSCredentials(this._ctlProfile.Text, out credentials))
                {
                    MessageBox.Show($"Profile {this._ctlProfile.Text} was not found", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    return;
                }

                var region = RegionEndpoint.GetBySystemName(this._ctlRegion.Text);

                var transcriptionJobName = $"{s3Key}-{Guid.NewGuid().ToString()}";

                using (var s3Client = new AmazonS3Client(credentials, region))
                    using (var transcribeClient = new AmazonTranscribeServiceClient(credentials, region))
                        using (var httpClient = new HttpClient()) // Http Client to download the transcription once complete
                        {
                            AppendStatusLine("Ensuring S3 bucket exists");
                            await s3Client.PutBucketAsync(s3Bucket);


                            var transferUtility = new TransferUtility(s3Client);

                            AppendStatusLine("Starting upload");

                            var uploadRequest = new TransferUtilityUploadRequest
                            {
                                FilePath   = filepath,
                                BucketName = s3Bucket,
                                Key        = s3Key
                            };

                            uploadRequest.UploadProgressEvent += ProgressUploadStatus;

                            await transferUtility.UploadAsync(uploadRequest);

                            var mediaFileUri = $"https://s3.{region.SystemName}.amazonaws.com/{s3Bucket}/{s3Key}";
                            AppendStatusLine($"Upload Complete to: {mediaFileUri}");

                            await transcribeClient.StartTranscriptionJobAsync(new StartTranscriptionJobRequest
                            {
                                LanguageCode = LanguageCode.EnUS,
                                Media        = new Media
                                {
                                    MediaFileUri = mediaFileUri
                                },
                                MediaFormat          = MediaFormat.Mp4,
                                TranscriptionJobName = transcriptionJobName
                            });

                            AppendStatusLine($"Started transcription job: {transcriptionJobName}");

                            GetTranscriptionJobRequest request = new GetTranscriptionJobRequest {
                                TranscriptionJobName = transcriptionJobName
                            };
                            GetTranscriptionJobResponse response = null;
                            do
                            {
                                AppendStatusLine($"... {DateTime.Now} Waiting for transcription job to complete");
                                await Task.Delay(TimeSpan.FromSeconds(2));

                                response = await transcribeClient.GetTranscriptionJobAsync(request);
                            } while (response.TranscriptionJob.TranscriptionJobStatus == TranscriptionJobStatus.IN_PROGRESS);

                            if (response.TranscriptionJob.TranscriptionJobStatus == TranscriptionJobStatus.FAILED)
                            {
                                AppendStatusLine($"Transcription job failed: {response.TranscriptionJob.FailureReason}");
                                return;
                            }

                            AppendStatusLine("Job Done");

                            var transcriptionDocument = await httpClient.GetStringAsync(response.TranscriptionJob.Transcript.TranscriptFileUri);

                            var root = JsonConvert.DeserializeObject(transcriptionDocument) as JObject;

                            var sb = new StringBuilder();
                            foreach (JObject transcriptionNode in root["results"]["transcripts"])
                            {
                                if (sb.Length != 0)
                                {
                                    sb.AppendLine("\n\n");
                                }

                                sb.Append(transcriptionNode["transcript"]);
                            }

                            this._ctlTranscription.Text = sb.ToString();
                        }
            }
            catch (Exception ex)
            {
                AppendStatusLine($"Unknown error: {ex.Message}");
            }
            finally
            {
                this._ctlBeginTranscription.IsEnabled = true;
            }
        }