Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Справочная документация | Пакет (NuGet) | Дополнительные примеры на GitHub
В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.
Чтобы узнать, как настроить среду для примерного приложения, см. Краткое руководство: Распознавание и преобразование речи в текст.
Создать экземпляр конфигурации речи
Чтобы вызвать службу "Речь" с помощью пакета SDK для службы "Речь", необходимо создать экземпляр SpeechConfig
. Этот класс содержит сведения о вашей подписке, такие как ключ и связанный регион, конечная точка, узел или маркер авторизации.
- Создайте ресурс служб ИИ для "Речь" в портале Azure. Получите ключ ресурса службы "Речь" и конечную точку.
-
SpeechConfig
Создайте экземпляр с помощью следующего кода. Замените иYourSpeechEndpoint
наYourSpeechKey
ключ ресурса службы "Речь" и конечную точку.
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.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
}
}
Инициализировать 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.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
await FromMic(speechConfig);
}
}
Если необходимо использовать конкретное входное аудиоустройство, необходимо указать код устройства в AudioConfig
. Чтобы узнать, как получить идентификатор устройства, см. Выбор звукового устройства ввода с помощью SDK службы Speech.
Распознать речь из файла
Чтобы распознавать речь из звукового файла, а не с микрофона, вам все равно нужно создать экземпляр 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.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
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.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
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 endpoint 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 endpoint 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.FromEndpoint(new Uri("YourSpeechEndpoint"), "YourSpeechKey");
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 или более поздней.
- Семантическая сегментация предназначена только для использования в непрерывном распознавании. К ним относятся такие сценарии, как диктовка и субтитры. Его не следует использовать в одном режиме распознавания или интерактивных сценариях.
- Семантическая сегментация недоступна для всех языков и языковых стандартов.
- Семантическая сегментация пока не поддерживает оценки достоверности и списки NBest. Таким образом, мы не рекомендуем семантическую сегментацию, если вы используете оценки уверенности или списки NBest.
Справочная документация | Пакет (NuGet) | Дополнительные примеры на GitHub
В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.
Узнайте, как настроить среду для примера приложения в Кратком руководстве: Распознавание и преобразование речи в текст.
Создайте экземпляр конфигурации речи
Чтобы вызвать службу распознавания речи с помощью SDK для речи, необходимо создать экземпляр SpeechConfig
. Этот класс содержит сведения о вашей подписке, такие как ключ и связанный регион, конечная точка, узел или маркер авторизации.
- Создайте ресурс ИИ служб для функций "Речь" в портале Azure. Получите ключ ресурса службы "Речь" и конечную точку.
-
SpeechConfig
Создайте экземпляр с помощью следующего кода. ЗаменитеYourSpeechKey
иYourSpeechEndpoint
на ключ ресурса службы "Речь" и конечную точку соответственно.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
auto speechConfig = SpeechConfig::FromEndpoint("YourServiceEndpoint", "YourSubscriptionKey");
Инициализировать 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
. Сведения о том, как получить идентификатор устройства, см. в разделе Выбор звукового устройства ввода с помощью Speech 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 endpoint 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 endpoint 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::FromEndpoint("YourServiceEndpoint", "YourSubscriptionKey");
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 или более поздней.
- Семантическая сегментация предназначена только для использования в непрерывном распознавании. К ним относятся такие сценарии, как диктовка и субтитры. Его не следует использовать в одном режиме распознавания или интерактивных сценариях.
- Семантическая сегментация доступна не для всех языков и регионов.
- Семантическая сегментация пока не поддерживает оценки достоверности и списки NBest. Таким образом, мы не рекомендуем семантику сегментации, если вы используете оценки достоверности или списки NBest.
Справочная документация | Пакет (Go) | Дополнительные примеры на GitHub
В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.
Чтобы узнать, как настроить среду для примера приложения, см. Краткое руководство: распознавание и преобразование речи в текст.
Распознавание речи на текст с микрофона
- Создайте ресурс ИИ для службы "Речь" в портале Azure. Получите ключ ресурса для распознавания речи и регион.
- Используйте следующий пример кода для запуска распознавания речи с микрофона устройства по умолчанию. Замените
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 для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.
Чтобы узнать, как настроить среду для примера приложения, см. Краткое руководство: Распознавание и преобразование речи в текст.
Создать экземпляр конфигурации речи
Чтобы вызвать службу "Речь" с помощью Speech SDK, необходимо создать экземпляр SpeechConfig. Этот класс содержит сведения о вашей подписке, такие как ключ и связанный регион, конечная точка, узел или маркер авторизации.
- Создайте ресурс служб ИИ для службы "Речь" в портале Azure. Получите ключ ресурса Speech и регион.
- Создайте
SpeechConfig
экземпляр, используя ваш ключ для "Speech" и регион.
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
. Чтобы узнать, как получить идентификатор устройства, см. раздел "Выбор устройства аудиоввода с помощью Speech 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, к которым обращаются с помощью Speech SDK и Speech CLI. По умолчанию SDK и CLI для службы "Речь" используют публично доступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.
Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.
Семантическая сегментация
Семантическая сегментация — это стратегия сегментации распознавания речи, предназначенная для устранения проблем, связанных с сегментацией на основе молчания:
- Недостаточная сегментация: когда пользователи говорят долго без пауз, они могут видеть длинную последовательность текста без разрывов ("стена текста"), что значительно снижает их удобочитаемость.
- Чрезмерное сегментирование: Когда пользователь ненадолго останавливается, механизм обнаружения молчания может сегментировать неправильно.
Вместо того чтобы полагаться только на время ожидания молчания, семантическая сегментация в основном разбивает на сегменты и возвращает окончательные результаты, когда она обнаруживает знаки препинания, заканчивающие предложение (например, '.' или '?'). Это улучшает опыт пользователя за счет более высокого качества и семантически завершенных сегментов, а также предотвращает продолжительные промежуточные результаты.
Чтобы использовать семантику сегментации, необходимо задать следующее свойство в экземпляре, используемом SpeechConfig
для создания SpeechRecognizer
:
speechConfig.SetProperty(PropertyId.Speech_SegmentationStrategy, "Semantic");
Ниже приведены некоторые ограничения семантической сегментации.
- Для использования семантической сегментации необходимо использовать пакет SDK службы "Речь" версии 1.41 или более поздней.
- Семантическая сегментация предназначена только для использования в непрерывном распознавании. К ним относятся такие сценарии, как диктовка и субтитры. Его не следует использовать в одном режиме распознавания или интерактивных сценариях.
- Семантическая сегментация недоступна для всех языков и локалей.
- Семантическая сегментация пока не поддерживает оценки достоверности и списки NBest. Мы не рекомендуем семантическую сегментацию, если вы используете оценку достоверности или списки NBest.
Справочная документация | Пакет (npm) | Дополнительные примеры на GitHub | Исходный код библиотеки
В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.
Чтобы узнать, как настроить среду для примерного приложения, см. Краткое руководство: Распознавание и преобразование речи в текст.
Создать экземпляр конфигурации речи
Чтобы вызвать службу распознавания речи с помощью пакета Speech SDK, необходимо создать экземпляр SpeechConfig
. Этот класс содержит сведения о вашей подписке, такие как ключ и связанный регион, конечная точка, узел или маркер авторизации.
- Создайте ресурс ИИ для "Речи" в портале Azure. Получите ключ службы "Речь" и регион.
-
SpeechConfig
Создайте экземпляр с помощью следующего кода. Замените и заменитеYourSpeechKey
ключ ресурса службы "Речь" иYourSpeechRegion
регион.
const speechConfig = sdk.SpeechConfig.fromSubscription("YourSpeechKey", "YourSpeechRegion");
Инициализировать SpeechConfig
можно несколькими способами:
- Используйте конечную точку и передайте конечную точку службы речевого распознавания. Ключ или маркер авторизации являются необязательными.
- Используйте хост и введите его адрес. Ключ или маркер авторизации являются необязательными.
- Используйте маркер авторизации с соответствующим регионом или расположением.
Примечание.
Независимо от того, выполняется ли распознавание речи, синтез речи, перевод или распознавание намерений, всегда создается конфигурация.
Распознавание речи с микрофона
Распознавание речи с микрофона не поддерживается в Node.js. Эта функция поддерживается только в среде JavaScript на основе браузера. Дополнительные сведения см. в примере React и реализации речи с микрофона на GitHub. В примере React показаны конструктивные шаблоны для обмена и управления маркерами проверки подлинности, В нем также показана запись звука с микрофона или файла для преобразования речи в текст.
Примечание.
Если необходимо использовать конкретное входное аудиоустройство, необходимо указать код устройства в AudioConfig
. Чтобы узнать, как получить идентификатор устройства, см. раздел "Выбор устройства ввода звука с помощью Speech 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. Щелкните ссылку, чтобы просмотреть инструкции по установке для каждого примера:
- Распознавание речи с микрофона в macOS с помощью Objective-C
- Распознавание речи в iOS с помощью Objective-C
- Дополнительные примеры для Objective-C в iOS
Дополнительные сведения см. в разделе справки по Speech 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 для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.
Чтобы узнать, как настроить среду для примера приложения, см. Краткое руководство: Распознавание и преобразование речи в текст.
Установка Speech SDK и примеров
Репозиторий Azure-Samples/cognitive-services-speech-sdk включает примеры, написанные на Swift для iOS и Mac. Щелкните ссылку, чтобы просмотреть инструкции по установке для каждого примера:
Дополнительные сведения см. в справочнике по Speech SDK для Objective-C.
Используйте пользовательскую конечную точку
С помощью пользовательской речи можно отправлять собственные данные, тестировать и обучать пользовательскую модель, сравнивать точность между моделями и развертывать модель в настраиваемую конечную точку. В следующем примере показано, как задать пользовательскую конечную точку:
let speechConfig = SPXSpeechConfiguration(subscription: "YourSubscriptionKey", region: "YourServiceRegion");
speechConfig.endpointId = "YourEndpointId";
let speechRecognizer = SPXSpeechRecognizer(speechConfiguration: speechConfig);
Запуск и использование контейнера
Контейнеры для распознавания речи предоставляют API конечных точек запросов на основе WebSocket, которые доступны через Speech SDK и Speech CLI. По умолчанию, Speech SDK и Speech CLI используют общедоступную службу "Речь". Чтобы использовать контейнер, вам необходимо изменить метод инициализации. Используйте URL-адрес узла контейнера вместо ключа и региона.
Дополнительные сведения о контейнерах см. в разделе URL-адреса узлов в разделе "Установка и запуск контейнеров службы "Речь" с помощью Docker.
Справочные примеры пакета документации | (PyPi) | Дополнительные примеры на GitHub
В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.
Чтобы узнать, как настроить среду для образца приложения, см. Краткое руководство: распознавание и преобразование речи в текст.
Создать экземпляр конфигурации речи
Чтобы вызвать службу "Речь" с помощью пакета SDK, необходимо создать экземпляр SpeechConfig
. Этот класс содержит сведения о подписке, например ключ речи и связанный регион, конечную точку, узел или маркер авторизации.
- Создайте ресурс сервисов ИИ для "Речь" в портале Azure. Получите ключ ресурса "Речь" и регион.
-
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
и передать его в параметр SpeechRecognizer
конструктора audio_config
. Сведения о том, как получить идентификатор устройства, см. в разделе Выберите звуковое устройство ввода с помощью Speech 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()
global 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 или более поздней.
- Семантическая сегментация предназначена только для использования в непрерывном распознавании. К ним относятся такие сценарии, как диктовка и субтитры. Его не следует использовать в одном режиме распознавания или интерактивных сценариях.
- Семантическая сегментация недоступна для всех языков и локалей.
- Семантическая сегментация пока не поддерживает оценки достоверности и списки 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
}
Дополнительные сведения см. в разделе справки Speech to text REST API reference.
В этом руководстве вы узнаете, как использовать речь искусственного интеллекта Azure для преобразования речи в режиме реального времени в текст. Распознавание речи в режиме реального времени идеально подходит для приложений, требующих немедленного транскрибирования, таких как диктовка, помощь в центре вызовов и субтитры для динамических собраний.
Чтобы ознакомиться с настройкой среды для образца приложения, см. Краткое руководство: Распознавание и преобразование речи в текст.
Распознавание речи с микрофона
Подключите и включите микрофон компьютера и закройте любые приложения, которые также могут использовать микрофон. Некоторые компьютеры имеют встроенный микрофон, в то время как для других необходима настройка устройства Bluetooth.
Итак, все готово для запуска интерфейса командной строки службы "Речь" для распознавания речи с микрофона. В командной строке перейдите в каталог, в котором содержится бинарный файл CLI для Speech. Затем выполните следующую команду.
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.