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


Краткое руководство. Распознавание намерений с помощью беседы Распознавание речи

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

В этом кратком руководстве вы будете использовать службы "Речь" и "Язык" для распознавания намерений из звуковых данных, захваченных с микрофона. В частности, вы будете использовать службу "Речь" для распознавания речи и модели Распознавание речи беседы (CLU) для выявления намерений.

Внимание

Беседная Распознавание речи (CLU) доступна для C# и C++ с пакетом SDK службы "Речь" версии 1.25 или более поздней.

Необходимые компоненты

  • Подписка Azure. Вы можете создать бесплатную учетную запись.
  • Создайте ресурс языка в портал Azure.
  • Получите ключ ресурса языка и конечную точку. После развертывания ресурса службы "Язык" выберите Перейти к ресурсу для просмотра ключей и управления ими.
  • Создайте ресурс службы "Речь" в портал Azure.
  • Получение ключа ресурса службы "Речь" и региона. После развертывания ресурса службы "Речь" выберите Перейти к ресурсу для просмотра ключей и управления ими.

Настройка среды

Пакет SDK для службы "Речь" доступен в виде пакета NuGet и реализует .NET Standard 2.0. Вы устанавливаете пакет SDK службы "Речь" далее в этом руководстве, но сначала проверьте руководство по установке пакета SDK для получения дополнительных требований.

Настройка переменных среды

В этом примере требуются переменные среды с именем LANGUAGE_KEY, LANGUAGE_ENDPOINTи SPEECH_KEYSPEECH_REGION.

Приложение должно пройти проверку подлинности для доступа к ресурсам служб ИИ Azure. В этой статье показано, как использовать переменные среды для хранения учетных данных. Затем вы можете получить доступ к переменным среды из кода для проверки подлинности приложения. Для рабочей среды используйте более безопасный способ хранения и доступа к учетным данным.

Внимание

Мы рекомендуем использовать проверку подлинности Идентификатора Microsoft Entra с управляемыми удостоверениями для ресурсов Azure, чтобы избежать хранения учетных данных с приложениями, работающими в облаке.

Если вы используете ключ API, сохраните его в другом месте, например в Azure Key Vault. Не включайте ключ API непосредственно в код и никогда не публикуйте его.

Дополнительные сведения о безопасности служб ИИ см. в статье "Проверка подлинности запросов к службам ИИ Azure".

Чтобы задать переменные среды, откройте окно консоли и следуйте инструкциям для вашей операционной системы и среды разработки.

  • Чтобы задать LANGUAGE_KEY переменную среды, замените your-language-key одним из ключей ресурса.
  • Чтобы задать LANGUAGE_ENDPOINT переменную среды, замените your-language-endpoint одним из регионов ресурса.
  • Чтобы задать SPEECH_KEY переменную среды, замените your-speech-key одним из ключей ресурса.
  • Чтобы задать SPEECH_REGION переменную среды, замените your-speech-region одним из регионов ресурса.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

Примечание.

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

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

Создание проекта беседы Распознавание речи

Создав ресурс языка, создайте проект распознавания речи в Language Studio. Проект — это рабочая область для создания настраиваемых моделей машинного обучения на основе данных. Получить доступ к вашему проекту можете только вы и другие пользователи, у которых есть доступ к используемому ресурсу службы "Язык".

Перейдите в Language Studio и войдите в учетную запись Azure.

Создание проекта распознавания устной речи

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

  1. В Language Studio найдите раздел Распознавание вопросов и устной речи и выберите Распознавание устной речи .

    Снимок экрана, на котором показано расположение элемента

  2. Откроется страница Проекты распознавания устной речи. Рядом с кнопкой "Создать проект " нажмите кнопку "Импорт".

    Снимок экрана: страница проекта для бесед в Language Studio.

  3. В появившемся окне отправьте JSON-файл, который требуется импортировать. Убедитесь, что файл соответствует поддерживаемому формату JSON.

После завершения отправки вы получите страницу определения схемы. В этом кратком руководстве схема уже создана, а речевые фрагменты уже помечены намерениями и сущностями.

Обучение модели

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

