Я использую Google Speech API для C # и использую LongRunningRecognize для получения таких результатов:
var speech = SpeechClient.Create();
var longOperation = speech.LongRunningRecognize(new RecognitionConfig()
{
Encoding = GlobalVariables.Encoding,
SampleRateHertz = GlobalVariables.SampleRateHz,
LanguageCode = GlobalVariables.Language,
}, RecognitionAudio.FromStorageUri("gs://bucketname/" + TargetFileName));
longOperation = longOperation.PollUntilCompleted();
var response = longOperation.Result;
StringBuilder tw = new StringBuilder();
foreach (var result in response.Results)
{
foreach (var alternative in result.Alternatives)
{
Console.WriteLine($"Transcript: { alternative.Transcript}");
tw.AppendLine(alternative.Transcript);
}
}
TranslatedText = tw.ToString();
Это хорошо работает, и я получаю результаты - но: я использую довольно большойфайлы (около 20-30 минут аудио файлов), и я хотел бы видеть промежуточные результаты.Поэтому я понял, что могу просто использовать асинхронный метод как-то так:
Task analyze = Task.Run(async () =>
{
var speech = SpeechClient.Create();
Task<Operation<LongRunningRecognizeResponse, LongRunningRecognizeMetadata>> longOperation = speech.LongRunningRecognizeAsync(new RecognitionConfig()
{
Encoding = GlobalVariables.Encoding,
SampleRateHertz = GlobalVariables.SampleRateHz,
LanguageCode = GlobalVariables.Language,
}, RecognitionAudio.FromStorageUri("gs://bucketname/" + TargetFileName));
while (!longOperation.IsCompleted)
{
if(longOperation.Result != null && longOperation.Result.Metadata != null)
{
LongRunningRecognizeMetadata meta = longOperation.Result.Metadata;
ProgressValue = meta.ProgressPercent;
//Add results to variable "TranslatedText" here -how?
}
}
});
await analyze;
Я не могу заставить это работать, хотя речевой API не очень хорошо документирован в этом случае, по крайней мере,Я не нашел ничего такого, что могло бы охватить такую ситуацию.
Может ли кто-нибудь помочь мне в этом?
Спасибо!