我是.NET Core开发人员,最近我被要求将大约20分钟的mp3音频文件转录成文本。因此,该文件约为30.5mb。问题是该文件中的语音稀疏,在口语句子或4分钟长度之间的2分钟内变化。
我根据谷歌语音文档编写了一项小型服务,该文档一次发送32kb流数据以便从文件中处理。一切进展顺利,直到我点击下面分享的错误如下:
我通过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要处理的流数据,然后我收到以下错误,如下所示:
我认为,这意味着实际的api超时。这决定了朝着错误方向迈出的一步。在处理语音稀疏的音频文件时,有没有人遇到像谷歌语音Api这样的问题?有没有一种方法可以将音频过滤到只能说出来的单词,然后进行处理?我愿意接受建议,但我的研究和尝试只会让我进一步破坏我的代码。
答案 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;
}
我希望它对你有所帮助。