Чтобы обучить модель, необходимо запустить задание обучения. Выходные данные успешного задания обучения — это обученная модель.

Чтобы начать обучение модели в студии службы "Язык", сделайте следующее:

  1. Выберите Train model (Обучение модели) в меню слева.

  2. В верхнем меню выберите Запустить задание на обучение.

  3. Выберите "Обучение новой модели" и введите новое имя модели в текстовом поле. В противном случае для замены существующей модели моделью, обученной на новых данных, выберите "Перезаписать существующую модель " и выберите существующую модель. Перезапись обученной модели необратима, но это не повлияет на развернутые модели до тех пор, пока вы не развернете новую модель.

  4. Выберите режим обучения. Вы можете выбрать Стандартное обучение для более быстрого обучения, но оно доступно только на английском языке. Кроме того, можно выбрать Расширенное обучение, которое поддерживается для других языков и многоязычных проектов, но оно предусматривает более длительное время обучения. Узнайте больше о режимах обучения.

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

  6. Нажмите кнопку Обучить.

    Снимок экрана: страница обучения в Language Studio.

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

    Примечание.

    • Модели будут создаваться только с помощью успешно завершенных заданий обучения.
    • Обучение может занять от нескольких минут до нескольких часов в зависимости от количества речевых фрагментов.
    • В каждый момент времени может выполняться только одно задание на обучение. Вы не сможете запустить другие задания обучения в том же проекте, пока не завершится выполнение задания.
    • Машинное обучение, используемое для обучения моделей, регулярно обновляется. Чтобы обучить предыдущую версию конфигурации, выберите " Выбрать здесь", чтобы измениться на странице "Пуск обучения " и выбрать предыдущую версию.

Развертывание модели

Обычно после обучения модели изучаются сведения о ее оценке. В этом кратком руководстве вы просто развернете модель и предоставите себе к ней доступ в Language Studio. Можно также вызвать API прогнозирования.

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

  1. В меню слева выберите Развертывание модели.

  2. Выберите " Добавить развертывание", чтобы запустить мастер добавления развертывания .

    Снимок экрана: кнопка развертывания модели в Language Studio.

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

    Примечание.

    Для перезаписи существующего развертывания не требуется вносить изменения в вызов API прогнозирования, но полученные результаты будут основаны на новой назначенной модели.

    Снимок экрана: экран добавления нового развертывания в Language Studio.

  4. Выберите обученную модель в раскрывающемся списке "Модель ".

  5. Выберите "Развернуть" , чтобы запустить задание развертывания.

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

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

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

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

  1. Откройте командную строку, в которой должен быть создан проект, и создайте консольное приложение с помощью CLI .NET. Файл Program.cs должен быть создан в каталоге проекта.

    dotnet new console
    
  2. Установите пакет SDK для службы "Речь" в новом проекте с помощью CLI .NET.

    dotnet add package Microsoft.CognitiveServices.Speech
    
  3. Замените все содержимое Program.cs следующим кодом:

    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Audio;
    using Microsoft.CognitiveServices.Speech.Intent;
    
    class Program 
    {
        // This example requires environment variables named:
        // "LANGUAGE_KEY", "LANGUAGE_ENDPOINT", "SPEECH_KEY", and "SPEECH_REGION"
        static string languageKey = Environment.GetEnvironmentVariable("LANGUAGE_KEY");
        static string languageEndpoint = Environment.GetEnvironmentVariable("LANGUAGE_ENDPOINT");
        static string speechKey = Environment.GetEnvironmentVariable("SPEECH_KEY");
        static string speechRegion = Environment.GetEnvironmentVariable("SPEECH_REGION");
    
        // Your CLU project name and deployment name.
        static string cluProjectName = "YourProjectNameGoesHere";
        static string cluDeploymentName = "YourDeploymentNameGoesHere";
    
        async static Task Main(string[] args)
        {
            var speechConfig = SpeechConfig.FromSubscription(speechKey, speechRegion);        
            speechConfig.SpeechRecognitionLanguage = "en-US";
    
            using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
    
            // Creates an intent recognizer in the specified language using microphone as audio input.
            using (var intentRecognizer = new IntentRecognizer(speechConfig, audioConfig))
            {
                var cluModel = new ConversationalLanguageUnderstandingModel(
                    languageKey,
                    languageEndpoint,
                    cluProjectName, 
                    cluDeploymentName);
                var collection = new LanguageUnderstandingModelCollection();
                collection.Add(cluModel);
                intentRecognizer.ApplyLanguageModels(collection);
    
                Console.WriteLine("Speak into your microphone.");
                var recognitionResult = await intentRecognizer.RecognizeOnceAsync().ConfigureAwait(false);
    
                // Checks result.
                if (recognitionResult.Reason == ResultReason.RecognizedIntent)
                {
                    Console.WriteLine($"RECOGNIZED: Text={recognitionResult.Text}");
                    Console.WriteLine($"    Intent Id: {recognitionResult.IntentId}.");
                    Console.WriteLine($"    Language Understanding JSON: {recognitionResult.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");
                }
                else if (recognitionResult.Reason == ResultReason.RecognizedSpeech)
                {
                    Console.WriteLine($"RECOGNIZED: Text={recognitionResult.Text}");
                    Console.WriteLine($"    Intent not recognized.");
                }
                else if (recognitionResult.Reason == ResultReason.NoMatch)
                {
                    Console.WriteLine($"NOMATCH: Speech could not be recognized.");
                }
                else if (recognitionResult.Reason == ResultReason.Canceled)
                {
                    var cancellation = CancellationDetails.FromResult(recognitionResult);
                    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?");
                    }
                }
            }
        }
    }
    
  4. Присвойте Program.cs cluProjectName и cluDeploymentName переменным имена проекта и развертывания. Сведения о создании проекта и развертывания CLU см. в разделе "Создание проекта Распознавание речи беседы".

  5. Чтобы изменить язык распознавания речи, замените en-US на другой поддерживаемый язык. Например, es-ES для испанского (Испания). Если язык не указан, по умолчанию используется en-US. Дополнительные сведения о том, как определить один из нескольких языков, на которых могут говорить, см. в разделе Определение языка.

