Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Внимание
LUIS будет выведен из эксплуатации 1 октября 2025 года. По состоянию на 1 апреля 2023 г. невозможно создать новые ресурсы LUIS. Мы рекомендуем переносить приложения LUIS в модуль понимания разговорного языка, чтобы воспользоваться дальнейшей поддержкой продукта и многоязычными возможностями.
Понимание разговорного языка (CLU) доступно для C# и C++ с Speech SDK версии 1.25 или более поздней. Ознакомьтесь с кратким руководством по распознаванию намерений с использованием платформы Speech SDK и CLU.
Справочная документация | Пакет (NuGet) | Дополнительные примеры на GitHub
В этом кратком руководстве вы будете использовать Speech SDK и службу Language Understanding (LUIS), чтобы распознавать намерения из звуковых данных, полученных с микрофона. В частности, вы будете использовать Speech SDK для захвата речи и предварительно созданную предметную область в LUIS для определения намерений системы домашней автоматизации, таких как включение и выключение света.
Предварительные условия
- Подписка Azure — создайте бесплатную учетную запись.
-
Создайте языковой ресурс в портале Azure. Вы можете использовать бесплатный тарифный план (
F0
), чтобы попробовать службу, а затем перейти на платный план для работы в продакшене. На этот раз вам не потребуется ресурс AI Foundry для работы с голосом. - Получите ключ ресурса языка и регион. После развертывания языкового ресурса выберите Перейти к ресурсу, чтобы просмотреть и управлять ключами.
Создание приложения LUIS для распознавания намерений
Чтобы завершить начальный процесс по распознаванию намерений, необходимо создать учетную запись LUIS и проект с помощью портала версии предварительного просмотра LUIS. Для работы с этим кратким руководством требуется подписка LUIS в регионе, где доступна возможность распознавания намерений. Подписка на службу "Речь" не является обязательной.
В первую очередь необходимо создать учетную запись и приложение LUIS с помощью портала LUIS предварительной версии. Приложение LUIS, которое вы создадите, будет использовать заранее созданный домен для домашней автоматизации, предоставляющий намерения, сущности и примеры высказываний. Когда все будет готово, у вас будет работающая в облаке конечная точка LUIS, которую можно вызвать с помощью сервиса Speech SDK.
Чтобы создать приложение LUIS, выполните эти инструкции:
Когда все будет готово, вам потребуется следующее:
- перепубликовать с включённой функцией подготовки речи.
- LUIS первичный ключ
- Ваш LUIS расположение
- идентификатор приложения LUIS.
Вот как найти эти данные на портале LUIS предварительной версии:
На портале предварительной версии LUIS выберите свое приложение и нажмите кнопку Опубликовать.
Выберите слот производственный, если используете
en-US
, выберите пункт Изменить параметры и установите переключатель опции Подготовка речи в положение Вкл.. Затем нажмите кнопку Опубликовать.Внимание
Настоятельно рекомендуем включить подготовку речи. Это повысит точность распознавания речи.
На портале выберите вкладку Управление, а затем раздел Ресурсы Azure. На этой странице вы найдете ключ и расположение LUIS (иногда оно называется регионом) для ресурса прогнозирования LUIS.
Когда вы получите ключ и местоположение, вам понадобится идентификатор приложения. Выберите Параметры. ИД вашего приложения доступно на этой странице.
Откройте проект в Visual Studio.
Затем откройте проект в Visual Studio.
- Запустите Visual Studio 2019.
- Загрузите проект и откройте
Program.cs
.
Начните с шаблонного кода
Добавим код, который выступает в качестве основы для нашего проекта. Имейте в виду, что вы создали асинхронный метод RecognizeIntentAsync()
.
using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Intent;
namespace helloworld
{
class Program
{
public static async Task RecognizeIntentAsync()
{
}
static async Task Main()
{
await RecognizeIntentAsync();
Console.WriteLine("Please press <Return> to continue.");
Console.ReadLine();
}
}
}
Создание конфигурации службы "Речь"
Прежде чем инициализировать объект IntentRecognizer
, необходимо создать конфигурацию, использующую ключ и расположение ресурса прогнозирования LUIS.
Внимание
Ключ для начала работы и ключ разработки не будут работать. Необходимо использовать ваши созданные вами ранее ключ прогнозирования и конфигурацию расположения. Дополнительные сведения см. в разделе Создание приложения LUIS для распознавания намерений.
Вставьте код в метод RecognizeIntentAsync()
. Обязательно обновите следующие значения:
- Замените
"YourLanguageUnderstandingSubscriptionKey"
ключом прогнозирования LUIS. - Замените
"YourLanguageUnderstandingServiceRegion"
расположением LUIS. Используйте идентификатор региона из региона
Совет
Если вам нужна помощь с поиском этих значений, перейдите к разделу Создание приложения LUIS для распознавания намерений.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
var config = SpeechConfig.FromSubscription(
"YourLanguageUnderstandingSubscriptionKey",
"YourLanguageUnderstandingServiceRegion");
В этом примере метод FromSubscription()
используется для создания SpeechConfig
. Полный список доступных методов см. в статье SpeechConfig Class (Класс SpeechConfig).
Пакет SDK для распознавания речи по умолчанию использует язык en-us. Сведения о выборе исходного языка см. в разделе Как распознать речь.
Инициализируйте объект IntentRecognizer
Теперь создадим объект IntentRecognizer
. Этот объект создается в контексте оператора using для обеспечения надлежащего освобождения неуправляемых ресурсов. Вставьте этот код в метод RecognizeIntentAsync()
непосредственно под вашей конфигурацией Speech.
// Creates an intent recognizer using microphone as audio input.
using (var recognizer = new IntentRecognizer(config))
{
}
Добавьте модель LanguageUnderstandingModel и определите намерения.
Необходимо сопоставить объект LanguageUnderstandingModel
с распознавателем намерений и добавить намерения, которые необходимо распознать. Мы будем использовать намерения из предварительно созданной предметной области для системы домашней автоматики. Вставьте этот код в оператор using из предыдущего раздела. Обязательно замените "YourLanguageUnderstandingAppId"
идентификатором приложения LUIS.
Совет
Если вам нужна помощь с поиском этих значений, перейдите к разделу Создание приложения LUIS для распознавания намерений.
// Creates a Language Understanding model using the app id, and adds specific intents from your model
var model = LanguageUnderstandingModel.FromAppId("YourLanguageUnderstandingAppId");
recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");
В этом примере функция AddIntent()
используется для индивидуального добавления намерений. Если требуется добавить все намерения из модели, используйте AddAllIntents(model)
и передайте модель.
Распознавание намерения
В объекте IntentRecognizer
необходимо вызвать метод RecognizeOnceAsync()
. Этот метод позволяет службе распознавания речи узнать, что отправляется одна фраза для распознавания, и после её идентификации необходимо прекратить распознавание речи.
В операторе using добавьте указанный ниже код под вашим кодом модели.
// Starts recognizing.
Console.WriteLine("Say something...");
// Starts intent recognition, and returns after a single utterance is recognized. The end of a
// single utterance is determined by listening for silence at the end or until a maximum of about 30
// seconds of audio is processed. The task returns the recognition text as result.
// Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
// shot recognition like command or query.
// For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
var result = await recognizer.RecognizeOnceAsync();
Отображение результатов распознавания (или ошибок)
Когда сервис распознавания речи возвращает результат, необходимо что-то с ним сделать. Мы сделаем это просто и выведем результаты на консоль.
Внутри директивы using, под RecognizeOnceAsync()
, добавьте этот код:
// Checks result.
switch (result.Reason)
{
case ResultReason.RecognizedIntent:
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
Console.WriteLine($" Intent Id: {result.IntentId}.");
var json = result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult);
Console.WriteLine($" Language Understanding JSON: {json}.");
break;
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
Console.WriteLine($" Intent not recognized.");
break;
case ResultReason.NoMatch:
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled:
var cancellation = CancellationDetails.FromResult(result);
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 update the subscription info?");
}
break;
}
Проверка кода
На этом этапе код должен выглядеть так:
Примечание.
Мы добавили несколько комментариев к этой версии.
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.md file in the project root for full license information.
//
// <skeleton_1>
using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Intent;
namespace helloworld
{
class Program
{
public static async Task RecognizeIntentAsync()
{
// </skeleton_1>
// Creates an instance of a speech config with specified subscription key
// and service region. Note that in contrast to other services supported by
// the Cognitive Services Speech SDK, the Language Understanding service
// requires a specific subscription key from https://www.luis.ai/.
// The Language Understanding service calls the required key 'endpoint key'.
// Once you've obtained it, replace with below with your own Language Understanding subscription key
// and service region (e.g., "westus").
// The default language is "en-us".
// <create_speech_configuration>
var config = SpeechConfig.FromSubscription(
"YourLanguageUnderstandingSubscriptionKey",
"YourLanguageUnderstandingServiceRegion");
// </create_speech_configuration>
// <create_intent_recognizer_1>
// Creates an intent recognizer using microphone as audio input.
using (var recognizer = new IntentRecognizer(config))
{
// </create_intent_recognizer_1>
// <add_intents>
// Creates a Language Understanding model using the app id, and adds specific intents from your model
var model = LanguageUnderstandingModel.FromAppId("YourLanguageUnderstandingAppId");
recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");
// </add_intents>
// To add all of the possible intents from a LUIS model to the recognizer, uncomment the line below:
// recognizer.AddAllIntents(model);
// <recognize_intent>
// Starts recognizing.
Console.WriteLine("Say something...");
// Starts intent recognition, and returns after a single utterance is recognized. The end of a
// single utterance is determined by listening for silence at the end or until a maximum of about 30
// seconds of audio is processed. The task returns the recognition text as result.
// Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
// shot recognition like command or query.
// For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
var result = await recognizer.RecognizeOnceAsync();
// </recognize_intent>
// <print_results>
// Checks result.
switch (result.Reason)
{
case ResultReason.RecognizedIntent:
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
Console.WriteLine($" Intent Id: {result.IntentId}.");
var json = result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult);
Console.WriteLine($" Language Understanding JSON: {json}.");
break;
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: Text={result.Text}");
Console.WriteLine($" Intent not recognized.");
break;
case ResultReason.NoMatch:
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
break;
case ResultReason.Canceled:
var cancellation = CancellationDetails.FromResult(result);
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 update the subscription info?");
}
break;
}
// </print_results>
// <create_intent_recognizer_2>
}
// </create_intent_recognizer_2>
// <skeleton_2>
}
static async Task Main()
{
await RecognizeIntentAsync();
Console.WriteLine("Please press <Return> to continue.");
Console.ReadLine();
}
}
}
// </skeleton_2>
Создание и запуск приложения
Теперь можно приступать к созданию приложения и проверке распознавания речи, используя службу "Речь".
- Скомпилируйте код. В строке меню Visual Studio выберите Сборка>Собрать решение.
- Запустите приложение. В строке меню выберите Отладка>Начать отладку или нажмите клавишу F5.
- Начните распознавание. Вам будет предложено произнести фразу на английском языке. Речь, записанная в виде текста, отправляется в службу "Речь" и выводится в консоли.
Справочная документация | Пакет (NuGet) | Дополнительные примеры на GitHub
В этом кратком руководстве вы будете использовать Speech SDK и службу Language Understanding (LUIS), чтобы распознавать намерения из звуковых данных, полученных с микрофона. В частности, вы будете использовать Speech SDK для захвата речи и предварительно созданную предметную область в LUIS для определения намерений системы домашней автоматизации, таких как включение и выключение света.
Предварительные условия
- Подписка Azure — создайте бесплатную учетную запись.
-
Создайте языковой ресурс в портале Azure. Вы можете использовать бесплатный тарифный план (
F0
), чтобы попробовать службу, а затем перейти на платный план для работы в продакшене. На этот раз вам не потребуется ресурс AI Foundry для работы с голосом. - Получите ключ ресурса языка и регион. После развертывания языкового ресурса выберите Перейти к ресурсу, чтобы просмотреть и управлять ключами.
Создание приложения LUIS для распознавания намерений
Чтобы завершить начальный процесс по распознаванию намерений, необходимо создать учетную запись LUIS и проект с помощью портала версии предварительного просмотра LUIS. Для работы с этим кратким руководством требуется подписка LUIS в регионе, где доступна возможность распознавания намерений. Подписка на службу "Речь" не является обязательной.
В первую очередь необходимо создать учетную запись и приложение LUIS с помощью портала LUIS предварительной версии. Приложение LUIS, которое вы создадите, будет использовать заранее созданный домен для домашней автоматизации, предоставляющий намерения, сущности и примеры высказываний. Когда все будет готово, у вас будет работающая в облаке конечная точка LUIS, которую можно вызвать с помощью сервиса Speech SDK.
Чтобы создать приложение LUIS, выполните эти инструкции:
Когда все будет готово, вам потребуется следующее:
- перепубликовать с включённой функцией подготовки речи.
- LUIS первичный ключ
- Ваш LUIS расположение
- идентификатор приложения LUIS.
Вот как найти эти данные на портале LUIS предварительной версии:
На портале предварительной версии LUIS выберите свое приложение и нажмите кнопку Опубликовать.
Выберите слот производственный, если используете
en-US
, выберите пункт Изменить параметры и установите переключатель опции Подготовка речи в положение Вкл.. Затем нажмите кнопку Опубликовать.Внимание
Настоятельно рекомендуем включить подготовку речи. Это повысит точность распознавания речи.
На портале выберите вкладку Управление, а затем раздел Ресурсы Azure. На этой странице вы найдете ключ и расположение LUIS (иногда оно называется регионом) для ресурса прогнозирования LUIS.
Когда вы получите ключ и местоположение, вам понадобится идентификатор приложения. Выберите Параметры. ИД вашего приложения доступно на этой странице.
Откройте проект в Visual Studio.
Затем откройте проект в Visual Studio.
- Запустите Visual Studio 2019.
- Загрузите проект и откройте
helloworld.cpp
.
Начните с шаблонного кода
Добавим код, который выступает в качестве основы для нашего проекта. Имейте в виду, что вы создали асинхронный метод recognizeIntent()
.
#include "stdafx.h"
#include <iostream>
#include <speechapi_cxx.h>
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Intent;
void recognizeIntent()
{
}
int wmain()
{
try
{
recognizeIntent();
}
catch (exception e)
{
cout << e.what();
}
cout << "Please press a key to continue.\n";
cin.get();
return 0;
}
Создание конфигурации службы "Речь"
Прежде чем инициализировать объект IntentRecognizer
, необходимо создать конфигурацию, использующую ключ и расположение ресурса прогнозирования LUIS.
Внимание
Ключ для начала работы и ключ разработки не будут работать. Необходимо использовать ваши созданные вами ранее ключ прогнозирования и конфигурацию расположения. Дополнительные сведения см. в разделе Создание приложения LUIS для распознавания намерений.
Вставьте код в метод recognizeIntent()
. Обязательно обновите следующие значения:
- Замените
"YourLanguageUnderstandingSubscriptionKey"
ключом прогнозирования LUIS. - Замените
"YourLanguageUnderstandingServiceRegion"
расположением LUIS. Используйте идентификатор региона из региона
Совет
Если вам нужна помощь с поиском этих значений, перейдите к разделу Создание приложения LUIS для распознавания намерений.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
auto config = SpeechConfig::FromSubscription(
"YourLanguageUnderstandingSubscriptionKey",
"YourLanguageUnderstandingServiceRegion");
В этом примере метод FromSubscription()
используется для создания SpeechConfig
. Полный список доступных методов см. в статье SpeechConfig Class (Класс SpeechConfig).
Пакет SDK для распознавания речи по умолчанию использует язык en-us. Сведения о выборе исходного языка см. в разделе Как распознать речь.
Инициализируйте объект IntentRecognizer
Теперь создадим объект IntentRecognizer
. Вставьте этот код в метод recognizeIntent()
непосредственно под вашей конфигурацией Speech.
// Creates an intent recognizer using microphone as audio input.
auto recognizer = IntentRecognizer::FromConfig(config);
Добавьте модель "LanguageUnderstandingModel" и интенты.
Необходимо сопоставить объект LanguageUnderstandingModel
с распознавателем намерений и добавить намерения, которые необходимо распознать. Мы будем использовать намерения из предварительно созданной предметной области для системы домашней автоматики.
Вставьте этот код ниже вашего IntentRecognizer
. Обязательно замените "YourLanguageUnderstandingAppId"
идентификатором приложения LUIS.
Совет
Если вам нужна помощь с поиском этих значений, перейдите к разделу Создание приложения LUIS для распознавания намерений.
// Creates a Language Understanding model using the app id, and adds specific intents from your model
auto model = LanguageUnderstandingModel::FromAppId("YourLanguageUnderstandingAppId");
recognizer->AddIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
recognizer->AddIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
recognizer->AddIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");
В этом примере функция AddIntent()
используется для индивидуального добавления намерений. Если требуется добавить все намерения из модели, используйте AddAllIntents(model)
и передайте модель.
Распознавание намерения
В объекте IntentRecognizer
необходимо вызвать метод RecognizeOnceAsync()
. Этот метод позволяет службе распознавания речи узнать, что отправляется одна фраза для распознавания, и после её идентификации необходимо прекратить распознавание речи. Для удобства мы дождемся завершения возврата.
Вставьте этот код ниже вашей модели.
cout << "Say something...\n";
// Starts intent recognition, and returns after a single utterance is recognized. The end of a
// single utterance is determined by listening for silence at the end or until a maximum of about 30
// seconds of audio is processed. The task returns the recognition text as result.
// Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
// shot recognition like command or query.
// For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
auto result = recognizer->RecognizeOnceAsync().get();
Отображение результатов распознавания (или ошибок)
Когда сервис распознавания речи возвращает результат, необходимо что-то с ним сделать. Мы упрощённо выведем результат на консоль.
Вставьте код ниже под строкой auto result = recognizer->RecognizeOnceAsync().get();
.
// Checks result.
if (result->Reason == ResultReason::RecognizedIntent)
{
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
cout << " Intent Id: " << result->IntentId << std::endl;
cout << " Intent Service JSON: " << result->Properties.GetProperty(PropertyId::LanguageUnderstandingServiceResponse_JsonResult) << std::endl;
}
else if (result->Reason == ResultReason::RecognizedSpeech)
{
cout << "RECOGNIZED: Text=" << result->Text << " (intent could not be recognized)" << std::endl;
}
else if (result->Reason == ResultReason::NoMatch)
{
cout << "NOMATCH: Speech could not be recognized." << std::endl;
}
else if (result->Reason == 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 update the subscription info?" << std::endl;
}
}
Проверка кода
На этом этапе код должен выглядеть так:
Примечание.
Мы добавили несколько комментариев к этой версии.
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.md file in the project root for full license information.
//
// <skeleton_1>
#include "stdafx.h"
#include <iostream>
#include <speechapi_cxx.h>
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Intent;
void recognizeIntent()
{
// </skeleton_1>
// Creates an instance of a speech config with specified subscription key
// and service region. Note that in contrast to other services supported by
// the Cognitive Services Speech SDK, the Language Understanding service
// requires a specific subscription key from https://www.luis.ai/.
// The Language Understanding service calls the required key 'endpoint key'.
// Once you've obtained it, replace with below with your own Language Understanding subscription key
// and service region (e.g., "westus").
// The default recognition language is "en-us".
// <create_speech_configuration>
auto config = SpeechConfig::FromSubscription(
"YourLanguageUnderstandingSubscriptionKey",
"YourLanguageUnderstandingServiceRegion");
// </create_speech_configuration>
// <create_intent_recognizer>
// Creates an intent recognizer using microphone as audio input.
auto recognizer = IntentRecognizer::FromConfig(config);
// </create_intent_recognizer>
// <add_intents>
// Creates a Language Understanding model using the app id, and adds specific intents from your model
auto model = LanguageUnderstandingModel::FromAppId("YourLanguageUnderstandingAppId");
recognizer->AddIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
recognizer->AddIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
recognizer->AddIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");
// </add_intents>
// To add all of the possible intents from a LUIS model to the recognizer, uncomment the line below:
// recognizer->AddAllIntents(model);
// <recognize_intent>
cout << "Say something...\n";
// Starts intent recognition, and returns after a single utterance is recognized. The end of a
// single utterance is determined by listening for silence at the end or until a maximum of about 30
// seconds of audio is processed. The task returns the recognition text as result.
// Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
// shot recognition like command or query.
// For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
auto result = recognizer->RecognizeOnceAsync().get();
// </recognize_intent>
// <print_results>
// Checks result.
if (result->Reason == ResultReason::RecognizedIntent)
{
cout << "RECOGNIZED: Text=" << result->Text << std::endl;
cout << " Intent Id: " << result->IntentId << std::endl;
cout << " Intent Service JSON: " << result->Properties.GetProperty(PropertyId::LanguageUnderstandingServiceResponse_JsonResult) << std::endl;
}
else if (result->Reason == ResultReason::RecognizedSpeech)
{
cout << "RECOGNIZED: Text=" << result->Text << " (intent could not be recognized)" << std::endl;
}
else if (result->Reason == ResultReason::NoMatch)
{
cout << "NOMATCH: Speech could not be recognized." << std::endl;
}
else if (result->Reason == 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 update the subscription info?" << std::endl;
}
}
// </print_results>
// <skeleton_2>
}
int wmain()
{
try
{
recognizeIntent();
}
catch (exception e)
{
cout << e.what();
}
cout << "Please press a key to continue.\n";
cin.get();
return 0;
}
// </skeleton_2>
Создание и запуск приложения
Теперь можно приступать к созданию приложения и проверке распознавания речи, используя службу "Речь".
- Скомпилируйте код. В строке меню Visual Studio выберите Сборка>Собрать решение.
- Запустите приложение. В строке меню выберите Отладка>Начать отладку или нажмите клавишу F5.
- Начните распознавание. Вам будет предложено произнести фразу на английском языке. Речь, записанная в виде текста, отправляется в службу "Речь" и выводится в консоли.
Справочная документация | Дополнительные примеры на GitHub
В этом кратком руководстве вы будете использовать Speech SDK и службу Language Understanding (LUIS), чтобы распознавать намерения из звуковых данных, полученных с микрофона. В частности, вы будете использовать Speech SDK для захвата речи и предварительно созданную предметную область в LUIS для определения намерений системы домашней автоматизации, таких как включение и выключение света.
Предварительные условия
- Подписка Azure — создайте бесплатную учетную запись.
-
Создайте языковой ресурс в портале Azure. Вы можете использовать бесплатный тарифный план (
F0
), чтобы попробовать службу, а затем перейти на платный план для работы в продакшене. На этот раз вам не потребуется ресурс AI Foundry для работы с голосом. - Получите ключ ресурса языка и регион. После развертывания языкового ресурса выберите Перейти к ресурсу, чтобы просмотреть и управлять ключами.
Вам также потребуется установить пакет SDK для Работы с речью для вашей среды разработки и создать пустой образец проекта.
Создание приложения LUIS для распознавания намерений
Чтобы завершить начальный процесс по распознаванию намерений, необходимо создать учетную запись LUIS и проект с помощью портала версии предварительного просмотра LUIS. Для работы с этим кратким руководством требуется подписка LUIS в регионе, где доступна возможность распознавания намерений. Подписка на службу "Речь" не является обязательной.
В первую очередь необходимо создать учетную запись и приложение LUIS с помощью портала LUIS предварительной версии. Приложение LUIS, которое вы создадите, будет использовать заранее созданный домен для домашней автоматизации, предоставляющий намерения, сущности и примеры высказываний. Когда все будет готово, у вас будет работающая в облаке конечная точка LUIS, которую можно вызвать с помощью сервиса Speech SDK.
Чтобы создать приложение LUIS, выполните эти инструкции:
Когда все будет готово, вам потребуется следующее:
- перепубликовать с включённой функцией подготовки речи.
- LUIS первичный ключ
- Ваш LUIS расположение
- идентификатор приложения LUIS.
Вот как найти эти данные на портале LUIS предварительной версии:
На портале предварительной версии LUIS выберите свое приложение и нажмите кнопку Опубликовать.
Выберите слот производственный, если используете
en-US
, выберите пункт Изменить параметры и установите переключатель опции Подготовка речи в положение Вкл.. Затем нажмите кнопку Опубликовать.Внимание
Настоятельно рекомендуем включить подготовку речи. Это повысит точность распознавания речи.
На портале выберите вкладку Управление, а затем раздел Ресурсы Azure. На этой странице вы найдете ключ и расположение LUIS (иногда оно называется регионом) для ресурса прогнозирования LUIS.
Когда вы получите ключ и местоположение, вам понадобится идентификатор приложения. Выберите Параметры. ИД вашего приложения доступно на этой странице.
Открытие вашего проекта
- Откройте предпочтительную интегрированную среду разработки.
- Загрузите проект и откройте
Main.java
.
Начните с шаблонного кода
Добавим код, который выступает в качестве основы для нашего проекта.
package speechsdk.quickstart;
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.intent.*;
/**
* Quickstart: recognize speech using the Speech SDK for Java.
*/
public class Main {
/**
* @param args Arguments are ignored in this sample.
*/
public static void main(String[] args) {
} catch (Exception ex) {
System.out.println("Unexpected exception: " + ex.getMessage());
assert(false);
System.exit(1);
}
}
}
Создание конфигурации службы "Речь"
Прежде чем инициализировать объект IntentRecognizer
, необходимо создать конфигурацию, использующую ключ и расположение ресурса прогнозирования LUIS.
Вставьте этот код в блок try / catch в main()
. Обязательно обновите следующие значения:
- Замените
"YourLanguageUnderstandingSubscriptionKey"
ключом прогнозирования LUIS. - Замените
"YourLanguageUnderstandingServiceRegion"
расположением LUIS. Используйте идентификатор региона из региона
Совет
Если вам нужна помощь с поиском этих значений, перейдите к разделу Создание приложения LUIS для распознавания намерений.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
// Replace below with with specified subscription key (called 'endpoint key' by the Language Understanding service)
String languageUnderstandingSubscriptionKey = "YourLanguageUnderstandingSubscriptionKey";
// Replace below with your own service region (e.g., "westus").
String languageUnderstandingServiceRegion = "YourLanguageUnderstandingServiceRegion";
// Creates an instance of intent recognizer with a given speech configuration.
// Recognizer is created with the default microphone audio input and default language "en-us".
try (SpeechConfig config = SpeechConfig.fromSubscription(languageUnderstandingSubscriptionKey, languageUnderstandingServiceRegion);
В этом примере метод FromSubscription()
используется для создания SpeechConfig
. Полный список доступных методов см. в статье SpeechConfig Class (Класс SpeechConfig).
Пакет SDK для распознавания речи по умолчанию использует язык en-us. Сведения о выборе исходного языка см. в разделе Как распознать речь.
Инициализируйте объект IntentRecognizer
Теперь создадим объект IntentRecognizer
. Вставьте этот код непосредственно под конфигурацией службы "Речь".
IntentRecognizer recognizer = new IntentRecognizer(config)) {
Добавьте модель "LanguageUnderstandingModel" и интенты.
Необходимо сопоставить объект LanguageUnderstandingModel
с распознавателем намерений и добавить намерения, которые необходимо распознать. Мы будем использовать намерения из предварительно созданной предметной области для системы домашней автоматики.
Вставьте этот код ниже вашего IntentRecognizer
. Обязательно замените "YourLanguageUnderstandingAppId"
идентификатором приложения LUIS.
Совет
Если вам нужна помощь с поиском этих значений, перейдите к разделу Создание приложения LUIS для распознавания намерений.
// Creates a language understanding model using the app id, and adds specific intents from your model
LanguageUnderstandingModel model = LanguageUnderstandingModel.fromAppId("YourLanguageUnderstandingAppId");
recognizer.addIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
recognizer.addIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
recognizer.addIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");
В этом примере функция addIntent()
используется для индивидуального добавления намерений. Если требуется добавить все намерения из модели, используйте addAllIntents(model)
и передайте модель.
Распознавание намерения
В объекте IntentRecognizer
необходимо вызвать метод recognizeOnceAsync()
. Этот метод позволяет службе распознавания речи узнать, что отправляется одна фраза для распознавания, и после её идентификации необходимо прекратить распознавание речи.
Вставьте этот код ниже вашей модели.
System.out.println("Say something...");
// Starts recognition. It returns when the first utterance has been recognized.
IntentRecognitionResult result = recognizer.recognizeOnceAsync().get();
Отображение результатов распознавания (или ошибок)
Когда сервис распознавания речи возвращает результат, необходимо что-то с ним сделать. Мы упрощённо выведем результат на консоль.
Вставьте приведенный ниже код под вызовом recognizeOnceAsync()
.
// Checks result.
if (result.getReason() == ResultReason.RecognizedIntent) {
System.out.println("RECOGNIZED: Text=" + result.getText());
System.out.println(" Intent Id: " + result.getIntentId());
System.out.println(" Intent Service JSON: " + result.getProperties().getProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult));
}
else if (result.getReason() == ResultReason.RecognizedSpeech) {
System.out.println("RECOGNIZED: Text=" + result.getText());
System.out.println(" Intent not recognized.");
}
else if (result.getReason() == ResultReason.NoMatch) {
System.out.println("NOMATCH: Speech could not be recognized.");
}
else if (result.getReason() == ResultReason.Canceled) {
CancellationDetails cancellation = CancellationDetails.fromResult(result);
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 update the subscription info?");
}
}
Проверка кода
На этом этапе код должен выглядеть так:
Примечание.
Мы добавили несколько комментариев к этой версии.
//
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.md file in the project root for full license information.
//
// <skeleton_1>
package speechsdk.quickstart;
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.intent.*;
/**
* Quickstart: recognize speech using the Speech SDK for Java.
*/
public class Main {
/**
* @param args Arguments are ignored in this sample.
*/
public static void main(String[] args) {
// </skeleton_1>
// <create_speech_configuration>
// Replace below with with specified subscription key (called 'endpoint key' by the Language Understanding service)
String languageUnderstandingSubscriptionKey = "YourLanguageUnderstandingSubscriptionKey";
// Replace below with your own service region (e.g., "westus").
String languageUnderstandingServiceRegion = "YourLanguageUnderstandingServiceRegion";
// Creates an instance of intent recognizer with a given speech configuration.
// Recognizer is created with the default microphone audio input and default language "en-us".
try (SpeechConfig config = SpeechConfig.fromSubscription(languageUnderstandingSubscriptionKey, languageUnderstandingServiceRegion);
// </create_speech_configuration>
// <create_intent_recognizer>
IntentRecognizer recognizer = new IntentRecognizer(config)) {
// </create_intent_recognizer>
// <add_intents>
// Creates a language understanding model using the app id, and adds specific intents from your model
LanguageUnderstandingModel model = LanguageUnderstandingModel.fromAppId("YourLanguageUnderstandingAppId");
recognizer.addIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
recognizer.addIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
recognizer.addIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");
// </add_intents>
// To add all of the possible intents from a LUIS model to the recognizer, uncomment the line below:
// recognizer.addAllIntents(model);
// <recognize_intent>
System.out.println("Say something...");
// Starts recognition. It returns when the first utterance has been recognized.
IntentRecognitionResult result = recognizer.recognizeOnceAsync().get();
// </recognize_intent>
// <print_result>
// Checks result.
if (result.getReason() == ResultReason.RecognizedIntent) {
System.out.println("RECOGNIZED: Text=" + result.getText());
System.out.println(" Intent Id: " + result.getIntentId());
System.out.println(" Intent Service JSON: " + result.getProperties().getProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult));
}
else if (result.getReason() == ResultReason.RecognizedSpeech) {
System.out.println("RECOGNIZED: Text=" + result.getText());
System.out.println(" Intent not recognized.");
}
else if (result.getReason() == ResultReason.NoMatch) {
System.out.println("NOMATCH: Speech could not be recognized.");
}
else if (result.getReason() == ResultReason.Canceled) {
CancellationDetails cancellation = CancellationDetails.fromResult(result);
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 update the subscription info?");
}
}
// </print_result>
// <skeleton_2>
} catch (Exception ex) {
System.out.println("Unexpected exception: " + ex.getMessage());
assert(false);
System.exit(1);
}
}
}
// </skeleton_2>
Создание и запуск приложения
Нажмите клавишу F11 или выберите Запустить>Отладка. Слова, произносимые в микрофон, в течение следующих 15 секунд будут распознаны и записаны в окне консоли.
Справочная документация | Пакет (npm) | Дополнительные примеры на GitHub | Исходный код библиотеки
В этом кратком руководстве вы будете использовать Speech SDK и службу Language Understanding (LUIS), чтобы распознавать намерения из звуковых данных, полученных с микрофона. В частности, вы будете использовать Speech SDK для захвата речи и предварительно созданную предметную область в LUIS для определения намерений системы домашней автоматизации, таких как включение и выключение света.
Предварительные условия
- Подписка Azure — создайте бесплатную учетную запись.
-
Создайте языковой ресурс в портале Azure. Вы можете использовать бесплатный тарифный план (
F0
), чтобы попробовать службу, а затем перейти на платный план для работы в продакшене. На этот раз вам не потребуется ресурс AI Foundry для работы с голосом. - Получите ключ ресурса языка и регион. После развертывания языкового ресурса выберите Перейти к ресурсу, чтобы просмотреть и управлять ключами.
Вам также потребуется установить пакет SDK для Работы с речью для вашей среды разработки и создать пустой образец проекта.
Создание приложения LUIS для распознавания намерений
Чтобы завершить начальный процесс по распознаванию намерений, необходимо создать учетную запись LUIS и проект с помощью портала версии предварительного просмотра LUIS. Для работы с этим кратким руководством требуется подписка LUIS в регионе, где доступна возможность распознавания намерений. Подписка на службу "Речь" не является обязательной.
В первую очередь необходимо создать учетную запись и приложение LUIS с помощью портала LUIS предварительной версии. Приложение LUIS, которое вы создадите, будет использовать заранее созданный домен для домашней автоматизации, предоставляющий намерения, сущности и примеры высказываний. Когда все будет готово, у вас будет работающая в облаке конечная точка LUIS, которую можно вызвать с помощью сервиса Speech SDK.
Чтобы создать приложение LUIS, выполните эти инструкции:
Когда все будет готово, вам потребуется следующее:
- перепубликовать с включённой функцией подготовки речи.
- LUIS первичный ключ
- Ваш LUIS расположение
- идентификатор приложения LUIS.
Вот как найти эти данные на портале LUIS предварительной версии:
На портале предварительной версии LUIS выберите свое приложение и нажмите кнопку Опубликовать.
Выберите слот производственный, если используете
en-US
, выберите пункт Изменить параметры и установите переключатель опции Подготовка речи в положение Вкл.. Затем нажмите кнопку Опубликовать.Внимание
Настоятельно рекомендуем включить подготовку речи. Это повысит точность распознавания речи.
На портале выберите вкладку Управление, а затем раздел Ресурсы Azure. На этой странице вы найдете ключ и расположение LUIS (иногда оно называется регионом) для ресурса прогнозирования LUIS.
Когда вы получите ключ и местоположение, вам понадобится идентификатор приложения. Выберите Параметры. ИД вашего приложения доступно на этой странице.
Начните с шаблонного кода
Добавим код, который выступает в качестве основы для нашего проекта.
<!DOCTYPE html>
<html>
<head>
<title>Microsoft Azure AI Speech SDK JavaScript Quickstart</title>
<meta charset="utf-8" />
</head>
<body style="font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:13px;">
</body>
</html>
Добавление элементов пользовательского интерфейса
Теперь мы добавим базовый пользовательский интерфейс для полей ввода, создадим ссылку на код JavaScript пакета SDK службы "Речь" и получим токен авторизации, если он доступен.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
<body style="font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:13px;">
<div id="content" style="display:none">
<table width="100%">
<tr>
<td></td>
<td><h1 style="font-weight:500;">Microsoft Azure AI Speech SDK JavaScript Quickstart</h1></td>
</tr>
<tr>
<td align="right"><a href="/azure/ai-services/speech-service/overview" target="_blank">Subscription</a>:</td>
<td><input id="subscriptionKey" type="text" size="40" value="subscription"></td>
</tr>
<tr>
<td align="right">Region</td>
<td><input id="serviceRegion" type="text" size="40" value="YourServiceRegion"></td>
</tr>
<tr>
<td align="right">Application ID:</td>
<td><input id="appId" type="text" size="60" value="YOUR_LANGUAGE_UNDERSTANDING_APP_ID"></td>
</tr>
<tr>
<td></td>
<td><button id="startIntentRecognizeAsyncButton">Start Intent Recognition</button></td>
</tr>
<tr>
<td align="right" valign="top">Input Text</td>
<td><textarea id="phraseDiv" style="display: inline-block;width:500px;height:200px"></textarea></td>
</tr>
<tr>
<td align="right" valign="top">Result</td>
<td><textarea id="statusDiv" style="display: inline-block;width:500px;height:100px"></textarea></td>
</tr>
</table>
</div>
<script src="microsoft.cognitiveservices.speech.sdk.bundle.js"></script>
<script>
// Replace the URL with a valid endpoint to retrieve
// authorization tokens for your Speech resource.
var authorizationEndpoint = "token.php";
function RequestAuthorizationToken() {
if (authorizationEndpoint) {
var a = new XMLHttpRequest();
a.open("GET", authorizationEndpoint);
a.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
a.send("");
a.onload = function() {
var token = JSON.parse(atob(this.responseText.split(".")[1]));
serviceRegion.value = token.region;
authorizationToken = this.responseText;
subscriptionKey.disabled = true;
subscriptionKey.value = "using authorization token (hit F5 to refresh)";
console.log("Got an authorization token: " + token);
}
}
}
</script>
<script>
// status fields and start button in UI
var phraseDiv;
var statusDiv;
var startIntentRecognizeAsyncButton;
// subscription key, region, and appId for LUIS services.
var subscriptionKey, serviceRegion, appId;
var authorizationToken;
var SpeechSDK;
var recognizer;
document.addEventListener("DOMContentLoaded", function () {
startIntentRecognizeAsyncButton = document.getElementById("startIntentRecognizeAsyncButton");
subscriptionKey = document.getElementById("subscriptionKey");
serviceRegion = document.getElementById("serviceRegion");
appId = document.getElementById("appId");
phraseDiv = document.getElementById("phraseDiv");
statusDiv = document.getElementById("statusDiv");
startIntentRecognizeAsyncButton.addEventListener("click", function () {
startIntentRecognizeAsyncButton.disabled = true;
phraseDiv.innerHTML = "";
statusDiv.innerHTML = "";
});
if (!!window.SpeechSDK) {
SpeechSDK = window.SpeechSDK;
startIntentRecognizeAsyncButton.disabled = false;
document.getElementById('content').style.display = 'block';
document.getElementById('warning').style.display = 'none';
// in case we have a function for getting an authorization token, call it.
if (typeof RequestAuthorizationToken === "function") {
RequestAuthorizationToken();
}
}
});
</script>
Создание конфигурации службы "Речь"
Прежде чем инициализировать SpeechRecognizer
объект, необходимо создать конфигурацию, которая использует ключ ресурса службы "Речь" и регион подписки. Вставьте код в метод startRecognizeOnceAsyncButton.addEventListener()
.
Примечание.
Пакет SDK для распознавания речи по умолчанию использует язык en-us. Сведения о выборе исходного языка см. в разделе Как распознать речь.
// if we got an authorization token, use the token. Otherwise use the provided subscription key
var speechConfig;
if (authorizationToken) {
speechConfig = SpeechSDK.SpeechConfig.fromAuthorizationToken(authorizationToken, serviceRegion.value);
} else {
if (subscriptionKey.value === "" || subscriptionKey.value === "subscription") {
alert("Please enter your Microsoft Azure AI Speech subscription key!");
return;
}
startIntentRecognizeAsyncButton.disabled = false;
speechConfig = SpeechSDK.SpeechConfig.fromSubscription(subscriptionKey.value, serviceRegion.value);
}
speechConfig.speechRecognitionLanguage = "en-US";
Создание конфигурации звука
Теперь вам нужно создать объект AudioConfig
, который указывает на устройство ввода. Вставьте этот код в метод startIntentRecognizeAsyncButton.addEventListener()
непосредственно под вашей конфигурацией Speech.
var audioConfig = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();
Инициализируйте объект IntentRecognizer
Теперь создадим объект IntentRecognizer
с помощью созданных ранее объектов SpeechConfig
и AudioConfig
. Вставьте код в метод startIntentRecognizeAsyncButton.addEventListener()
.
recognizer = new SpeechSDK.IntentRecognizer(speechConfig, audioConfig);
Добавьте модель "LanguageUnderstandingModel" и интенты.
Необходимо сопоставить объект LanguageUnderstandingModel
с распознавателем намерений и добавить намерения, которые необходимо распознать. Мы будем использовать намерения из предварительно созданной предметной области для системы домашней автоматики.
Вставьте этот код ниже вашего IntentRecognizer
. Обязательно замените "YourLanguageUnderstandingAppId"
идентификатором приложения LUIS.
if (appId.value !== "" && appId.value !== "YOUR_LANGUAGE_UNDERSTANDING_APP_ID") {
var lm = SpeechSDK.LanguageUnderstandingModel.fromAppId(appId.value);
recognizer.addAllIntents(lm);
}
Примечание.
SDK для распознавания речи поддерживает только конечные точки LUIS версии 2.0. Нужно вручную изменить URL-адрес конечной точки версии 3.0, который можно найти в поле примера запроса, на шаблон URL-адреса версии 2.0. Для конечных точек LUIS версии 2.0 всегда используется один из двух следующих шаблонов:
https://{AzureResourceName}.cognitiveservices.azure.com/luis/v2.0/apps/{app-id}?subscription-key={subkey}&verbose=true&q=
https://{Region}.api.cognitive.microsoft.com/luis/v2.0/apps/{app-id}?subscription-key={subkey}&verbose=true&q=
Распознавание намерения
В объекте IntentRecognizer
необходимо вызвать метод recognizeOnceAsync()
. Этот метод позволяет службе распознавания речи узнать, что отправляется одна фраза для распознавания, и после её идентификации необходимо прекратить распознавание речи.
Вставьте этот код под моделью:
recognizer.recognizeOnceAsync(
function (result) {
window.console.log(result);
phraseDiv.innerHTML = result.text + "\r\n";
statusDiv.innerHTML += "(continuation) Reason: " + SpeechSDK.ResultReason[result.reason];
switch (result.reason) {
case SpeechSDK.ResultReason.RecognizedSpeech:
statusDiv.innerHTML += " Text: " + result.text;
break;
case SpeechSDK.ResultReason.RecognizedIntent:
statusDiv.innerHTML += " Text: " + result.text + " IntentId: " + result.intentId;
// The actual JSON returned from Language Understanding is a bit more complex to get to, but it is available for things like
// the entity name and type if part of the intent.
statusDiv.innerHTML += " Intent JSON: " + result.properties.getProperty(SpeechSDK.PropertyId.LanguageUnderstandingServiceResponse_JsonResult);
phraseDiv.innerHTML += result.properties.getProperty(SpeechSDK.PropertyId.LanguageUnderstandingServiceResponse_JsonResult) + "\r\n";
break;
case SpeechSDK.ResultReason.NoMatch:
var noMatchDetail = SpeechSDK.NoMatchDetails.fromResult(result);
statusDiv.innerHTML += " NoMatchReason: " + SpeechSDK.NoMatchReason[noMatchDetail.reason];
break;
case SpeechSDK.ResultReason.Canceled:
var cancelDetails = SpeechSDK.CancellationDetails.fromResult(result);
statusDiv.innerHTML += " CancellationReason: " + SpeechSDK.CancellationReason[cancelDetails.reason];
if (cancelDetails.reason === SpeechSDK.CancellationReason.Error) {
statusDiv.innerHTML += ": " + cancelDetails.errorDetails;
}
break;
}
statusDiv.innerHTML += "\r\n";
startIntentRecognizeAsyncButton.disabled = false;
},
function (err) {
window.console.log(err);
phraseDiv.innerHTML += "ERROR: " + err;
startIntentRecognizeAsyncButton.disabled = false;
});
Проверка кода
<!DOCTYPE html>
<html>
<head>
<title>Microsoft Cognitive Services Speech SDK JavaScript Quickstart</title>
<meta charset="utf-8" />
</head>
<body style="font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:13px;">
<div id="warning">
<h1 style="font-weight:500;">Speech Recognition Speech SDK not found (microsoft.cognitiveservices.speech.sdk.bundle.js missing).</h1>
</div>
<div id="content" style="display:none">
<table width="100%">
<tr>
<td></td>
<td><h1 style="font-weight:500;">Microsoft Cognitive Services Speech SDK JavaScript Quickstart</h1></td>
</tr>
<tr>
<td align="right"><a href="https://docs.microsoft.com/azure/cognitive-services/speech-service/quickstarts/intent-recognition?pivots=programming-language-csharp#create-a-luis-app-for-intent-recognition" target="_blank">LUIS Primary Key</a>:</td>
<td><input id="subscriptionKey" type="text" size="40" value="subscription"></td>
</tr>
<tr>
<td align="right">LUIS Location</td>
<td><input id="serviceRegion" type="text" size="40" value="YourServiceRegion"></td>
</tr>
<tr>
<td align="right">LUIS App ID:</td>
<td><input id="appId" type="text" size="60" value="YOUR_LANGUAGE_UNDERSTANDING_APP_ID"></td>
</tr>
<tr>
<td></td>
<td><button id="startIntentRecognizeAsyncButton">Start Intent Recognition</button></td>
</tr>
<tr>
<td align="right" valign="top">Input Text</td>
<td><textarea id="phraseDiv" style="display: inline-block;width:500px;height:200px"></textarea></td>
</tr>
<tr>
<td align="right" valign="top">Result</td>
<td><textarea id="statusDiv" style="display: inline-block;width:500px;height:100px"></textarea></td>
</tr>
</table>
</div>
<!-- Speech SDK reference sdk. -->
<script src="https://aka.ms/csspeech/jsbrowserpackageraw"></script>
<!-- Speech SDK USAGE -->
<script>
// status fields and start button in UI
var phraseDiv;
var statusDiv;
var startIntentRecognizeAsyncButton;
// subscription key and region for speech services.
var subscriptionKey, serviceRegion, appId;
var SpeechSDK;
var recognizer;
document.addEventListener("DOMContentLoaded", function () {
startIntentRecognizeAsyncButton = document.getElementById("startIntentRecognizeAsyncButton");
subscriptionKey = document.getElementById("subscriptionKey");
serviceRegion = document.getElementById("serviceRegion");
appId = document.getElementById("appId");
phraseDiv = document.getElementById("phraseDiv");
statusDiv = document.getElementById("statusDiv");
startIntentRecognizeAsyncButton.addEventListener("click", function () {
startIntentRecognizeAsyncButton.disabled = true;
phraseDiv.innerHTML = "";
statusDiv.innerHTML = "";
let audioConfig = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();
if (subscriptionKey.value === "" || subscriptionKey.value === "subscription") {
alert("Please enter your Microsoft Cognitive Services Speech subscription key!");
startIntentRecognizeAsyncButton.disabled = false;
return;
}
var speechConfig = SpeechSDK.SpeechConfig.fromSubscription(subscriptionKey.value, serviceRegion.value);
speechConfig.speechRecognitionLanguage = "en-US";
recognizer = new SpeechSDK.IntentRecognizer(speechConfig, audioConfig);
// Set up a Language Understanding Model from Language Understanding Intelligent Service (LUIS).
// See https://www.luis.ai/home for more information on LUIS.
if (appId.value !== "" && appId.value !== "YOUR_LANGUAGE_UNDERSTANDING_APP_ID") {
var lm = SpeechSDK.LanguageUnderstandingModel.fromAppId(appId.value);
recognizer.addAllIntents(lm);
}
recognizer.recognizeOnceAsync(
function (result) {
window.console.log(result);
phraseDiv.innerHTML = result.text + "\r\n";
statusDiv.innerHTML += "(continuation) Reason: " + SpeechSDK.ResultReason[result.reason];
switch (result.reason) {
case SpeechSDK.ResultReason.RecognizedSpeech:
statusDiv.innerHTML += " Text: " + result.text;
break;
case SpeechSDK.ResultReason.RecognizedIntent:
statusDiv.innerHTML += " Text: " + result.text + " IntentId: " + result.intentId;
// The actual JSON returned from Language Understanding is a bit more complex to get to, but it is available for things like
// the entity name and type if part of the intent.
statusDiv.innerHTML += " Intent JSON: " + result.properties.getProperty(SpeechSDK.PropertyId.LanguageUnderstandingServiceResponse_JsonResult);
phraseDiv.innerHTML += result.properties.getProperty(SpeechSDK.PropertyId.LanguageUnderstandingServiceResponse_JsonResult) + "\r\n";
break;
case SpeechSDK.ResultReason.NoMatch:
var noMatchDetail = SpeechSDK.NoMatchDetails.fromResult(result);
statusDiv.innerHTML += " NoMatchReason: " + SpeechSDK.NoMatchReason[noMatchDetail.reason];
break;
case SpeechSDK.ResultReason.Canceled:
var cancelDetails = SpeechSDK.CancellationDetails.fromResult(result);
statusDiv.innerHTML += " CancellationReason: " + SpeechSDK.CancellationReason[cancelDetails.reason];
if (cancelDetails.reason === SpeechSDK.CancellationReason.Error) {
statusDiv.innerHTML += ": " + cancelDetails.errorDetails;
}
break;
}
statusDiv.innerHTML += "\r\n";
startIntentRecognizeAsyncButton.disabled = false;
},
function (err) {
window.console.log(err);
phraseDiv.innerHTML += "ERROR: " + err;
startIntentRecognizeAsyncButton.disabled = false;
});
});
if (!!window.SpeechSDK) {
SpeechSDK = window.SpeechSDK;
startIntentRecognizeAsyncButton.disabled = false;
document.getElementById('content').style.display = 'block';
document.getElementById('warning').style.display = 'none';
}
});
</script>
</body>
</html>
Создание источника токена (необязательно)
В случае, если вы хотите разместить веб-страницу на веб-сервере, можно по желанию предоставить источник токена для вашего демонстрационного приложения. Таким образом, ключ ресурса "Речь" никогда не покидает сервер, позволяя пользователям использовать возможности речи без ввода кода авторизации.
Создайте файл с именем token.php
. В этом примере предполагается, что веб-сервер поддерживает язык сценариев PHP с включенной служебной программой cURL. Введите следующий код:
<?php
header('Access-Control-Allow-Origin: ' . $_SERVER['SERVER_NAME']);
// Replace with your own subscription key and service region (e.g., "westus").
$subscriptionKey = 'YourSpeechResoureKey';
$region = 'YourServiceRegion';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://' . $region . '.api.cognitive.microsoft.com/sts/v1.0/issueToken');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{}');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Ocp-Apim-Subscription-Key: ' . $subscriptionKey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
echo curl_exec($ch);
?>
Примечание.
Токены авторизации имеют ограниченный срок действия. Этом упрощенном примере не показано, как автоматически обновлять маркеры проверки подлинности. Пользователь может вручную перезагрузить страницу или нажать клавишу F5, чтобы обновить ее.
Сборка и запуск примера в локальной среде
Чтобы запустить приложение, дважды щелкните файл index.html или откройте файл index.html с помощью веб-браузера на свой выбор. Он представляет простой графический пользовательский интерфейс, который позволяет ввести ключ LUIS, регион LUISи идентификатор приложения LUIS. Когда вы заполните эти поля, нажмите соответствующую кнопку, чтобы активировать распознавание с использованием микрофона.
Примечание.
Этот метод не работает в браузере Safari. Пример веб-страницы в Safari должен быть размещен на веб-сервере. В Safari загруженные из локального файла веб-сайты не могут использовать микрофон.
Сборка и запуск примера на веб-сервере
Чтобы запустить приложение, откройте используемый вами веб-браузер и введите общедоступный URL-адрес, по которому размещена ваша папка. Затем введите регион LUIS и идентификатор приложения LUIS и активируйте распознавание с использованием микрофона. Будет получен токен из источника токена (если он настроен) и начнется распознавание голосовых команд.
Справочные примеры пакета документации | (PyPi) | Дополнительные примеры на GitHub
В этом кратком руководстве вы будете использовать Speech SDK и службу Language Understanding (LUIS), чтобы распознавать намерения из звуковых данных, полученных с микрофона. В частности, вы будете использовать Speech SDK для захвата речи и предварительно созданную предметную область в LUIS для определения намерений системы домашней автоматизации, таких как включение и выключение света.
Предварительные условия
- Подписка Azure — создайте бесплатную учетную запись.
-
Создайте языковой ресурс в портале Azure. Вы можете использовать бесплатный тарифный план (
F0
), чтобы попробовать службу, а затем перейти на платный план для работы в продакшене. На этот раз вам не потребуется ресурс AI Foundry для работы с голосом. - Получите ключ ресурса языка и регион. После развертывания языкового ресурса выберите Перейти к ресурсу, чтобы просмотреть и управлять ключами.
Вам также потребуется установить пакет SDK для Работы с речью для вашей среды разработки и создать пустой образец проекта.
Создание приложения LUIS для распознавания намерений
Чтобы завершить начальный процесс по распознаванию намерений, необходимо создать учетную запись LUIS и проект с помощью портала версии предварительного просмотра LUIS. Для работы с этим кратким руководством требуется подписка LUIS в регионе, где доступна возможность распознавания намерений. Подписка на службу "Речь" не является обязательной.
В первую очередь необходимо создать учетную запись и приложение LUIS с помощью портала LUIS предварительной версии. Приложение LUIS, которое вы создадите, будет использовать заранее созданный домен для домашней автоматизации, предоставляющий намерения, сущности и примеры высказываний. Когда все будет готово, у вас будет работающая в облаке конечная точка LUIS, которую можно вызвать с помощью сервиса Speech SDK.
Чтобы создать приложение LUIS, выполните эти инструкции:
Когда все будет готово, вам потребуется следующее:
- перепубликовать с включённой функцией подготовки речи.
- LUIS первичный ключ
- Ваш LUIS расположение
- идентификатор приложения LUIS.
Вот как найти эти данные на портале LUIS предварительной версии:
На портале предварительной версии LUIS выберите свое приложение и нажмите кнопку Опубликовать.
Выберите слот производственный, если используете
en-US
, выберите пункт Изменить параметры и установите переключатель опции Подготовка речи в положение Вкл.. Затем нажмите кнопку Опубликовать.Внимание
Настоятельно рекомендуем включить подготовку речи. Это повысит точность распознавания речи.
На портале выберите вкладку Управление, а затем раздел Ресурсы Azure. На этой странице вы найдете ключ и расположение LUIS (иногда оно называется регионом) для ресурса прогнозирования LUIS.
Когда вы получите ключ и местоположение, вам понадобится идентификатор приложения. Выберите Параметры. ИД вашего приложения доступно на этой странице.
Открытие вашего проекта
- Откройте предпочтительную интегрированную среду разработки.
- Создайте проект и файл с именем
quickstart.py
, а затем откройте его.
Начните с шаблонного кода
Добавим код, который выступает в качестве основы для нашего проекта.
import azure.cognitiveservices.speech as speechsdk
print("Say something...")
Создание конфигурации службы "Речь"
Прежде чем инициализировать объект IntentRecognizer
, необходимо создать конфигурацию, использующую ключ и расположение ресурса прогнозирования LUIS.
Вставьте этот код в quickstart.py
. Обязательно обновите следующие значения:
- Замените
"YourLanguageUnderstandingSubscriptionKey"
ключом прогнозирования LUIS. - Замените
"YourLanguageUnderstandingServiceRegion"
расположением LUIS. Используйте идентификатор региона из региона
Совет
Если вам нужна помощь с поиском этих значений, перейдите к разделу Создание приложения LUIS для распознавания намерений.
Внимание
Обязательно удалите ключ из кода, когда завершите работу, и ни в коем случае не публикуйте его в открытом доступе. Для рабочей среды используйте безопасный способ хранения и доступа к учетным данным, например Azure Key Vault. Дополнительные сведения см. в статье по безопасности служб ИИ Azure.
# Set up the config for the intent recognizer (remember that this uses the Language Understanding key, not the Speech Services key)!
intent_config = speechsdk.SpeechConfig(
subscription="YourLanguageUnderstandingSubscriptionKey",
region="YourLanguageUnderstandingServiceRegion")
В этом примере создается объект SpeechConfig
с использованием ключа и региона LUIS. Полный список доступных методов см. в статье SpeechConfig Class (Класс SpeechConfig).
Пакет SDK для распознавания речи по умолчанию использует язык en-us. Сведения о выборе исходного языка см. в разделе Как распознать речь.
Инициализируйте объект IntentRecognizer
Теперь создадим объект IntentRecognizer
. Вставьте этот код непосредственно под конфигурацией службы "Речь".
# Set up the intent recognizer
intent_recognizer = speechsdk.intent.IntentRecognizer(speech_config=intent_config)
Добавьте модель "LanguageUnderstandingModel" и интенты.
Необходимо сопоставить объект LanguageUnderstandingModel
с распознавателем намерений и добавить намерения, которые необходимо распознать. Мы будем использовать намерения из предварительно созданной предметной области для системы домашней автоматики.
Вставьте этот код ниже вашего IntentRecognizer
. Обязательно замените "YourLanguageUnderstandingAppId"
идентификатором приложения LUIS.
Совет
Если вам нужна помощь с поиском этих значений, перейдите к разделу Создание приложения LUIS для распознавания намерений.
# set up the intents that are to be recognized. These can be a mix of simple phrases and
# intents specified through a LanguageUnderstanding Model.
model = speechsdk.intent.LanguageUnderstandingModel(app_id="YourLanguageUnderstandingAppId")
intents = [
(model, "HomeAutomation.TurnOn"),
(model, "HomeAutomation.TurnOff"),
("This is a test.", "test"),
("Switch to channel 34.", "34"),
("what's the weather like", "weather"),
]
intent_recognizer.add_intents(intents)
В этом примере функция add_intents()
используется для добавления списка явно определенных намерений. Если требуется добавить все намерения из модели, используйте add_all_intents(model)
и передайте модель.
Распознавание намерения
В объекте IntentRecognizer
необходимо вызвать метод recognize_once()
. Этот метод позволяет службе распознавания речи узнать, что отправляется одна фраза для распознавания, и после её идентификации необходимо прекратить распознавание речи.
Вставьте этот код под вашей моделью.
intent_result = intent_recognizer.recognize_once()
Отображение результатов распознавания (или ошибок)
Когда сервис распознавания речи возвращает результат, необходимо что-то с ним сделать. Мы упрощённо выведем результат на консоль.
Ниже вызова recognize_once()
добавьте указанный ниже код.
# Check the results
if intent_result.reason == speechsdk.ResultReason.RecognizedIntent:
print("Recognized: \"{}\" with intent id `{}`".format(intent_result.text, intent_result.intent_id))
elif intent_result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("Recognized: {}".format(intent_result.text))
elif intent_result.reason == speechsdk.ResultReason.NoMatch:
print("No speech could be recognized: {}".format(intent_result.no_match_details))
elif intent_result.reason == speechsdk.ResultReason.Canceled:
print("Intent recognition canceled: {}".format(intent_result.cancellation_details.reason))
if intent_result.cancellation_details.reason == speechsdk.CancellationReason.Error:
print("Error details: {}".format(intent_result.cancellation_details.error_details))
Проверка кода
На этом этапе код должен выглядеть, как показано ниже.
Примечание.
Мы добавили несколько комментариев к этой версии.
# Copyright (c) Microsoft. All rights reserved.
# Licensed under the MIT license. See LICENSE.md file in the project root for full license information.
# <skeleton>
import azure.cognitiveservices.speech as speechsdk
print("Say something...")
# </skeleton>
"""performs one-shot intent recognition from input from the default microphone"""
# <create_speech_configuration>
# Set up the config for the intent recognizer (remember that this uses the Language Understanding key, not the Speech Services key)!
intent_config = speechsdk.SpeechConfig(
subscription="YourLanguageUnderstandingSubscriptionKey",
region="YourLanguageUnderstandingServiceRegion")
# </create_speech_configuration>
# <create_intent_recognizer>
# Set up the intent recognizer
intent_recognizer = speechsdk.intent.IntentRecognizer(speech_config=intent_config)
# </create_intent_recognizer>
# <add_intents>
# set up the intents that are to be recognized. These can be a mix of simple phrases and
# intents specified through a LanguageUnderstanding Model.
model = speechsdk.intent.LanguageUnderstandingModel(app_id="YourLanguageUnderstandingAppId")
intents = [
(model, "HomeAutomation.TurnOn"),
(model, "HomeAutomation.TurnOff"),
("This is a test.", "test"),
("Switch to channel 34.", "34"),
("what's the weather like", "weather"),
]
intent_recognizer.add_intents(intents)
# </add_intents>
# To add all of the possible intents from a LUIS model to the recognizer, uncomment the line below:
# intent_recognizer.add_all_intents(model)
# Starts intent recognition, and returns after a single utterance is recognized. The end of a
# single utterance is determined by listening for silence at the end or until a maximum of about 30
# seconds of audio is processed. It returns the recognition text as result.
# Note: Since recognize_once() returns only a single utterance, it is suitable only for single
# shot recognition like command or query.
# For long-running multi-utterance recognition, use start_continuous_recognition() instead.
# <recognize_intent>
intent_result = intent_recognizer.recognize_once()
# </recognize_intent>
# <print_results>
# Check the results
if intent_result.reason == speechsdk.ResultReason.RecognizedIntent:
print("Recognized: \"{}\" with intent id `{}`".format(intent_result.text, intent_result.intent_id))
elif intent_result.reason == speechsdk.ResultReason.RecognizedSpeech:
print("Recognized: {}".format(intent_result.text))
elif intent_result.reason == speechsdk.ResultReason.NoMatch:
print("No speech could be recognized: {}".format(intent_result.no_match_details))
elif intent_result.reason == speechsdk.ResultReason.Canceled:
print("Intent recognition canceled: {}".format(intent_result.cancellation_details.reason))
if intent_result.cancellation_details.reason == speechsdk.CancellationReason.Error:
print("Error details: {}".format(intent_result.cancellation_details.error_details))
# </print_results>
Создание и запуск приложения
Запустите пример из консоли или в интегрированной среде разработки:
python quickstart.py
Слова, произносимые в микрофон, в течение следующих 15 секунд будут распознаны и записаны в окне консоли.
Справочная документация | Пакет (Go) | Дополнительные примеры на GitHub
Комплект SDK для работы с речью на Go не поддерживает распознавание намерений. Выберите другой язык программирования или обратитесь к справочнику и примерам для языка Go, ссылки на которые приведены в начале этой статьи.
Справочный пакет документации | (скачивание) | Дополнительные примеры на GitHub
SDK для распознавания речи на Objective-C поддерживает распознавание намерений, но мы пока не включили руководство здесь. Выберите другой язык программирования, чтобы приступить к работе и ознакомиться с основными понятиями, или обратитесь к справочнику и примерам для языка Objective-C, ссылки на которые приведены в начале этой статьи.
Справочный пакет документации | (скачивание) | Дополнительные примеры на GitHub
SDK для речи для Swift поддерживает распознавание намерений, но мы еще не включили здесь руководство по использованию. Выберите другой язык программирования, чтобы приступить к работе и ознакомиться с основными понятиями, или обратитесь к справочнику и примерам для языка Swift, ссылки на которые приведены в начале этой статьи.
Справка по REST API для преобразования речи в текст | REST API для преобразования речи в текст для коротких аудиофайлов | Дополнительные примеры на GitHub
REST API поддерживает распознавание намерений, но мы еще не включили в эту статью руководство по использованию REST API. Выберите другой язык программирования, чтобы приступить к работе и ознакомиться с основными понятиями.
Интерфейс командной строки (CLI) службы "Речь" поддерживает распознавание намерений, но мы еще не включили в эту статью руководство по использованию CLI. Выберите другой язык программирования, чтобы начать и ознакомиться с основными понятиями, или ознакомьтесь с Обзором CLI службы "Речь" для более подробной информации о CLI.