Multiple StreamingRecognizeRequest - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь настроить StreamingRecognize , с несколькими запросами.Возможно ли это?

Дело в том, что я хочу отправить аудиопоток с микрофона с неизвестным временем, поэтому я думаю, что должен реализовать несколько запросов.(Учитывая, что сеанс запроса имеет max_time = 65 секунд).

Кто-нибудь может мне помочь с этим?

Спасибо большое;)

Пример кода Google:

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 Ответ

0 голосов
/ 13 июня 2018

В облаке Речь-к-тексту ограничение длины звука для каждого запроса потоковой передачи составляет около 1 минуты [1] .Вы можете использовать асинхронное распознавание речи [2] для аудиофайлов до 180 минут или обновить запрос на потоковую передачу до того, как он достигнет предела времени для распознавания потоковой речи [3] .

Вот пример Python, как возобновить потоковый запрос и потоковое аудио более 1 минуты [4] .

...