Запустите новое консольное приложение, чтобы начать распознавание речи с микрофона:

dotnet run

Внимание

Убедитесь, что заданы LANGUAGE_KEYпеременные среды, SPEECH_KEYи LANGUAGE_ENDPOINTSPEECH_REGION переменные среды, как описано выше. Если эти переменные не заданы, образец завершится ошибкой с сообщением об ошибке.

При появлении запроса начните говорить в микрофон. Ваши слова должно быть выведены в виде текста:

Speak into your microphone.
RECOGNIZED: Text=Turn on the lights.
    Intent Id: HomeAutomation.TurnOn.
    Language Understanding JSON: {"kind":"ConversationResult","result":{"query":"turn on the lights","prediction":{"topIntent":"HomeAutomation.TurnOn","projectKind":"Conversation","intents":[{"category":"HomeAutomation.TurnOn","confidenceScore":0.97712576},{"category":"HomeAutomation.TurnOff","confidenceScore":0.8431633},{"category":"None","confidenceScore":0.782861}],"entities":[{"category":"HomeAutomation.DeviceType","text":"lights","offset":12,"length":6,"confidenceScore":1,"extraInformation":[{"extraInformationKind":"ListKey","key":"light"}]}]}}}.

Примечание.

Поддержка ответа JSON для CLU через свойство LanguageUnderstandingServiceResponse_JsonResult добавлена в пакет SDK службы "Речь" версии 1.26.

Намерения возвращаются в порядке вероятности наиболее вероятной. Ниже приведена форматированная версия выходных данных topIntent JSON, где оценка достоверности составляет HomeAutomation.TurnOn 0,97712576 (977,71%). Второе наиболее вероятное намерение может быть HomeAutomation.TurnOff с оценкой достоверности 0,8985081 (84,31%).

