Multiple StreamingRecognizeRequest

馋奶兔 提交于 2020-01-16 13:47:08

问题


I'm trying to setup a StreamingRecognize, with multiple request's. Is it possible ?

The point is that i want to send audio stream from the mic with a unknown time, so i think that i must implement multiple requests. (Considering that a request session has a max_time = 65 seconds).

Anyone can help me with this ?

Thank's alot ;)

Google sample code:

static async Task<object> StreamingMicRecognizeAsync(int seconds)
{
if (NAudio.Wave.WaveIn.DeviceCount < 1)
{
    Console.WriteLine("No microphone!");
    return -1;
}
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.Linear16,
                SampleRateHertz = 16000,
                LanguageCode = "en",
            },
            InterimResults = true,
        }
    });
// 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);
            }
        }
    }
});
// Read from the microphone and stream to API.
object writeLock = new object();
bool writeMore = true;
var waveIn = new NAudio.Wave.WaveInEvent();
waveIn.DeviceNumber = 0;
waveIn.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1);
waveIn.DataAvailable +=
    (object sender, NAudio.Wave.WaveInEventArgs args) =>
    {
        lock (writeLock)
        {
            if (!writeMore) return;
            streamingCall.WriteAsync(
                new StreamingRecognizeRequest()
                {
                    AudioContent = Google.Protobuf.ByteString
                        .CopyFrom(args.Buffer, 0, args.BytesRecorded)
                }).Wait();
        }
    };
waveIn.StartRecording();
Console.WriteLine("Speak now.");
await Task.Delay(TimeSpan.FromSeconds(seconds));
// Stop recording and shut down.
waveIn.StopRecording();
lock (writeLock) writeMore = false;
await streamingCall.WriteCompleteAsync();
await printResponses;
return 0;

}


回答1:


In Cloud Speech-to-Text audio length limit for each streaming request is around 1 minute [1]. You can either use asynchronous speech recognition [2] for audio files up to 180 minutes or renew the streaming request before it reaches to the time limit for streaming speech recognition [3].

Here is a Python example how to renew streaming request and stream audio more than 1 minute [4].



来源:https://stackoverflow.com/questions/50823924/multiple-streamingrecognizerequest

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!