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 } } }
/// <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); }
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; } }