{
  "kind": "ConversationResult",
  "result": {
    "query": "turn on the lights",
    "prediction": {
      "topIntent": "HomeAutomation.TurnOn",
      "projectKind": "Conversation",
      "intents": [
        {
          "category": "HomeAutomation.TurnOn",
          "confidenceScore": 0.97712576
        },
        {
          "category": "HomeAutomation.TurnOff",
          "confidenceScore": 0.8431633
        },
        {
          "category": "None",
          "confidenceScore": 0.782861
        }
      ],
      "entities": [
        {
          "category": "HomeAutomation.DeviceType",
          "text": "lights",
          "offset": 12,
          "length": 6,
          "confidenceScore": 1,
          "extraInformation": [
            {
              "extraInformationKind": "ListKey",
              "key": "light"
            }
          ]
        }
      ]
    }
  }
}

Замечания

Теперь, когда вы завершили работу с кратким руководством, ознакомьтесь с дополнительными рекомендациями.

  • В этом примере операция RecognizeOnceAsync используется для транскрибирования речевых фрагментов продолжительностью до 30 секунд или до обнаружения тишины. Сведения о непрерывном распознавании для более продолжительных аудиофайлов, в том числе бесед на нескольких языках, см. в разделе Распознавание речи.
  • Чтобы распознать речь из звукового файла, используйте FromWavFileInput вместо FromDefaultMicrophoneInput:
    using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
    
  • Для сжатых звуковых файлов, таких как MP4, установите GStreamer и используйте PullAudioInputStream или PushAudioInputStream. Дополнительные сведения см. в разделе Как использовать сжатые входные аудиофайлы.

Очистка ресурсов

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

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

В этом кратком руководстве вы будете использовать службы "Речь" и "Язык" для распознавания намерений из звуковых данных, захваченных с микрофона. В частности, вы будете использовать службу "Речь" для распознавания речи и модели Распознавание речи беседы (CLU) для выявления намерений.

Внимание

Беседная Распознавание речи (CLU) доступна для C# и C++ с пакетом SDK службы "Речь" версии 1.25 или более поздней.

Необходимые компоненты

  • Подписка Azure. Вы можете создать бесплатную учетную запись.
  • Создайте ресурс языка в портал Azure.
  • Получите ключ ресурса языка и конечную точку. После развертывания ресурса службы "Язык" выберите Перейти к ресурсу для просмотра ключей и управления ими.
  • Создайте ресурс службы "Речь" в портал Azure.
  • Получение ключа ресурса службы "Речь" и региона. После развертывания ресурса службы "Речь" выберите Перейти к ресурсу для просмотра ключей и управления ими.

Настройка среды

Пакет SDK для службы "Речь" доступен в виде пакета NuGet и реализует .NET Standard 2.0. Вы устанавливаете пакет SDK службы "Речь" далее в этом руководстве, но сначала проверьте руководство по установке пакета SDK для получения дополнительных требований.

Настройка переменных среды

В этом примере требуются переменные среды с именем LANGUAGE_KEY, LANGUAGE_ENDPOINTи SPEECH_KEYSPEECH_REGION.

Приложение должно пройти проверку подлинности для доступа к ресурсам служб ИИ Azure. В этой статье показано, как использовать переменные среды для хранения учетных данных. Затем вы можете получить доступ к переменным среды из кода для проверки подлинности приложения. Для рабочей среды используйте более безопасный способ хранения и доступа к учетным данным.

Внимание

Мы рекомендуем использовать проверку подлинности Идентификатора Microsoft Entra с управляемыми удостоверениями для ресурсов Azure, чтобы избежать хранения учетных данных с приложениями, работающими в облаке.

Если вы используете ключ API, сохраните его в другом месте, например в Azure Key Vault. Не включайте ключ API непосредственно в код и никогда не публикуйте его.

Дополнительные сведения о безопасности служб ИИ см. в статье "Проверка подлинности запросов к службам ИИ Azure".

Чтобы задать переменные среды, откройте окно консоли и следуйте инструкциям для вашей операционной системы и среды разработки.

  • Чтобы задать LANGUAGE_KEY переменную среды, замените your-language-key одним из ключей ресурса.
  • Чтобы задать LANGUAGE_ENDPOINT переменную среды, замените your-language-endpoint одним из регионов ресурса.
  • Чтобы задать SPEECH_KEY переменную среды, замените your-speech-key одним из ключей ресурса.
  • Чтобы задать SPEECH_REGION переменную среды, замените your-speech-region одним из регионов ресурса.
