微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure 语音到文本转录不会连续运行

如何解决Azure 语音到文本转录不会连续运行

我最初运行的是 Azure 语音到文本模型,该模型可从文件中转录最多 15 秒的语音。现在我试图把它变成一个可以转录更长话语的模型,但该模型仍然在 15 秒的演讲中被切断。代码是:

using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

namespace nesT {
    class Program {
        static async Task Main(string[] args) {
            await StartContinuousRecognitionAsync();
        }

        static async Task StartContinuousRecognitionAsync() {
            // Configure the subscription information for the service to access.
            // Use either key1 or key2 from the Speech Service resource you have created
            var config = SpeechConfig.FromSubscription("subscriptionkey","region");

            // Setup the audio configuration,in this case,using a file that is in local storage.
            using(var audioInput = AudioConfig.FromWavFileInput("C:/Users/MichaelSchwartz/source/repos/AI-102-Process-Speech-master/transcribe_speech_to_text/media/spkr1.wav"))

            // Pass the required parameters to the Speech Service which includes the configuration information
            // and the audio file name that you will use as input
            using(var recognizer = new SpeechRecognizer(config,audioInput)) {
                Console.WriteLine("Recognizing first result...");
                var result = await recognizer.StartContinuousRecognitionAsync();

                switch (result.Reason) {
                case ResultReason.RecognizedSpeech:
                    // The file contained speech that was recognized and the transcription will be output
                    // to the terminal window
                    Console.WriteLine($"We recognized: {result.Text}");
                    break;
                case ResultReason.NoMatch:
                    // No recognizable speech found in the audio file that was supplied.
                    // Out an informative message
                    Console.WriteLine($"NOMATCH: Speech Could not be recognized.");
                    break;
                case ResultReason.Canceled:
                    // Operation was cancelled
                    // Output the reason
                    var cancellation = CancellationDetails.Fromresult(result);
                    Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

                    if (cancellation.Reason == CancellationReason.Error) {
                        Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
                        Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
                        Console.WriteLine($"CANCELED: Did you update the subscription info?");
                    }
                    break;
                }
            }
        }
    }
}

返回的错误是:

不能将 void 分配给隐式类型变量 [nesT]csharp(CS0815)。

我如何解决这个问题并转录超过 15 秒的话语?提前致谢。

解决方法

不确定您使用的是哪个版本的 SDK,但官方文档使用 Delegates 而不是 result.Reason,因为它在您的代码中。

using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var recognizer = new SpeechRecognizer(speechConfig,audioConfig);

var stopRecognition = new TaskCompletionSource<int>();

recognizer.Recognizing += (s,e) =>
{
    Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};

recognizer.Recognized += (s,e) =>
{
    if (e.Result.Reason == ResultReason.RecognizedSpeech)
    {
        Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
    }
    else if (e.Result.Reason == ResultReason.NoMatch)
    {
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
    }
};

recognizer.Canceled += (s,e) =>
{
    Console.WriteLine($"CANCELED: Reason={e.Reason}");

    if (e.Reason == CancellationReason.Error)
    {
        Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
        Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
        Console.WriteLine($"CANCELED: Did you update the subscription info?");
    }

    stopRecognition.TrySetResult(0);
};

recognizer.SessionStopped += (s,e) =>
{
    Console.WriteLine("\n    Session stopped event.");
    stopRecognition.TrySetResult(0);
};

await recognizer.StartContinuousRecognitionAsync();

// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });

https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/get-started-speech-to-text?tabs=windowsinstall&pivots=programming-language-csharp

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。