【发布时间】: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 超时。这绝对是朝着错误方向迈出的一步。在处理语音稀疏的音频文件时,是否有人遇到过像我这样的问题?有没有一种方法可以让我将音频过滤到只有口语,然后进行处理?我愿意接受建议,但我的研究和尝试只会让我进一步破坏我的代码。
【问题讨论】:
-
@DalmTo 感谢您的回复。我会详细阅读。文档似乎以 python/go/java 为中心,但 .NET api 中肯定有类似的钩子吗?
-
API 与您使用的库处理它的方式相同。您正在使用哪个 nuget 包
标签: google-api .net-core speech-to-text google-speech-api