setx LANGUAGE_KEY your-language-key
setx LANGUAGE_ENDPOINT your-language-endpoint
setx SPEECH_KEY your-speech-key
setx SPEECH_REGION your-speech-region

Примечание.

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

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

Создание проекта беседы Распознавание речи

Создав ресурс языка, создайте проект распознавания речи в Language Studio. Проект — это рабочая область для создания настраиваемых моделей машинного обучения на основе данных. Получить доступ к вашему проекту можете только вы и другие пользователи, у которых есть доступ к используемому ресурсу службы "Язык".

Перейдите в Language Studio и войдите в учетную запись Azure.

Создание проекта распознавания устной речи

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

  1. В Language Studio найдите раздел Распознавание вопросов и устной речи и выберите Распознавание устной речи .

    Снимок экрана, на котором показано расположение элемента

  2. Откроется страница Проекты распознавания устной речи. Рядом с кнопкой "Создать проект " нажмите кнопку "Импорт".

    Снимок экрана: страница проекта для бесед в Language Studio.

  3. В появившемся окне отправьте JSON-файл, который требуется импортировать. Убедитесь, что файл соответствует поддерживаемому формату JSON.

После завершения отправки вы получите страницу определения схемы. В этом кратком руководстве схема уже создана, а речевые фрагменты уже помечены намерениями и сущностями.

Обучение модели

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

Чтобы обучить модель, необходимо запустить задание обучения. Выходные данные успешного задания обучения — это обученная модель.

Чтобы начать обучение модели в студии службы "Язык", сделайте следующее:

  1. Выберите Train model (Обучение модели) в меню слева.

  2. В верхнем меню выберите Запустить задание на обучение.

  3. Выберите "Обучение новой модели" и введите новое имя модели в текстовом поле. В противном случае для замены существующей модели моделью, обученной на новых данных, выберите "Перезаписать существующую модель " и выберите существующую модель. Перезапись обученной модели необратима, но это не повлияет на развернутые модели до тех пор, пока вы не развернете новую модель.

  4. Выберите режим обучения. Вы можете выбрать Стандартное обучение для более быстрого обучения, но оно доступно только на английском языке. Кроме того, можно выбрать Расширенное обучение, которое поддерживается для других языков и многоязычных проектов, но оно предусматривает более длительное время обучения. Узнайте больше о режимах обучения.

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

  6. Нажмите кнопку Обучить.

    Снимок экрана: страница обучения в Language Studio.

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

    Примечание.

    • Модели будут создаваться только с помощью успешно завершенных заданий обучения.
    • Обучение может занять от нескольких минут до нескольких часов в зависимости от количества речевых фрагментов.
    • В каждый момент времени может выполняться только одно задание на обучение. Вы не сможете запустить другие задания обучения в том же проекте, пока не завершится выполнение задания.
    • Машинное обучение, используемое для обучения моделей, регулярно обновляется. Чтобы обучить предыдущую версию конфигурации, выберите " Выбрать здесь", чтобы измениться на странице "Пуск обучения " и выбрать предыдущую версию.

Развертывание модели

