Поделиться через


Краткое руководство. Распознавание речи с помощью пакета SDK службы "Речь" для .NET Core

Справочные примеры пакета документации | (NuGet) | Дополнительные примеры на GitHub

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Создание экземпляра конфигурации речи

Чтобы вызвать службу "Речь" с помощью пакета SDK для службы "Речь", необходимо создать экземпляр SpeechConfig. Этот класс содержит сведения о вашей подписке, такие как ключ и связанный регион, конечная точка, узел или маркер авторизации.

  1. Создайте ресурс службы "Речь" в портал Azure. Получение ключа ресурса службы "Речь" и региона.
  2. SpeechConfig Создайте экземпляр с помощью следующего кода. Замените и замените YourSpeechKey ключ ресурса службы "Речь" и YourSpeechRegion регион.
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
    }
}

Инициализировать SpeechConfig можно несколькими способами:

  • Используйте конечную точку и передайте конечную точку службы "Речь". Ключ или маркер авторизации являются необязательными.
  • Используйте узел и передайте адрес узла. Ключ или маркер авторизации являются необязательными.
  • Используйте маркер авторизации с соответствующим регионом или расположением.

Примечание.

Независимо от того, выполняется ли распознавание речи, синтез речи, перевод или распознавание намерений, всегда создается конфигурация.

Распознавание речи с микрофона

Чтобы распознать речь с помощью микрофона устройства, создайте AudioConfig экземпляр с помощью FromDefaultMicrophoneInput() метода. Затем инициализировать объект путем передачи SpeechRecognizer speechConfig и audioConfig.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromMic(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        Console.WriteLine("Speak into your microphone.");
        var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromMic(speechConfig);
    }
}

Если необходимо использовать конкретное входное аудиоустройство, необходимо указать код устройства в AudioConfig. Сведения о том, как получить идентификатор устройства, см. в разделе "Выбор звукового устройства ввода" с помощью пакета SDK службы "Речь".

по распознаванию речи из файла

Чтобы распознавать речь из звукового файла, а не с микрофона, вам все равно нужно создать экземпляр AudioConfig. Тем не менее, вы не вызываете FromDefaultMicrophoneInput(). Вы вызываете FromWavFileInput() и передаете путь к файлу:

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromFile(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromFile(speechConfig);
    }
}

Распознавание речи из потока в памяти

Для многих вариантов использования, скорее всего, ваши звуковые данные приходят из Хранилище BLOB-объектов Azure, или в противном случае уже в памяти byte[] как экземпляр или аналогичную структуру необработанных данных. В следующем примере используется PushAudioInputStream для распознавания речи, который фактически представляет собой абстрактный поток памяти. Пример кода выполняет следующие действия:

  • Записывает необработанные звуковые данные PushAudioInputStream с помощью Write() функции, которая принимает byte[] экземпляр.
  • Считывает файл .wav с помощью FileReader демонстрационных целей. но если у вас уже есть звуковые данные в экземпляре byte[], можно сразу перейти к записи содержимого во входной поток.
  • Формат по умолчанию — 16-разрядные, 16-кГц моно импульсно-кодовые данные модуляции (PCM). Чтобы настроить формат, можно передать объект AudioStreamFormat в CreatePushStream() с использованием статической функции AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels).
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromStream(SpeechConfig speechConfig)
    {
        var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
        using var audioConfigStream = AudioInputStream.CreatePushStream();
        using var audioConfig = AudioConfig.FromStreamInput(audioConfigStream);
        using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        byte[] readBytes;
        do
        {
            readBytes = reader.ReadBytes(1024);
            audioConfigStream.Write(readBytes, readBytes.Length);
        } while (readBytes.Length > 0);

        var speechRecognitionResult = await speechRecognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourSpeechRegion");
        await FromStream(speechConfig);
    }
}

При использовании push-потока в качестве входных данных предполагается, что звуковые данные являются необработанными PCM и пропускают все заголовки. API по-прежнему работает в некоторых случаях, если заголовок не пропущен. Для получения наилучших результатов рекомендуется реализовать логику для считывания заголовков, чтобы byte[] начаться в начале звуковых данных.

Обработка ошибок

В предыдущих примерах из свойства получается только распознанный текст speechRecognitionResult.Text . но, чтобы обработать ошибки и другие ответы, необходимо написать код для обработки результата. Следующий код вычисляет свойство speechRecognitionResult.Reason и:

  • Выводит результат распознавания: ResultReason.RecognizedSpeech.
  • Если распознавание не соответствует, он сообщает пользователю: ResultReason.NoMatch
  • Если возникла ошибка, выводится сообщение об ошибке: ResultReason.Canceled
switch (speechRecognitionResult.Reason)
{
    case ResultReason.RecognizedSpeech:
        Console.WriteLine($"RECOGNIZED: Text={speechRecognitionResult.Text}");
        break;
    case ResultReason.NoMatch:
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled:
        var cancellation = CancellationDetails.FromResult(speechRecognitionResult);
        Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

        if (cancellation.Reason == CancellationReason.Error)
        {
            Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
            Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
            Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
        }
        break;
}

Использование непрерывного распознавания

В предыдущих примерах используется одноразовое распознавание, которое распознает один речевой фрагмент. Конец одного речевого фрагмента определяется путем прослушивания до тишины в конце, или пока не будет обработано максимум 15 секунд аудио.

Непрерывное распознавание функционирует иначе. Оно используется, если требуется контролировать, когда следует остановить распознавание. Для получения результатов распознавания необходимо подписаться на события Recognizing, Recognizedи Canceled. Чтобы отключить распознавание, необходимо вызвать StopContinuousRecognitionAsync. Ниже приведен пример того, как выполняется непрерывное распознавание входного аудиофайла.

Начните с определения входных данных и инициализации SpeechRecognizer:

using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

Затем создайте TaskCompletionSource<int> для управления состоянием распознавания речи:

var stopRecognition = new TaskCompletionSource<int>();

Теперь подпишитесь на события, которые отправляет SpeechRecognizer:

  • Recognizing: сигнал для событий, содержащих промежуточные результаты распознавания.
  • Recognized: сигнал для событий, содержащих окончательные результаты распознавания (указывает на успешность попытки распознавания).
  • SessionStopped: сигнал для событий, указывающих на окончание сеанса (операции) распознавания.
  • Canceled: сигнал для событий, содержащих отмененные результаты распознавания. Эти результаты указывают на попытку распознавания, которая была отменена в результате прямого запроса на отмену. Они также могут указывать на сбой транспорта или протокола.
speechRecognizer.Recognizing += (s, e) =>
{
    Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};

speechRecognizer.Recognized += (s, e) =>
{
    if (e.Result.Reason == ResultReason.RecognizedSpeech)
    {
        Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
    }
    else if (e.Result.Reason == ResultReason.NoMatch)
    {
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
    }
};

speechRecognizer.Canceled += (s, e) =>
{
    Console.WriteLine($"CANCELED: Reason={e.Reason}");

    if (e.Reason == CancellationReason.Error)
    {
        Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
        Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
        Console.WriteLine($"CANCELED: Did you set the speech resource key and region values?");
    }

    stopRecognition.TrySetResult(0);
};

speechRecognizer.SessionStopped += (s, e) =>
{
    Console.WriteLine("\n    Session stopped event.");
    stopRecognition.TrySetResult(0);
};

Завершив настройку, вызовите StartContinuousRecognitionAsync, чтобы начать распознавание:

await speechRecognizer.StartContinuousRecognitionAsync();

// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });

