Живая транскрипция из сетевого потока с использованием Microsoft.CognitiveServices.Speech - PullRequest
0 голосов
/ 23 марта 2020

Мы планируем PO C, где мы передадим многоадресный поток, скажем, пресс-конференции в SpeechRecognizer, в надежде получить «живую» стенограмму, которую мы могли бы затем использовать для живых субтитров. Пока что я вижу две проблемы с этим:

Во-первых, я не знаю, как «захватить» многоадресный поток и передать его в SpeechRecognizer. Если кто-то захочет поделиться примером кода, показывающим, как это сделать (желательно в C#), это будет очень полезно.

Другое дело, что касается времени. Я провел некоторое предварительное тестирование с использованием ввода mi c, и когда речь более или менее непрерывна, сервис обрабатывает довольно большие куски речи за раз, что приводит к значительной задержке, прежде чем я получу что-либо обратно, что не будет идеально подходит в сценарии с живыми субтитрами. Есть ли какие-то настройки, которые я могу использовать, чтобы изменить «гранулярность» для более частого возврата более мелких фрагментов (если это имеет смысл)?

Любой и все входные данные будут высоко оценены.

Ответы [ 2 ]

1 голос
/ 23 марта 2020

извините, нет опыта работы с многоадресными потоками.

Для распознавания речи вы можете подписаться на окончательные результаты и промежуточные результаты во время непрерывного распознавания. Окончательные результаты создаются, когда механизм распознавания речи распознает «сегмент» речи. Гораздо чаще вы будете получать промежуточные события распознавания, которые дают промежуточные результаты о процессе распознавания речи. Они могут измениться во время распознавания, но вы увидите, что они становятся все более и более «стабильными» в процессе распознавания речи.

Вольфганг

0 голосов
/ 23 марта 2020

Как упомянул Вольфганг выше, для непрерывной речи вы можете подписаться на событие Recognizing, чтобы получать периодические c обновления прогнозируемого речевого текста. Событие Recognized сработает, когда Azure Speech Service определит, что пользователь прекратил говорить.

Пример:

    var microphone = string.IsNullOrEmpty(file);
    var audio = microphone
        ? AudioConfig.FromDefaultMicrophoneInput()
        : AudioConfig.FromWavFileInput(file);

    var config = SpeechConfig.FromSubscription(key, region);
    var recognizer = new SpeechRecognizer(config);

    recognizer.SessionStarted += SessionStarted;
    recognizer.SessionStopped += SessionStopped;
    recognizer.Recognizing += Recognizing;
    recognizer.Recognized += Recognized;
    recognizer.Canceled += Canceled;

    recognizer.StartContinuousRecognitionAsync().Wait();
    if (microphone) { Console.WriteLine("Listening; press ENTER to stop ...\n"); }

    var timeout = _values.GetOrDefault("recognize.timeout", _microphone ? 30000 : int.MaxValue);
    WaitForContinuousStopCancelKeyOrTimeout(recognizer, timeout);

    recognizer.StopContinuousRecognitionAsync().Wait();

с такими обработчиками событий:

    private void Recognizing(object sender, SpeechRecognitionEventArgs e)
    {
        Console.WriteLine($"RECOGNIZING: {e.Result.Text}");
    }

    private void Recognized(object sender, SpeechRecognitionEventArgs e)
    {
        var result = e.Result;
        if (result.Reason == ResultReason.RecognizedSpeech && result.Text.Length != 0)
        {
            Console.WriteLine($"RECOGNIZED: {result.Text}");
            Console.WriteLine();
        }
        else if (result.Reason == ResultReason.NoMatch && _verbose)
        {
            Console.WriteLine($"NOMATCH: Speech could not be recognized.");
            Console.WriteLine();
        }
    }

При запуске я произнес фразу «Меня зовут Роб Чамберс, и это тест распознавания речи ", вывод появляется очень быстро (в пределах 700-1000 мс каждого слова, которое я произнес):

    Listening; press ENTER to stop ...

    RECOGNIZING: my
    RECOGNIZING: my name
    RECOGNIZING: my name is
    RECOGNIZING: my name
    RECOGNIZING: my name is
    RECOGNIZING: my name is rob
    RECOGNIZING: my name is rob chambers
    RECOGNIZING: my name is rob chambers and
    RECOGNIZING: my name is rob chambers and this
    RECOGNIZING: my name is rob chambers and this
    RECOGNIZING: my name is rob chambers and this is
    RECOGNIZING: my name is rob chambers and this is
    RECOGNIZING: my name is rob chambers and this is a
    RECOGNIZING: my name is rob chambers and this is a test
    RECOGNIZING: my name is rob chambers and this is a test of
    RECOGNIZING: my name is rob chambers and this is a test of speech
    RECOGNIZING: my name is rob chambers and this is a test of
    RECOGNIZING: my name is rob chambers and this is a test of speech
    RECOGNIZING: my name is rob chambers and this is a test of speech recognition
    RECOGNIZED: My name is Rob Chambers and this is a test of speech recognition.

Когда я произнес почти одну и ту же фразу, но в виде двух предложений с очень короткой паузой между ними вывод выглядит следующим образом:

    Listening; press ENTER to stop ...

    RECOGNIZING: my
    RECOGNIZING: my name
    RECOGNIZING: my name is
    RECOGNIZING: my name is
    RECOGNIZING: my name is rob
    RECOGNIZING: my name is rob chambers
    RECOGNIZED: My name is Rob Chambers.

    RECOGNIZING: this
    RECOGNIZING: this is a
    RECOGNIZING: this is a test
    RECOGNIZING: this is a test of
    RECOGNIZING: this is a test of speech
    RECOGNIZING: this is a test of speech recognition
    RECOGNIZED: This is a test of speech recognition.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...