Обычно после обучения модели изучаются сведения о ее оценке. В этом кратком руководстве вы просто развернете модель и предоставите себе к ней доступ в Language Studio. Можно также вызвать API прогнозирования.

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

  1. В меню слева выберите Развертывание модели.

  2. Выберите " Добавить развертывание", чтобы запустить мастер добавления развертывания .

    Снимок экрана: кнопка развертывания модели в Language Studio.

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

    Примечание.

    Для перезаписи существующего развертывания не требуется вносить изменения в вызов API прогнозирования, но полученные результаты будут основаны на новой назначенной модели.

    Снимок экрана: экран добавления нового развертывания в Language Studio.

  4. Выберите обученную модель в раскрывающемся списке "Модель ".

  5. Выберите "Развернуть" , чтобы запустить задание развертывания.

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

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

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

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

  1. Создайте проект консоли C++ в Visual Studio Community 2022 с именем SpeechRecognition.

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

    Install-Package Microsoft.CognitiveServices.Speech
    
  3. Замените все содержимое SpeechRecognition.cpp следующим кодом:

    #include <iostream> 
    #include <stdlib.h>
    #include <speechapi_cxx.h>
    
    using namespace Microsoft::CognitiveServices::Speech;
    using namespace Microsoft::CognitiveServices::Speech::Audio;
    using namespace Microsoft::CognitiveServices::Speech::Intent;
    
    std::string GetEnvironmentVariable(const char* name);
    
    int main()
    {
        // This example requires environment variables named:
        // "LANGUAGE_KEY", "LANGUAGE_ENDPOINT", "SPEECH_KEY", and "SPEECH_REGION"
        auto languageKey = GetEnvironmentVariable("LANGUAGE_KEY");
        auto languageEndpoint = GetEnvironmentVariable("LANGUAGE_ENDPOINT");
        auto speechKey = GetEnvironmentVariable("SPEECH_KEY");
        auto speechRegion = GetEnvironmentVariable("SPEECH_REGION");
    
        auto cluProjectName = "YourProjectNameGoesHere";
        auto cluDeploymentName = "YourDeploymentNameGoesHere";
    
        if ((size(languageKey) == 0) || (size(languageEndpoint) == 0) || (size(speechKey) == 0) || (size(speechRegion) == 0)) {
            std::cout << "Please set LANGUAGE_KEY, LANGUAGE_ENDPOINT, SPEECH_KEY, and SPEECH_REGION environment variables." << std::endl;
            return -1;
        }
    
        auto speechConfig = SpeechConfig::FromSubscription(speechKey, speechRegion);
    
        speechConfig->SetSpeechRecognitionLanguage("en-US");
    
        auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
        auto intentRecognizer = IntentRecognizer::FromConfig(speechConfig, audioConfig);
    
        std::vector<std::shared_ptr<LanguageUnderstandingModel>> models;
    
        auto cluModel = ConversationalLanguageUnderstandingModel::FromResource(
            languageKey,
            languageEndpoint,
            cluProjectName,
            cluDeploymentName);
    
        models.push_back(cluModel);
        intentRecognizer->ApplyLanguageModels(models);
    
        std::cout << "Speak into your microphone.\n";
        auto result = intentRecognizer->RecognizeOnceAsync().get();
    
        if (result->Reason == ResultReason::RecognizedIntent)
        {
            std::cout << "RECOGNIZED: Text=" << result->Text << std::endl;
            std::cout << "  Intent Id: " << result->IntentId << std::endl;
            std::cout << "  Intent Service JSON: " << result->Properties.GetProperty(PropertyId::LanguageUnderstandingServiceResponse_JsonResult) << std::endl;
        }
        else if (result->Reason == ResultReason::RecognizedSpeech)
        {
            std::cout << "RECOGNIZED: Text=" << result->Text << " (intent could not be recognized)" << std::endl;
        }
        else if (result->Reason == ResultReason::NoMatch)
        {
            std::cout << "NOMATCH: Speech could not be recognized." << std::endl;
        }
        else if (result->Reason == ResultReason::Canceled)
        {
            auto cancellation = CancellationDetails::FromResult(result);
            std::cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error)
            {
                std::cout << "CANCELED: ErrorCode=" << (int)cancellation->ErrorCode << std::endl;
                std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
                std::cout << "CANCELED: Did you update the subscription info?" << std::endl;
            }
        }
    }
    
    std::string GetEnvironmentVariable(const char* name)
    {
    #if defined(_MSC_VER)
        size_t requiredSize = 0;
        (void)getenv_s(&requiredSize, nullptr, 0, name);
        if (requiredSize == 0)
        {
            return "";
        }
        auto buffer = std::make_unique<char[]>(requiredSize);
        (void)getenv_s(&requiredSize, buffer.get(), requiredSize, name);
        return buffer.get();
    #else
        auto value = getenv(name);
        return value ? value : "";
    #endif
    }
    
  4. Присвойте SpeechRecognition.cpp cluProjectName и cluDeploymentName переменным имена проекта и развертывания. Сведения о создании проекта и развертывания CLU см. в разделе "Создание проекта Распознавание речи беседы".

  5. Чтобы изменить язык распознавания речи, замените en-US на другой поддерживаемый язык. Например, es-ES для испанского (Испания). Если язык не указан, по умолчанию используется en-US. Дополнительные сведения о том, как определить один из нескольких языков, на которых могут говорить, см. в разделе Определение языка.

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