// Make the following call at some point to stop recognition:
// await speechRecognizer.StopContinuousRecognitionAsync();

Изменение исходного языка

Распространенной задачей распознавания речи является указание языка ввода (или исходного языка). В следующем примере показано, как изменить язык ввода на итальянский. В своем коде найдите экземпляр SpeechConfig, а затем добавьте непосредственно под ним следующую строку:

speechConfig.SpeechRecognitionLanguage = "it-IT";

Свойство SpeechRecognitionLanguage принимает строку формата языкового стандарта. Список поддерживаемых языковых стандартов см. в разделе "Язык" и "Голосовая поддержка" службы "Речь".

Идентификация языка

Вы можете использовать идентификацию языка с речью для распознавания текста, если необходимо определить язык в источнике звука, а затем переписать его в текст.

Полный пример кода см. в разделе "Идентификация языка".

Использование пользовательской конечной точки

С помощью пользовательской речи можно отправлять собственные данные, тестировать и обучать пользовательскую модель, сравнивать точность между моделями и развертывать модель в настраиваемую конечную точку. В следующем примере показано, как настроить пользовательскую конечную точку.

var speechConfig = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.EndpointId = "YourEndpointId";
var speechRecognizer = new SpeechRecognizer(speechConfig);

Запуск и использование контейнера

Контейнеры службы "Речь" предоставляют API конечных точек запросов на основе websocket, к которым обращается пакет SDK службы "Речь" и CLI службы "Речь". По умолчанию пакет SDK службы "Речь" и cli службы "Речь" используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.

Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.

Изменение способа обработки тишины

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

  • Быстрая речь, которая объединяет множество предложений в один результат распознавания, а не разбиение предложений в отдельные результаты.
  • Медленная речь, которая разделяет части одного предложения на несколько результатов.
  • Однократное распознавание, которое заканчивается слишком быстро, ожидая начала речи.

Эти проблемы можно устранить, задав одно из двух свойств времени ожидания в экземпляре, используемом SpeechConfig для создания SpeechRecognizer:

  • Время ожидания молчания сегментации корректирует, сколько неписуемых аудио разрешено в фразе, которая в настоящее время говорится до того, как эта фраза считается "готово".
    • Более высокие значения обычно делают результаты более длинными и позволяют более длинные паузы от говорящего в фразе, но сделать результаты более длинными, чтобы прибыть. Они также могут объединять отдельные фразы в один результат при слишком высоком значении.
    • Более низкие значения обычно делают результаты более короткими и обеспечивают более быстрые и частые разрывы между фразами, но также могут привести к разделять отдельные фразы на несколько результатов при слишком низком значении.
    • Это время ожидания можно задать для целочисленных значений от 100 до 5000 в миллисекундах с 500 стандартным значением по умолчанию.
  • Начальное время ожидания молчания корректирует, сколько неписучего звука разрешено перед фразой, прежде чем попытка распознавания заканчивается в результате "без совпадения".
    • Более высокие значения дают ораторам больше времени реагировать и начать говорить, но также может привести к медленной реакции, когда ничего не говорится.
    • Более низкие значения гарантируют, что запрос "не соответствует" для более быстрого взаимодействия с пользователем и более управляемой обработки звука, но может отрезать динамик слишком быстро при установке слишком низкого уровня.
    • Так как непрерывное распознавание создает множество результатов, это значение определяет частоту поступления результатов "без соответствия", но не влияет на содержимое результатов распознавания.
    • Это время ожидания может быть задано как любое неотрицательное целое значение, в миллисекундах или значение 0, чтобы полностью отключить его. 5000 — это типичное значение по умолчанию для однокамерного распознавания, в то время как 15000 является типичным по умолчанию для непрерывного распознавания.

Так как при изменении этих тайм-аутов существуют компромиссы, следует изменять параметры только при возникновении проблемы, связанной с обработкой молчания. Значения по умолчанию оптимально обрабатывают большинство речевых звуков, и при возникновении проблем могут возникнуть только редкие сценарии.

Пример. Пользователи, говорящие с серийным номером, например ABC-123-4567, могут приостановиться между группами символов достаточно долго, чтобы серийный номер был разбит на несколько результатов. В этом случае попробуйте использовать более высокое значение, например 2000 миллисекунда для времени ожидания молчания сегментации:

speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "2000");

Пример: речь записанного докладчика может быть достаточно быстрой, чтобы несколько предложений в строке сочетались, с большими результатами распознавания только один или два раза в минуту. В этом случае задайте для времени ожидания молчания сегментации меньшее значение, например 300 мс:

speechConfig.SetProperty(PropertyId.Speech_SegmentationSilenceTimeoutMs, "300");

Пример: однозастрелочное распознавание с просьбой говорящего найти и прочитать серийный номер заканчивается слишком быстро, пока число найдено. В этом случае попробуйте более длительное время ожидания молчания, например 10 000 мс:

speechConfig.SetProperty(PropertyId.SpeechServiceConnection_InitialSilenceTimeoutMs, "10000");

Семантическая сегментация

Семантическая сегментация — это стратегия сегментации распознавания речи, предназначенная для устранения проблем, связанных с сегментацией на основе молчания:

  • Недостаточно сегментация: когда пользователи говорят долго без приостановки, они могут видеть длинную последовательность текста без разрывов ("стены текста"), что значительно снижает их удобочитаемость.
  • Чрезмерное сегментирование. Когда пользователь приостанавливается в течение короткого времени, механизм обнаружения молчания может сегментирование неправильно.

