【问题标题】:.Audio Timeout Error: NET Core Google Speech to Text Code Causing Timeout.Audio Timeout 错误:NET Core Google Speech to Text 代码导致超时
【发布时间】:2018-03-08 06:42:44
【问题描述】:

问题描述

我是一名 .NET Core 开发人员,最近有人要求我将大约 20 分钟长的 mp3 音频文件转录为文本。因此,该文件约为 30.5mb。问题是该文件中的语音很稀疏,在口语句子之间的 2 分钟或 4 分钟的长度之间变化。

我已经编写了一个基于 google 语音文档的小型服务,它一次发送 32kb 的流数据以从文件中进行处理。一切进展顺利,直到我遇到了这个错误,我在下面分享如下:

我通过 google-fu、google 论坛和其他来源进行了搜索,但没有遇到有关此错误的文档。我只想说,我认为这是由于我的文件中口语稀少吗?我想知道是否有以编程为中心的解决方法?

代码

我使用了一些代码,它是对 32kb 流的 google .net 示例的轻微修改。你可以在这里找到它。

 public async void Run()
 {

            var speech = SpeechClient.Create();
            var streamingCall = speech.StreamingRecognize();
            // Write the initial request with the config.
            await streamingCall.WriteAsync(
                new StreamingRecognizeRequest()
                {
                    StreamingConfig = new StreamingRecognitionConfig()
                    {
                        Config = new RecognitionConfig()
                        {
                            Encoding =
                            RecognitionConfig.Types.AudioEncoding.Flac,
                            SampleRateHertz = 22050,
                            LanguageCode = "en",
                        },
                        InterimResults = true,
                    }
                });



            // Helper Function: Print responses as they arrive.
            Task printResponses = Task.Run(async () =>
            {
                while (await streamingCall.ResponseStream.MoveNext(
                    default(CancellationToken)))
                {
                    foreach (var result in streamingCall.ResponseStream.Current.Results)
                    {

                        //foreach (var alternative in result.Alternatives)
                        //{
                        //    Console.WriteLine(alternative.Transcript);
                        //}
                        if(result.IsFinal)
                        {
                            Console.WriteLine(result.Alternatives.ToString());
                        }
                    }
                }

            });

            string filePath = "mono_1.flac";
            using (FileStream fileStream = new FileStream(filePath, FileMode.Open))
            {
                //var buffer = new byte[32 * 1024];
                var buffer = new byte[64 * 1024]; //Trying 64kb buffer 
                int bytesRead;
                while ((bytesRead = await fileStream.ReadAsync(
                    buffer, 0, buffer.Length)) > 0)
                {
                    await streamingCall.WriteAsync(
                        new StreamingRecognizeRequest()
                        {
                            AudioContent = Google.Protobuf.ByteString
                            .CopyFrom(buffer, 0, bytesRead),
                        });
                    await Task.Delay(500);
                };
            }
            await streamingCall.WriteCompleteAsync();
            await printResponses;


        }//End of Run 

尝试

我已将要处理的流数据流增加到 64kb,然后收到以下错误,如下所示:

我相信这意味着实际的 api 超时。这绝对是朝着错误方向迈出的一步。在处理语音稀疏的音频文件时,是否有人遇到过像我这样的问题?有没有一种方法可以让我将音频过滤到只有口语,然后进行处理?我愿意接受建议,但我的研究和尝试只会让我进一步破坏我的代码。

【问题讨论】:

标签: google-api .net-core speech-to-text google-speech-api


【解决方案1】:

在 Google Speech API 中有识别音频的方法:

  • 正常识别
  • 长时间运行识别

您的示例使用的是正常识别,它有 15 分钟的限制。 尝试使用long识别方法:

    {
        var speech = SpeechClient.Create();
        var longOperation = speech.LongRunningRecognize( new RecognitionConfig()
        {
            Encoding = RecognitionConfig.Types.AudioEncoding.Linear16,
            SampleRateHertz = 16000,
            LanguageCode = "hu",
        }, RecognitionAudio.FromFile( filePath ) );
        longOperation = longOperation.PollUntilCompleted();
        var response = longOperation.Result;
        foreach ( var result in response.Results )
        {
            foreach ( var alternative in result.Alternatives )
            {
                Console.WriteLine( alternative.Transcript );
            }
        }
        return 0;
    }

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    相关资源
    最近更新 更多