Внимание

Убедитесь, что заданы LANGUAGE_KEYпеременные среды, SPEECH_KEYи LANGUAGE_ENDPOINTSPEECH_REGION переменные среды, как описано выше. Если эти переменные не заданы, образец завершится ошибкой с сообщением об ошибке.

При появлении запроса начните говорить в микрофон. Ваши слова должно быть выведены в виде текста:

Speak into your microphone.
RECOGNIZED: Text=Turn on the lights.
    Intent Id: HomeAutomation.TurnOn.
    Language Understanding JSON: {"kind":"ConversationResult","result":{"query":"turn on the lights","prediction":{"topIntent":"HomeAutomation.TurnOn","projectKind":"Conversation","intents":[{"category":"HomeAutomation.TurnOn","confidenceScore":0.97712576},{"category":"HomeAutomation.TurnOff","confidenceScore":0.8431633},{"category":"None","confidenceScore":0.782861}],"entities":[{"category":"HomeAutomation.DeviceType","text":"lights","offset":12,"length":6,"confidenceScore":1,"extraInformation":[{"extraInformationKind":"ListKey","key":"light"}]}]}}}.

Примечание.

Поддержка ответа JSON для CLU через свойство LanguageUnderstandingServiceResponse_JsonResult добавлена в пакет SDK службы "Речь" версии 1.26.

Намерения возвращаются в порядке вероятности наиболее вероятной. Ниже приведена форматированная версия выходных данных topIntent JSON, где оценка достоверности составляет HomeAutomation.TurnOn 0,97712576 (977,71%). Второе наиболее вероятное намерение может быть HomeAutomation.TurnOff с оценкой достоверности 0,8985081 (84,31%).

{
  "kind": "ConversationResult",
  "result": {
    "query": "turn on the lights",
    "prediction": {
      "topIntent": "HomeAutomation.TurnOn",
      "projectKind": "Conversation",
      "intents": [
        {
          "category": "HomeAutomation.TurnOn",
          "confidenceScore": 0.97712576
        },
        {
          "category": "HomeAutomation.TurnOff",
          "confidenceScore": 0.8431633
        },
        {
          "category": "None",
          "confidenceScore": 0.782861
        }
      ],
      "entities": [
        {
          "category": "HomeAutomation.DeviceType",
          "text": "lights",
          "offset": 12,
          "length": 6,
          "confidenceScore": 1,
          "extraInformation": [
            {
              "extraInformationKind": "ListKey",
              "key": "light"
            }
          ]
        }
      ]
    }
  }
}

Замечания

Теперь, когда вы завершили работу с кратким руководством, ознакомьтесь с дополнительными рекомендациями.

  • В этом примере операция RecognizeOnceAsync используется для транскрибирования речевых фрагментов продолжительностью до 30 секунд или до обнаружения тишины. Сведения о непрерывном распознавании для более продолжительных аудиофайлов, в том числе бесед на нескольких языках, см. в разделе Распознавание речи.
  • Чтобы распознать речь из звукового файла, используйте FromWavFileInput вместо FromDefaultMicrophoneInput:
    auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
    
  • Для сжатых звуковых файлов, таких как MP4, установите GStreamer и используйте PullAudioInputStream или PushAudioInputStream. Дополнительные сведения см. в разделе Как использовать сжатые входные аудиофайлы.

Очистка ресурсов

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

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

Пакет SDK службы "Речь" для Java не поддерживает распознавание намерений с помощью языка CLU. Выберите другой язык программирования или справочник по Java и примеры, связанные с началом этой статьи.

Следующие шаги