Вместо того чтобы полагаться на время ожидания молчания, сегменты семантической сегментации и возвращают окончательные результаты при обнаружении препинания предложения (например, ""." или "?"). Это улучшает взаимодействие с пользователем с более высоким качеством, семантически завершенными сегментами и предотвращает длительные промежуточные результаты.

Чтобы использовать семантику сегментации, необходимо задать следующее свойство в экземпляре, используемом SpeechConfig для создания SpeechRecognizer:

speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");

Ниже приведены некоторые ограничения семантической сегментации.

  • Для использования семантической сегментации необходимо использовать пакет SDK службы "Речь" версии 1.41 или более поздней.
  • Семантическая сегментация предназначена только для использования в непрерывном распознавании. К ним относятся такие сценарии, как транскрибирование и субтитры. Его нельзя использовать в одном режиме распознавания и диктовки.
  • Семантическая сегментация недоступна для всех языков и языковых стандартов. В настоящее время семантическая сегментация доступна только для языковых стандартов английского языка (en), таких как en-US, en-GB, en-IN и en-AU.
  • Семантическая сегментация пока не поддерживает оценки достоверности и списки NBest. Таким образом, мы не рекомендуем семантику сегментации, если вы используете оценки достоверности или списки NBest.

Справочные примеры пакета документации | (NuGet) | Дополнительные примеры на GitHub

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Создание экземпляра конфигурации речи

Чтобы вызвать службу "Речь" с помощью пакета SDK для службы "Речь", необходимо создать экземпляр SpeechConfig. Этот класс содержит сведения о вашей подписке, такие как ключ и связанный регион, конечная точка, узел или маркер авторизации.

  1. Создайте ресурс службы "Речь" в портал Azure. Получение ключа ресурса службы "Речь" и региона.
  2. SpeechConfig Создайте экземпляр с помощью следующего кода. Замените и замените YourSpeechKey ключ ресурса службы "Речь" и YourSpeechRegion регион.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;

auto speechConfig = SpeechConfig::FromSubscription("YourSpeechKey", "YourSpeechRegion");

Инициализировать SpeechConfig можно несколькими способами:

  • Используйте конечную точку и передайте конечную точку службы "Речь". Ключ или маркер авторизации являются необязательными.
  • Используйте узел и передайте адрес узла. Ключ или маркер авторизации являются необязательными.
  • Используйте маркер авторизации с соответствующим регионом или расположением.

Примечание.

Независимо от того, выполняется ли распознавание речи, синтез речи, перевод или распознавание намерений, всегда создается конфигурация.

Распознавание речи с микрофона

Чтобы распознать речь с помощью микрофона устройства, создайте AudioConfig экземпляр с помощью FromDefaultMicrophoneInput() функции-члена. Затем инициализировать объект путем передачиSpeechRecognizer audioConfig и config.

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

cout << "Speak into your microphone." << std::endl;
auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

Если необходимо использовать конкретное входное аудиоустройство, необходимо указать код устройства в AudioConfig. Сведения о том, как получить идентификатор устройства, см. в разделе "Выбор звукового устройства ввода" с помощью пакета SDK службы "Речь".

по распознаванию речи из файла

Чтобы распознавать речь из аудиофайла, а не с помощью микрофона, вам все равно нужно создать экземпляр AudioConfig. Тем не менее, вы не вызываете FromDefaultMicrophoneInput(). Вы вызываете FromWavFileInput() и передаете путь к файлу:

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

auto result = speechRecognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

Распознавание речи с помощью класса распознавателя

Класс распознавателя для пакета SDK службы "Речь" для C++ предоставляет несколько методов, которые можно использовать для распознавания речи.

Одноразовое распознавание

Под одноразовым распознаванием подразумевается асинхронное распознавание отдельного речевого фрагмента. Конец одного речевого фрагмента определяется путем прослушивания до тишины в конце, или пока не будет обработано максимум 15 секунд аудио. Ниже приведен пример асинхронного одноразового распознавания с помощью RecognizeOnceAsync:

auto result = speechRecognizer->RecognizeOnceAsync().get();

Вам будет необходимо написать код для обработки результата. В этом примере вычисляется result->Reason и:

  • Выводит результат распознавания: ResultReason::RecognizedSpeech.
  • Если распознавание не соответствует, он сообщает пользователю: ResultReason::NoMatch
  • Если возникла ошибка, выводится сообщение об ошибке: ResultReason::Canceled
switch (result->Reason)
{
    case ResultReason::RecognizedSpeech:
        cout << "We recognized: " << result->Text << std::endl;
        break;
    case ResultReason::NoMatch:
        cout << "NOMATCH: Speech could not be recognized." << std::endl;
        break;
    case ResultReason::Canceled:
        {
            auto cancellation = CancellationDetails::FromResult(result);
            cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error) {
                cout << "CANCELED: ErrorCode= " << (int)cancellation->ErrorCode << std::endl;
                cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
                cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
            }
        }
        break;
    default:
        break;
}

Непрерывное распознавание

Непрерывное распознавание является более сложным, чем одноразовое. Для получения результатов распознавания необходимо подписаться на события Recognizing, Recognizedи Canceled. Чтобы отключить распознавание, необходимо вызвать StopContinuousRecognitionAsync. Ниже приведен пример непрерывного распознавания, выполняемого в звуковом входном файле.

Начните с определения входных данных и инициализации SpeechRecognizer:

auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto speechRecognizer = SpeechRecognizer::FromConfig(config, audioConfig);

Теперь создайте переменную для управления состоянием распознавания речи. Объявите promise<void>, так как в начале распознавания можно смело предположить, что оно не закончено:

promise<void> recognitionEnd;

Теперь подпишитесь на события, которые отправляет SpeechRecognizer:

  • Recognizing: сигнал для событий, содержащих промежуточные результаты распознавания.
  • Recognized: сигнал для событий, содержащих окончательные результаты распознавания (указывает на успешность попытки распознавания).
  • SessionStopped: сигнал для событий, указывающих на окончание сеанса (операции) распознавания.
  • Canceled: сигнал для событий, содержащих отмененные результаты распознавания. Эти результаты указывают на попытку распознавания, которая была отменена в результате прямого запроса на отмену. Они также могут указывать на сбой транспорта или протокола.
speechRecognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
    {
        cout << "Recognizing:" << e.Result->Text << std::endl;
    });

speechRecognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
    {
        if (e.Result->Reason == ResultReason::RecognizedSpeech)
        {
            cout << "RECOGNIZED: Text=" << e.Result->Text 
                 << " (text could not be translated)" << std::endl;
        }
        else if (e.Result->Reason == ResultReason::NoMatch)
        {
            cout << "NOMATCH: Speech could not be recognized." << std::endl;
        }
    });

speechRecognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
    {
        cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
        if (e.Reason == CancellationReason::Error)
        {
            cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
                 << "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
                 << "CANCELED: Did you set the speech resource key and region values?" << std::endl;

            recognitionEnd.set_value(); // Notify to stop recognition.
        }
    });

speechRecognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
    {
        cout << "Session stopped.";
        recognitionEnd.set_value(); // Notify to stop recognition.
    });

Завершив настройку, вызовите StartContinuousRecognitionAsync, чтобы начать распознавание:

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer->StartContinuousRecognitionAsync().get();

// Waits for recognition end.
recognitionEnd.get_future().get();

// Stops recognition.
speechRecognizer->StopContinuousRecognitionAsync().get();

Изменение исходного языка

Распространенной задачей распознавания речи является указание языка ввода (или исходного языка). В следующем примере показано, как изменить язык ввода на немецкий. В своем коде найдите экземпляр SpeechConfig, а затем добавьте непосредственно под ним следующую строку:

speechConfig->SetSpeechRecognitionLanguage("de-DE");

SetSpeechRecognitionLanguage — это параметр, принимающий строку в качестве аргумента. Список поддерживаемых языковых стандартов см. в разделе "Язык" и "Голосовая поддержка" службы "Речь".

Идентификация языка

Вы можете использовать идентификацию языка с речью для распознавания текста, если необходимо определить язык в источнике звука, а затем переписать его в текст.

Полный пример кода см. в разделе "Идентификация языка".

Использование пользовательской конечной точки

С помощью пользовательской речи можно отправлять собственные данные, тестировать и обучать пользовательскую модель, сравнивать точность между моделями и развертывать модель в настраиваемую конечную точку. В следующем примере показано, как настроить пользовательскую конечную точку.

auto speechConfig = SpeechConfig::FromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig->SetEndpointId("YourEndpointId");
auto speechRecognizer = SpeechRecognizer::FromConfig(speechConfig);

Запуск и использование контейнера

Контейнеры службы "Речь" предоставляют API конечных точек запросов на основе websocket, к которым обращается пакет SDK службы "Речь" и CLI службы "Речь". По умолчанию пакет SDK службы "Речь" и cli службы "Речь" используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.

Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.

Семантическая сегментация

Семантическая сегментация — это стратегия сегментации распознавания речи, предназначенная для устранения проблем, связанных с сегментацией на основе молчания:

  • Недостаточно сегментация: когда пользователи говорят долго без приостановки, они могут видеть длинную последовательность текста без разрывов ("стены текста"), что значительно снижает их удобочитаемость.
  • Чрезмерное сегментирование. Когда пользователь приостанавливается в течение короткого времени, механизм обнаружения молчания может сегментирование неправильно.

