提问人:Leon 提问时间:4/4/2023 更新时间:6/21/2023 访问量:64
AWSSDK 中。转录 StartTranscription作业完成
AWSSDK.Transcribe StartTranscriptionJob completion
问:
我编写了以下使用 AWSSDK 的代码。转录以转录音频文件。 代码执行并返回状态为 OK 的响应,但返回对象响应。TranscriptionJob.Transcript 为 null 我想出的解释是,它只指示工作的开始,一位同事告诉我,我现在需要轮询结果,或者使用 AWS Step Functions 或 AWS Lambda 来监控作业完成情况......我可以使用任何其他选项来了解转录何时完成?
public static string Transcribe(string inputAudioFilePath)
{
var awsCredentials = new BasicAWSCredentials(accessKey, secretKey);
// North CA, for streaming "us-west-2"
var config = new AmazonTranscribeServiceConfig { RegionEndpoint = RegionEndpoint.GetBySystemName("us-west-2") };
AmazonTranscribeServiceClient client = new AmazonTranscribeServiceClient(awsCredentials, config);
client.AfterResponseEvent += Client_AfterResponseEvent;
var jobName = String.Format("AWSSTT-{0}", DateTime.Now.ToString("yyyy-MM-dd-hh-mm-t"));
var inputLanguage = "en-US";
#region Upload File to S3 Bucket
string s3BucketName = "tts-experiment";
string s3KeyName = inputAudioFilePath;
mAmazonS3Client = new AmazonS3Client(accessKey, secretKey, mRegionEndpoint);
string s3MediaUrl = UploadFileToS3(inputAudioFilePath, s3BucketName, s3KeyName);
string ext = Path.GetExtension(inputAudioFilePath).ToUpper();
MediaFormat mediaFormat = MediaFormat.Wav;
if (String.Compare(ext, ".MP3", true) == 0)
mediaFormat = MediaFormat.Mp3;
#endregion
var media = new Media() { MediaFileUri = s3MediaUrl };
var request = new StartTranscriptionJobRequest
{
TranscriptionJobName = jobName,
LanguageCode = inputLanguage,
Media = media,
MediaFormat = MediaFormat.Mp3,
};
try
{
string text = "";
StartTranscriptionJobResponse response = client.StartTranscriptionJob(request);
if (response.HttpStatusCode == System.Net.HttpStatusCode.OK)
{
Console.WriteLine("Transcription completed successfully");
if (response.TranscriptionJob.Transcript != null && response.TranscriptionJob.Transcript.TranscriptFileUri != null)
{
string transcriptUrl = response.TranscriptionJob.Transcript.TranscriptFileUri.ToString();
WebClient webClient = new WebClient();
string targetDir = Path.Combine(Program.InstallDir, @"TTSExperiment\Transcribed");
if (!Directory.Exists(targetDir))
{
Directory.CreateDirectory(targetDir);
}
string localFilePath = Path.Combine(targetDir, Path.GetFileNameWithoutExtension(transcriptUrl) +".txt");
webClient.DownloadFile(transcriptUrl, localFilePath);
text = File.ReadAllText(localFilePath);
Console.WriteLine($"Transcription job {jobName} completed.");
}
else
{
Console.WriteLine("No Transcript created");
}
return text;
}
}
catch (Exception ex)
{
Console.WriteLine($"Error starting transcription job: {ex.Message}");
}
return "";
}
答:
1赞
rlhagerm
6/21/2023
#1
您的同事是对的,您确实需要轮询结果或以其他方式进行检查,因为转录可能需要很长时间,具体取决于媒体的长度。AWS 开发工具包示例存储库包含一个 .NET 示例,该示例使用一些您可能会发现有用的简单轮询逻辑。
Console.WriteLine("Start a transcription.");
var transcriptionName = $"ExampleTranscription_{DateTime.Now.Ticks}";
var transcriptionJob = await transcribeWrapper.StartTranscriptionJob(
transcriptionName, transcriptionMediaLocation, MediaFormat.Mp3,
LanguageCode.EnUS, null);
Console.WriteLine($"Transcription started: {transcriptionJob.TranscriptionJobName}, " +
$"status: {transcriptionJob.TranscriptionJobStatus}.");
Console.WriteLine($"Waiting for transcription {transcriptionName}.");
while (transcriptionJob.TranscriptionJobStatus != TranscriptionJobStatus.COMPLETED
&& transcriptionJob.TranscriptionJobStatus != TranscriptionJobStatus.FAILED)
{
transcriptionJob =
await transcribeWrapper.GetTranscriptionJob(transcriptionName);
Thread.Sleep(5000);
}
Console.WriteLine($"Transcription status: {transcriptionJob.TranscriptionJobStatus}, " +
$"completed at: {transcriptionJob.CompletionTime}.");
评论
0赞
Leon
6/23/2023
谢谢。OenAI API 没有这个问题。我实际上实现了这一点并在一个单独的线程上调用 - 然后等到它完成......
上一个:从回调方法内部填充类变量
下一个:引用与回调(提供程序/工厂)
评论