.Audio Timeout Error:NET Core Google语音到文本代码导致超时

时间:2018-01-17 04:25:11

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

问题描述

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

我根据谷歌语音文档编写了一项小型服务,该文档一次发送32kb流数据以便从文件中处理。一切进展顺利,直到我点击下面分享的错误如下:

enter image description here

我通过google-fu,google论坛和其他来源搜索过,我没有遇到过关于此错误的文档。我只想说,我认为这是由于我的档案中说出的话语稀疏了?我想知道是否有一个以程序为中心的解决方案?

代码

我使用了一些代码,这些代码稍微修改了google .net示例,用于32kb流媒体。你可以在这里找到它。

 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要处理的流数据,然后我收到以下错误,如下所示:

enter image description here

我认为,这意味着实际的api超时。这决定了朝着错误方向迈出的一步。在处理语音稀疏的音频文件时,有没有人遇到像谷歌语音Api这样的问题?有没有一种方法可以将音频过滤到只能说出来的单词,然后进行处理?我愿意接受建议,但我的研究和尝试只会让我进一步破坏我的代码。

1 个答案:

答案 0 :(得分:0)

可以在Google Speech API中识别音频:

  • 正常识别
  • 长跑认识

您的样本使用正常识别,其限制为15分钟。 尝试使用长识别方法:

    {
        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;
    }

我希望它对你有所帮助。