Вместо того чтобы полагаться на время ожидания молчания, сегменты семантической сегментации и возвращают окончательные результаты при обнаружении препинания предложения (например, ""." или "?"). Это улучшает взаимодействие с пользователем с более высоким качеством, семантически завершенными сегментами и предотвращает длительные промежуточные результаты.

Чтобы использовать семантику сегментации, необходимо задать следующее свойство в экземпляре, используемом SpeechConfig для создания SpeechRecognizer:

speechConfig->SetProperty(PropertyId::Speech_SegmentationStrategy, "Semantic");

Ниже приведены некоторые ограничения семантической сегментации.

  • Для использования семантической сегментации необходимо использовать пакет SDK службы "Речь" версии 1.41 или более поздней.
  • Семантическая сегментация предназначена только для использования в непрерывном распознавании. К ним относятся такие сценарии, как транскрибирование и субтитры. Его нельзя использовать в одном режиме распознавания и диктовки.
  • Семантическая сегментация недоступна для всех языков и языковых стандартов. В настоящее время семантическая сегментация доступна только для языковых стандартов английского языка (en), таких как en-US, en-GB, en-IN и en-AU.
  • Семантическая сегментация пока не поддерживает оценки достоверности и списки NBest. Таким образом, мы не рекомендуем семантику сегментации, если вы используете оценки достоверности или списки NBest.

Справочные примеры пакета документации | (Go) | Дополнительные примеры на GitHub

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Распознавание речи на текст с микрофона

  1. Создайте ресурс службы "Речь" в портал Azure. Получение ключа ресурса службы "Речь" и региона.
  2. Используйте следующий пример кода для запуска распознавания речи с микрофона устройства по умолчанию. Замените и замените YourSpeechKey ключ ресурса службы "Речь" и YourSpeechRegion регион. Запуск скрипта запускает сеанс распознавания на микрофоне по умолчанию и выходном тексте:
package main

import (
	"bufio"
	"fmt"
	"os"

	"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
	"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func sessionStartedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Started (ID=", event.SessionID, ")")
}

func sessionStoppedHandler(event speech.SessionEventArgs) {
	defer event.Close()
	fmt.Println("Session Stopped (ID=", event.SessionID, ")")
}

func recognizingHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognizing:", event.Result.Text)
}

func recognizedHandler(event speech.SpeechRecognitionEventArgs) {
	defer event.Close()
	fmt.Println("Recognized:", event.Result.Text)
}

func cancelledHandler(event speech.SpeechRecognitionCanceledEventArgs) {
	defer event.Close()
	fmt.Println("Received a cancellation: ", event.ErrorDetails)
	fmt.Println("Did you set the speech resource key and region values?")
}

func main() {
    subscription :=  "YourSpeechKey"
    region := "YourSpeechRegion"

	audioConfig, err := audio.NewAudioConfigFromDefaultMicrophoneInput()
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(sessionStartedHandler)
	speechRecognizer.SessionStopped(sessionStoppedHandler)
	speechRecognizer.Recognizing(recognizingHandler)
	speechRecognizer.Recognized(recognizedHandler)
	speechRecognizer.Canceled(cancelledHandler)
	speechRecognizer.StartContinuousRecognitionAsync()
	defer speechRecognizer.StopContinuousRecognitionAsync()
	bufio.NewReader(os.Stdin).ReadBytes('\n')
}

Выполните приведенные ниже команды, чтобы создать файл go.mod со ссылкой на компоненты, размещенные в GitHub:

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

Теперь можно приступить к сборке и выполнению кода:

go build
go run quickstart

Подробные сведения см. в справочных материалах для SpeechConfig класса и SpeechRecognizer класса.

Распознавание речи в тексте из звукового файла

Используйте следующий пример, чтобы запустить распознавание речи из звукового файла. Замените и замените YourSpeechKey ключ ресурса службы "Речь" и YourSpeechRegion регион. Кроме того, замените переменную file путем к файлу .wav . При запуске скрипта он распознает речь из файла и выводит результат текста:

package main

import (
	"fmt"
	"time"

	"github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
	"github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func main() {
    subscription :=  "YourSpeechKey"
    region := "YourSpeechRegion"
    file := "path/to/file.wav"

	audioConfig, err := audio.NewAudioConfigFromWavFileInput(file)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer audioConfig.Close()
	config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer config.Close()
	speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
	if err != nil {
		fmt.Println("Got an error: ", err)
		return
	}
	defer speechRecognizer.Close()
	speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Started (ID=", event.SessionID, ")")
	})
	speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
		defer event.Close()
		fmt.Println("Session Stopped (ID=", event.SessionID, ")")
	})

	task := speechRecognizer.RecognizeOnceAsync()
	var outcome speech.SpeechRecognitionOutcome
	select {
	case outcome = <-task:
	case <-time.After(5 * time.Second):
		fmt.Println("Timed out")
		return
	}
	defer outcome.Close()
	if outcome.Error != nil {
		fmt.Println("Got an error: ", outcome.Error)
	}
	fmt.Println("Got a recognition!")
	fmt.Println(outcome.Result.Text)
}

Выполните приведенные ниже команды, чтобы создать файл go.mod со ссылкой на компоненты, размещенные в GitHub:

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

Теперь можно приступить к сборке и выполнению кода:

go build
go run quickstart

Подробные сведения см. в справочных материалах для SpeechConfig класса и SpeechRecognizer класса.

Запуск и использование контейнера

Контейнеры службы "Речь" предоставляют API конечных точек запросов на основе websocket, к которым обращается пакет SDK службы "Речь" и CLI службы "Речь". По умолчанию пакет SDK службы "Речь" и cli службы "Речь" используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.

Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.

Справочная документация | по Дополнительным примерам на GitHub

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Создание экземпляра конфигурации речи

Чтобы вызвать службу "Речь" с помощью пакета SDK службы "Речь", необходимо создать экземпляр SpeechConfig . Этот класс содержит сведения о вашей подписке, такие как ключ и связанный регион, конечная точка, узел или маркер авторизации.

  1. Создайте ресурс службы "Речь" в портал Azure. Получение ключа ресурса службы "Речь" и региона.
  2. SpeechConfig Создайте экземпляр с помощью ключа службы "Речь" и региона.
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
    }
}

Инициализировать SpeechConfig можно несколькими способами:

  • Используйте конечную точку и передайте конечную точку службы "Речь". Ключ или маркер авторизации являются необязательными.
  • Используйте узел и передайте адрес узла. Ключ или маркер авторизации являются необязательными.
  • Используйте маркер авторизации с соответствующим регионом или расположением.

Примечание.

Независимо от того, используете ли вы распознавание речи, синтез речи, перевод или распознавание намерения, вы всегда создаете конфигурацию.

Распознавание речи с микрофона

Чтобы распознать речь с помощью микрофона устройства, создайте AudioConfig экземпляр с помощью fromDefaultMicrophoneInput() метода. Затем инициализировать объект путем передачи SpeechRecognizer audioConfig и config.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
        fromMic(speechConfig);
    }

    public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
        SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);

        System.out.println("Speak into your microphone.");
        Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
        SpeechRecognitionResult speechRecognitionResult = task.get();
        System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
    }
}

Если необходимо использовать конкретное входное аудиоустройство, необходимо указать код устройства в AudioConfig. Сведения о том, как получить идентификатор устройства, см. в разделе "Выбор звукового устройства ввода" с помощью пакета SDK службы "Речь".

по распознаванию речи из файла

Чтобы распознавать речь из аудиофайла, а не с помощью микрофона, вам все равно нужно создать экземпляр AudioConfig. Тем не менее, вы не вызываете FromDefaultMicrophoneInput(). Вы вызываете fromWavFileInput() и передаете путь к файлу:

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-speech-key>", "<paste-your-region>");
        fromFile(speechConfig);
    }

    public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
        SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig, audioConfig);
        
        Future<SpeechRecognitionResult> task = speechRecognizer.recognizeOnceAsync();
        SpeechRecognitionResult speechRecognitionResult = task.get();
        System.out.println("RECOGNIZED: Text=" + speechRecognitionResult.getText());
    }
}

Обработка ошибок

В предыдущих примерах используется только распознанный текст speechRecognitionResult.getText(). но, чтобы обработать ошибки и другие ответы, необходимо написать код для обработки результата. Следующий пример кода вычисляет значение speechRecognitionResult.getReason() и выполняет следующее:

  • Выводит результат распознавания: ResultReason.RecognizedSpeech.
  • Если распознавание не соответствует, он сообщает пользователю: ResultReason.NoMatch
  • Если возникла ошибка, выводится сообщение об ошибке: ResultReason.Canceled
switch (speechRecognitionResult.getReason()) {
    case ResultReason.RecognizedSpeech:
        System.out.println("We recognized: " + speechRecognitionResult.getText());
        exitCode = 0;
        break;
    case ResultReason.NoMatch:
        System.out.println("NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled: {
            CancellationDetails cancellation = CancellationDetails.fromResult(speechRecognitionResult);
            System.out.println("CANCELED: Reason=" + cancellation.getReason());

            if (cancellation.getReason() == CancellationReason.Error) {
                System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
                System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
                System.out.println("CANCELED: Did you set the speech resource key and region values?");
            }
        }
        break;
}

Использование непрерывного распознавания

В предыдущих примерах используется одноразовое распознавание, которое распознает один речевой фрагмент. Конец одного речевого фрагмента определяется путем прослушивания до тишины в конце, или пока не будет обработано максимум 15 секунд аудио.

Непрерывное распознавание функционирует иначе. Оно используется, если требуется контролировать, когда следует остановить распознавание. Для получения результатов распознавания необходимо подписаться на события recognizing, recognizedи canceled. Чтобы отключить распознавание, необходимо вызвать stopContinuousRecognitionAsync. Ниже приведен пример того, как можно выполнять непрерывное распознавание в звуковом файле ввода.

Начните с определения входных данных и инициализации SpeechRecognizer:

AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(config, audioConfig);

Теперь создайте переменную для управления состоянием распознавания речи. Объявите экземпляр Semaphore в области класса:

private static Semaphore stopTranslationWithFileSemaphore;

Теперь подпишитесь на события, которые отправляет SpeechRecognizer:

  • recognizing: сигнал для событий, содержащих промежуточные результаты распознавания.
  • recognized: сигнал для событий, содержащих окончательные результаты распознавания (указывает на успешность попытки распознавания).
  • sessionStopped: сигнал для событий, указывающих на окончание сеанса (операции) распознавания.
  • canceled: сигнал для событий, содержащих отмененные результаты распознавания. Эти результаты указывают на попытку распознавания, которая была отменена в результате прямого запроса на отмену. Они также могут указывать на сбой транспорта или протокола.
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);

speechRecognizer.recognizing.addEventListener((s, e) -> {
    System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});

speechRecognizer.recognized.addEventListener((s, e) -> {
    if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
        System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
    }
    else if (e.getResult().getReason() == ResultReason.NoMatch) {
        System.out.println("NOMATCH: Speech could not be recognized.");
    }
});

speechRecognizer.canceled.addEventListener((s, e) -> {
    System.out.println("CANCELED: Reason=" + e.getReason());

    if (e.getReason() == CancellationReason.Error) {
        System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
        System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
        System.out.println("CANCELED: Did you set the speech resource key and region values?");
    }

    stopTranslationWithFileSemaphore.release();
});

speechRecognizer.sessionStopped.addEventListener((s, e) -> {
    System.out.println("\n    Session stopped event.");
    stopTranslationWithFileSemaphore.release();
});

Завершив настройку, вызовите startContinuousRecognitionAsync, чтобы начать распознавание:

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
speechRecognizer.startContinuousRecognitionAsync().get();

// Waits for completion.
stopTranslationWithFileSemaphore.acquire();

// Stops recognition.
speechRecognizer.stopContinuousRecognitionAsync().get();

Изменение исходного языка

Распространенной задачей распознавания речи является указание языка ввода (или исходного языка). В следующем примере показано, как изменить язык ввода на французский. В коде найдите экземпляр SpeechConfig и добавьте эту строку непосредственно под ним:

config.setSpeechRecognitionLanguage("fr-FR");

setSpeechRecognitionLanguage — это параметр, принимающий строку в качестве аргумента. Ознакомьтесь со списком поддерживаемых языковых стандартов речи.

Идентификация языка

Вы можете использовать идентификацию языка с речью для распознавания текста, если необходимо определить язык в источнике звука, а затем переписать его в текст.

Полный пример кода см. в разделе "Идентификация языка".

Использование пользовательской конечной точки

С помощью пользовательской речи можно отправлять собственные данные, тестировать и обучать пользовательскую модель, сравнивать точность между моделями и развертывать модель в настраиваемую конечную точку. В следующем примере показано, как задать пользовательскую конечную точку:

SpeechConfig speechConfig = SpeechConfig.FromSubscription("YourSpeechKey", "YourServiceRegion");
speechConfig.setEndpointId("YourEndpointId");
SpeechRecognizer speechRecognizer = new SpeechRecognizer(speechConfig);

Запуск и использование контейнера

Контейнеры службы "Речь" предоставляют API конечных точек запросов на основе websocket, к которым обращается пакет SDK службы "Речь" и CLI службы "Речь". По умолчанию пакет SDK службы "Речь" и cli службы "Речь" используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.

Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.

Семантическая сегментация

Семантическая сегментация — это стратегия сегментации распознавания речи, предназначенная для устранения проблем, связанных с сегментацией на основе молчания:

  • Недостаточно сегментация: когда пользователи говорят долго без приостановки, они могут видеть длинную последовательность текста без разрывов ("стены текста"), что значительно снижает их удобочитаемость.
  • Чрезмерное сегментирование. Когда пользователь приостанавливается в течение короткого времени, механизм обнаружения молчания может сегментирование неправильно.

Вместо того чтобы полагаться на время ожидания молчания, сегменты семантической сегментации и возвращают окончательные результаты при обнаружении препинания предложения (например, ""." или "?"). Это улучшает взаимодействие с пользователем с более высоким качеством, семантически завершенными сегментами и предотвращает длительные промежуточные результаты.

Чтобы использовать семантику сегментации, необходимо задать следующее свойство в экземпляре, используемом SpeechConfig для создания SpeechRecognizer:

speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");

Ниже приведены некоторые ограничения семантической сегментации.

  • Для использования семантической сегментации необходимо использовать пакет SDK службы "Речь" версии 1.41 или более поздней.
  • Семантическая сегментация предназначена только для использования в непрерывном распознавании. К ним относятся такие сценарии, как транскрибирование и субтитры. Его нельзя использовать в одном режиме распознавания и диктовки.
  • Семантическая сегментация недоступна для всех языков и языковых стандартов. В настоящее время семантическая сегментация доступна только для языковых стандартов английского языка (en), таких как en-US, en-GB, en-IN и en-AU.
  • Семантическая сегментация пока не поддерживает оценки достоверности и списки NBest. Таким образом, мы не рекомендуем семантику сегментации, если вы используете оценки достоверности или списки NBest.

Справочные примеры пакета документации | (npm) | Дополнительные примеры в исходном коде библиотеки GitHub |

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Создание экземпляра конфигурации речи

Чтобы вызвать службу "Речь" с помощью пакета SDK для службы "Речь", необходимо создать экземпляр SpeechConfig. Этот класс содержит сведения о вашей подписке, такие как ключ и связанный регион, конечная точка, узел или маркер авторизации.

  1. Создайте ресурс службы "Речь" в портал Azure. Получение ключа ресурса службы "Речь" и региона.
  2. SpeechConfig Создайте экземпляр с помощью следующего кода. Замените и замените YourSpeechKey ключ ресурса службы "Речь" и YourSpeechRegion регион.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

Инициализировать SpeechConfig можно несколькими способами:

  • Используйте конечную точку и передайте конечную точку службы "Речь". Ключ или маркер авторизации являются необязательными.
  • Используйте узел и передайте адрес узла. Ключ или маркер авторизации являются необязательными.
  • Используйте маркер авторизации с соответствующим регионом или расположением.

Примечание.

Независимо от того, выполняется ли распознавание речи, синтез речи, перевод или распознавание намерений, всегда создается конфигурация.

Распознавание речи с микрофона

Распознавание речи с микрофона не поддерживается в Node.js. Эта функция поддерживается только в среде JavaScript на основе браузера. Дополнительные сведения см. в примере React и реализации речи с микрофона на GitHub. В примере React показаны конструктивные шаблоны для обмена и управления маркерами проверки подлинности, В нем также показана запись звука с микрофона или файла для преобразования речи в текст.

Примечание.

Если необходимо использовать конкретное входное аудиоустройство, необходимо указать код устройства в AudioConfig. Сведения о том, как получить идентификатор устройства, см. в разделе "Выбор звукового устройства ввода" с помощью пакета SDK службы "Речь".

по распознаванию речи из файла

Чтобы распознать речь из звукового файла, создайте AudioConfig экземпляр с помощью fromWavFileInput() метода, который принимает Buffer объект. Затем инициализируйте SpeechRecognizer, передав audioConfig и speechConfig.

const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

function fromFile() {
    let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
    let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

    speechRecognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        speechRecognizer.close();
    });
}
fromFile();

Распознавание речи из потока в памяти

Во многих случаях использование звуковых данных, скорее всего, происходит из Хранилище BLOB-объектов Azure. Или он уже находится в памяти как или ArrayBuffer аналогичная структура необработанных данных. Следующий код:

  • Создается поток push-передачи с помощью createPushStream().
  • Считывает файл .wav с помощью fs.createReadStream демонстрационных целей. Если у вас уже есть звуковые данные ArrayBuffer, можно перейти непосредственно к записи содержимого в входной поток.
  • Создается аудио-конфигурация с помощью потока push-передачи.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");

function fromStream() {
    let pushStream = sdk.AudioInputStream.createPushStream();

    fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
        pushStream.write(arrayBuffer.slice());
    }).on('end', function() {
        pushStream.close();
    });
 
    let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
    let speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
    speechRecognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        speechRecognizer.close();
    });
}
fromStream();

При использовании потока push-передачи в качестве входных данных предполагается, что звуковые данные являются необработанными данными модуля модуляции пульса (PCM), пропускающими любые заголовки. API по-прежнему работает в некоторых случаях, если заголовок не пропущен. Для получения наилучших результатов рекомендуется реализовать логику для считывания заголовков, чтобы fs начаться в начале звуковых данных.

Обработка ошибок

В предыдущих примерах из свойства получается только распознанный текст result.text . но, чтобы обработать ошибки и другие ответы, необходимо написать код для обработки результата. Следующий код вычисляет свойство result.reason и:

  • Выводит результат распознавания: ResultReason.RecognizedSpeech.
  • Если распознавание не соответствует, он сообщает пользователю: ResultReason.NoMatch
  • Если возникла ошибка, выводится сообщение об ошибке: ResultReason.Canceled
switch (result.reason) {
    case sdk.ResultReason.RecognizedSpeech:
        console.log(`RECOGNIZED: Text=${result.text}`);
        break;
    case sdk.ResultReason.NoMatch:
        console.log("NOMATCH: Speech could not be recognized.");
        break;
    case sdk.ResultReason.Canceled:
        const cancellation = sdk.CancellationDetails.fromResult(result);
        console.log(`CANCELED: Reason=${cancellation.reason}`);

        if (cancellation.reason == sdk.CancellationReason.Error) {
            console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
            console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
            console.log("CANCELED: Did you set the speech resource key and region values?");
        }
        break;
    }

Использование непрерывного распознавания

В предыдущих примерах используется одноразовое распознавание, которое распознает один речевой фрагмент. Конец одного речевого фрагмента определяется путем прослушивания до тишины в конце, или пока не будет обработано максимум 15 секунд аудио.

Непрерывное распознавание функционирует иначе. Оно используется, если требуется контролировать, когда следует остановить распознавание. Для получения результатов распознавания необходимо подписаться на события Recognizing, Recognizedи Canceled. Чтобы остановить распознавание, необходимо вызвать [stopContinuousRecognitionAsync] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-stopcontinuousrecognitionasync). Ниже приведен пример того, как выполняется непрерывное распознавание входного аудиофайла.

Начните с определения входных данных и инициализации SpeechRecognizer:

const speechRecognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

Теперь подпишитесь на события, отправленные из SpeechRecognizer:

  • recognizing: сигнал для событий, содержащих промежуточные результаты распознавания.
  • recognized: сигнал для событий, содержащих окончательные результаты распознавания (указывает на успешность попытки распознавания).
  • sessionStopped: сигнал для событий, указывающих на окончание сеанса (операции) распознавания.
  • canceled: сигнал для событий, содержащих отмененные результаты распознавания. Эти результаты указывают на попытку распознавания, которая была отменена в результате прямого запроса на отмену. Они также могут указывать на сбой транспорта или протокола.
speechRecognizer.recognizing = (s, e) => {
    console.log(`RECOGNIZING: Text=${e.result.text}`);
};

speechRecognizer.recognized = (s, e) => {
    if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
        console.log(`RECOGNIZED: Text=${e.result.text}`);
    }
    else if (e.result.reason == sdk.ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be recognized.");
    }
};

speechRecognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);

    if (e.reason == sdk.CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you set the speech resource key and region values?");
    }

    speechRecognizer.stopContinuousRecognitionAsync();
};

speechRecognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    speechRecognizer.stopContinuousRecognitionAsync();
};

При настройке вызовите [startContinuousRecognitionAsync] (/javascript/api/microsoft-cognitiveservices-speech-sdk/speechrecognizer#microsoft-cognitiveservices-speech-sdk-speechrecognizer-startkeywordrecognitionasync), чтобы начать распознавание:

speechRecognizer.startContinuousRecognitionAsync();

// Make the following call at some point to stop recognition:
// speechRecognizer.stopContinuousRecognitionAsync();

Изменение исходного языка

Распространенной задачей распознавания речи является указание языка ввода (или исходного языка). В следующем примере показано, как изменить язык ввода на итальянский. В своем коде найдите экземпляр SpeechConfig, а затем добавьте непосредственно под ним следующую строку:

speechConfig.speechRecognitionLanguage = "it-IT";

Свойство speechRecognitionLanguage принимает строку формата языкового стандарта. Список поддерживаемых языковых стандартов см. в разделе "Язык" и "Голосовая поддержка" службы "Речь".

Идентификация языка

Вы можете использовать идентификацию языка с речью для распознавания текста, если необходимо определить язык в источнике звука, а затем переписать его в текст.

Полный пример кода см. в разделе "Идентификация языка".

Использование пользовательской конечной точки

С помощью пользовательской речи можно отправлять собственные данные, тестировать и обучать пользовательскую модель, сравнивать точность между моделями и развертывать модель в настраиваемую конечную точку. В следующем примере показано, как настроить пользовательскую конечную точку.

var speechConfig = SpeechSDK.SpeechConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
var speechRecognizer = new SpeechSDK.SpeechRecognizer(speechConfig);

Запуск и использование контейнера

Контейнеры службы "Речь" предоставляют API конечных точек запросов на основе websocket, к которым обращается пакет SDK службы "Речь" и CLI службы "Речь". По умолчанию пакет SDK службы "Речь" и cli службы "Речь" используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.

Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.

Справочный пакет документации | (скачивание) | Дополнительные примеры на GitHub

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Установка пакета SDK и примеров для службы "Речь"

Репозиторий Azure-Samples/cognitive-services-speech-sdk включает примеры, написанные на Objective-C для iOS и Mac. Щелкните ссылку, чтобы просмотреть инструкции по установке для каждого примера:

Дополнительные сведения см. в справке по пакету SDK службы "Речь" для Objective-C.

Использование пользовательской конечной точки

С помощью пользовательской речи можно отправлять собственные данные, тестировать и обучать пользовательскую модель, сравнивать точность между моделями и развертывать модель в настраиваемую конечную точку. В следующем примере показано, как задать пользовательскую конечную точку:

SPXSpeechConfiguration *speechConfig = [[SPXSpeechConfiguration alloc] initWithSubscription:"YourSubscriptionKey" region:"YourServiceRegion"];
speechConfig.endpointId = "YourEndpointId";
SPXSpeechRecognizer* speechRecognizer = [[SPXSpeechRecognizer alloc] init:speechConfig];

Запуск и использование контейнера

Контейнеры службы "Речь" предоставляют API конечных точек запросов на основе websocket, к которым обращается пакет SDK службы "Речь" и CLI службы "Речь". По умолчанию пакет SDK службы "Речь" и cli службы "Речь" используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.

Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.

Справочный пакет документации | (скачивание) | Дополнительные примеры на GitHub

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Установка пакета SDK и примеров для службы "Речь"

Репозиторий Azure-Samples/cognitive-services-speech-sdk включает примеры, написанные на Swift для iOS и Mac. Щелкните ссылку, чтобы просмотреть инструкции по установке для каждого примера:

Дополнительные сведения см. в справке по пакету SDK службы "Речь" для Objective-C.

Использование пользовательской конечной точки

С помощью пользовательской речи можно отправлять собственные данные, тестировать и обучать пользовательскую модель, сравнивать точность между моделями и развертывать модель в настраиваемую конечную точку. В следующем примере показано, как задать пользовательскую конечную точку:

let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);

Запуск и использование контейнера

Контейнеры службы "Речь" предоставляют API конечных точек запросов на основе websocket, к которым обращается пакет SDK службы "Речь" и CLI службы "Речь". По умолчанию пакет SDK службы "Речь" и cli службы "Речь" используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.

Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.

Справочные примеры пакета документации | (PyPi) | Дополнительные примеры на GitHub

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Создание экземпляра конфигурации речи

Чтобы вызвать службу "Речь" с помощью пакета SDK для службы "Речь", необходимо создать экземпляр SpeechConfig. Этот класс содержит сведения о подписке, например ключ речи и связанный регион, конечную точку, узел или маркер авторизации.

  1. Создайте ресурс службы "Речь" в портал Azure. Получение ключа ресурса службы "Речь" и региона.
  2. SpeechConfig Создайте экземпляр с помощью следующего кода. Замените и замените YourSpeechKey ключ ресурса службы "Речь" и YourSpeechRegion регион.
speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")

Инициализировать SpeechConfig можно несколькими способами:

  • Используйте конечную точку и передайте конечную точку службы "Речь". Ключ службы "Речь" или маркер авторизации являются необязательными.
  • Используйте узел и передайте адрес узла. Ключ службы "Речь" или маркер авторизации являются необязательными.
  • Используйте маркер авторизации с соответствующим регионом или расположением.

Примечание.

Независимо от того, выполняется ли распознавание речи, синтез речи, перевод или распознавание намерений, всегда создается конфигурация.

Распознавание речи с микрофона

Чтобы распознать речь с микрофона устройства, создайте экземпляр SpeechRecognizer, не передавая AudioConfig, а затем передайте speech_config:

import azure.cognitiveservices.speech as speechsdk

def from_mic():
    speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

    print("Speak into your microphone.")
    speech_recognition_result = speech_recognizer.recognize_once_async().get()
    print(speech_recognition_result.text)

from_mic()

Если необходимо использовать конкретное входное аудиоустройство, необходимо указать код устройства в AudioConfig и передать его в параметр audio_config конструктора SpeechRecognizer. Сведения о том, как получить идентификатор устройства, см. в разделе "Выбор звукового устройства ввода" с помощью пакета SDK службы "Речь".

по распознаванию речи из файла

Чтобы распознавать речь из аудиофайла, а не с помощью микрофона, создайте экземпляр AudioConfig и используйте параметр filename:

import azure.cognitiveservices.speech as speechsdk

def from_file():
    speech_config = speechsdk.SpeechConfig(subscription="YourSpeechKey", region="YourSpeechRegion")
    audio_config = speechsdk.AudioConfig(filename="your_file_name.wav")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

    speech_recognition_result = speech_recognizer.recognize_once_async().get()
    print(speech_recognition_result.text)

from_file()

Обработка ошибок

В предыдущих примерах из свойства получается только распознанный текст speech_recognition_result.text . но, чтобы обработать ошибки и другие ответы, необходимо написать код для обработки результата. Следующий код вычисляет свойство speech_recognition_result.reason и:

  • Выводит результат распознавания: speechsdk.ResultReason.RecognizedSpeech.
  • Если распознавание не соответствует, он сообщает пользователю: speechsdk.ResultReason.NoMatch
  • Если возникла ошибка, выводится сообщение об ошибке: speechsdk.ResultReason.Canceled
if speech_recognition_result.reason == speechsdk.ResultReason.RecognizedSpeech:
    print("Recognized: {}".format(speech_recognition_result.text))
elif speech_recognition_result.reason == speechsdk.ResultReason.NoMatch:
    print("No speech could be recognized: {}".format(speech_recognition_result.no_match_details))
elif speech_recognition_result.reason == speechsdk.ResultReason.Canceled:
    cancellation_details = speech_recognition_result.cancellation_details
    print("Speech Recognition canceled: {}".format(cancellation_details.reason))
    if cancellation_details.reason == speechsdk.CancellationReason.Error:
        print("Error details: {}".format(cancellation_details.error_details))
        print("Did you set the speech resource key and region values?")

Использование непрерывного распознавания

В предыдущих примерах используется одноразовое распознавание, которое распознает один речевой фрагмент. Конец одного речевого фрагмента определяется путем прослушивания до тишины в конце, или пока не будет обработано максимум 15 секунд аудио.

Непрерывное распознавание функционирует иначе. Оно используется, если требуется контролировать, когда следует остановить распознавание. Для получения результатов распознавания необходимо подключиться к EventSignal. Чтобы остановить распознавание, необходимо вызвать stop_continuous_recognition() или stop_continuous_recognition_async(). Ниже приведен пример того, как выполняется непрерывное распознавание входного аудиофайла.

Начните с определения входных данных и инициализации SpeechRecognizer:

audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

Теперь создайте переменную для управления состоянием распознавания речи. Задайте для переменной False значение, так как в начале распознавания можно безопасно предположить, что она не завершена:

done = False

Теперь создайте обратный вызов, чтобы предотвратить непрерывное распознавание при получении evt. Помните следующее:

  • При получении evt выводится сообщение evt.
  • После получения evt для отмены распознавания вызывается stop_continuous_recognition ().
  • Состояние распознавания изменится на True.
def stop_cb(evt):
    print('CLOSING on {}'.format(evt))
    speech_recognizer.stop_continuous_recognition()
    nonlocal done
    done = True

В этом примере кода показано, как соединять обратные вызовы с событиями, отправленными из SpeechRecognizer. События включают:

  • recognizing: сигнал для событий, содержащих промежуточные результаты распознавания.
  • recognized: сигнал для событий, содержащих окончательные результаты распознавания (указывает на успешность попытки распознавания).
  • session_started: сигнал для событий, указывающих на начало сеанса (операции) распознавания.
  • session_stopped: сигнал для событий, указывающих на окончание сеанса (операции) распознавания.
  • canceled: сигнал для событий, содержащих отмененные результаты распознавания. Эти результаты указывают на попытку распознавания, которая была отменена в результате прямого запроса на отмену. Они также могут указывать на сбой транспорта или протокола.
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))

speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)

Если все настроено, можно вызвать start_continuous_recognition ().

speech_recognizer.start_continuous_recognition()
while not done:
    time.sleep(.5)

Изменение исходного языка

Распространенной задачей распознавания речи является указание языка ввода (или исходного языка). В следующем примере показано, как изменить язык ввода на немецкий. В своем коде найдите экземпляр SpeechConfig, а затем добавьте непосредственно под ним следующую строку:

speech_config.speech_recognition_language="de-DE"

speech_recognition_language — это параметр, принимающий строку в качестве аргумента. Список поддерживаемых языковых стандартов см. в разделе "Язык" и "Голосовая поддержка" службы "Речь".

Идентификация языка

Вы можете использовать идентификацию языка с распознаванием текста для распознавания текста, если необходимо определить язык в источнике звука, а затем переписать его в текст.

Полный пример кода см. в разделе "Идентификация языка".

Использование пользовательской конечной точки

С помощью пользовательской речи можно отправлять собственные данные, тестировать и обучать пользовательскую модель, сравнивать точность между моделями и развертывать модель в настраиваемую конечную точку. В следующем примере показано, как настроить пользовательскую конечную точку.

speech_config = speechsdk.SpeechConfig(subscription="YourSubscriptionKey", region="YourServiceRegion")
speech_config.endpoint_id = "YourEndpointId"
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)

Запуск и использование контейнера

Контейнеры службы "Речь" предоставляют API конечных точек запросов на основе websocket, к которым обращается пакет SDK службы "Речь" и CLI службы "Речь". По умолчанию пакет SDK службы "Речь" и cli службы "Речь" используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.

Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.

Семантическая сегментация

Семантическая сегментация — это стратегия сегментации распознавания речи, предназначенная для устранения проблем, связанных с сегментацией на основе молчания:

  • Недостаточно сегментация: когда пользователи говорят долго без приостановки, они могут видеть длинную последовательность текста без разрывов ("стены текста"), что значительно снижает их удобочитаемость.
  • Чрезмерное сегментирование. Когда пользователь приостанавливается в течение короткого времени, механизм обнаружения молчания может сегментирование неправильно.

Вместо того чтобы полагаться на время ожидания молчания, сегменты семантической сегментации и возвращают окончательные результаты при обнаружении препинания предложения (например, ""." или "?"). Это улучшает взаимодействие с пользователем с более высоким качеством, семантически завершенными сегментами и предотвращает длительные промежуточные результаты.

Чтобы использовать семантику сегментации, необходимо задать следующее свойство в экземпляре, используемом SpeechConfig для создания SpeechRecognizer:

speech_config.set_property(speechsdk.PropertyId.Speech_SegmentationStrategy, "Semantic") 

Ниже приведены некоторые ограничения семантической сегментации.

  • Для использования семантической сегментации необходимо использовать пакет SDK службы "Речь" версии 1.41 или более поздней.
  • Семантическая сегментация предназначена только для использования в непрерывном распознавании. К ним относятся такие сценарии, как транскрибирование и субтитры. Его нельзя использовать в одном режиме распознавания и диктовки.
  • Семантическая сегментация недоступна для всех языков и языковых стандартов. В настоящее время семантическая сегментация доступна только для языковых стандартов английского языка (en), таких как en-US, en-GB, en-IN и en-AU.
  • Семантическая сегментация пока не поддерживает оценки достоверности и списки NBest. Таким образом, мы не рекомендуем семантику сегментации, если вы используете оценки достоверности или списки NBest.

Преобразование речи в текст REST API ссылки на | речь на текстовый REST API для краткой справки по звуковой ссылке | на Дополнительные примеры на GitHub

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Преобразование речи в текст

В командной строке выполните приведенную ниже команду. Вставьте в команду указанные ниже значения:

  • Ключ подписки для ресурса "Речь"
  • Регион службы "Речь".
  • Путь для входного звукового файла
curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'

Вы должны получить ответ, как показано в следующем примере:

{
    "RecognitionStatus": "Success",
    "DisplayText": "My voice is my passport, verify me.",
    "Offset": 6600000,
    "Duration": 32100000
}

Дополнительные сведения см. в справочнике по REST API преобразования речи в текст.

В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.

Сведения о настройке среды для примера приложения см . в кратком руководстве по распознаванию и преобразованию речи в текст.

Распознавание речи с микрофона

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

Итак, все готово для запуска интерфейса командной строки службы "Речь" для распознавания речи с микрофона. В командной строке перейдите в каталог, в котором содержится двоичный файл интерфейса командной строки службы "Речь". Затем выполните следующую команду.

spx recognize --microphone

Примечание.

По умолчанию интерфейс командной строки службы "Речь" использует английский язык. Вы можете выбрать другой язык от речи к текстовой таблице. Например, для распознавания речи на немецком добавьте --source de-DE.

Поговорите с микрофоном, и вы можете увидеть транскрибирование ваших слов в текст в режиме реального времени. Интерфейс командной строки службы "Речь" останавливается после периода молчания или при нажатии клавиш CTRL+C.

по распознаванию речи из файла

Речевой интерфейс командной строки может распознать речь во многих форматах файлов и на естественных языках. В этом примере можно использовать любой файл .wav (16 кГц или 8 кГц, 16-разрядный и моно PCM), содержащий речь на английском языке. Или если вы хотите получить краткий пример, скачайте файл whatstheweatherlike.wav и скопируйте его в тот же каталог, что и двоичный файл CLI службы "Речь".

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

spx recognize --file whatstheweatherlike.wav

Примечание.

По умолчанию интерфейс командной строки службы "Речь" использует английский язык. Вы можете выбрать другой язык от речи к текстовой таблице. Например, для распознавания речи на немецком добавьте --source de-DE.

В интерфейсе командной строки службы "Речь" транскрипция текста отображается на экране.

Запуск и использование контейнера

Контейнеры службы "Речь" предоставляют API конечных точек запросов на основе websocket, к которым обращается пакет SDK службы "Речь" и CLI службы "Речь". По умолчанию пакет SDK службы "Речь" и cli службы "Речь" используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.

Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.