Schnellstart: Erkennen von Absichten mit dem Speech-Dienst und LUIS
Wichtig
LUIS wird am 1. Oktober 2025 eingestellt. Seit dem 1. April 2023 können Sie keine neuen LUIS-Ressourcen erstellen. Wir empfehlen die Migration Ihrer LUIS-Anwendungen zu Conversational Language Understanding zu migrieren, um fortgesetzte Produktunterstützung und mehrsprachige Funktionen zu erhalten.
Conversational Language Understanding (CLU) ist für C# und C++ mit dem Speech-SDK Version 1.25 oder höher verfügbar. Weitere Informationen zum Erkennen von Absichten mit dem Speech-SDK und CLU finden Sie im Schnellstart.
Referenzdokumentation | Paket (NuGet) | Zusätzliche Beispiele auf GitHub
In dieser Schnellstartanleitung verwenden Sie das Speech SDK und den LUIS-Dienst (Language Understanding), um Absichten aus Audiodaten zu erkennen, die von einem Mikrofon aufgezeichnet wurden. Genauer gesagt, verwenden Sie das Speech SDK zum Erfassen der Sprachausgabe und eine vordefinierte Domäne von LUIS zur Absichtserkennung für die Gebäudeautomatisierung, beispielsweise zum Ein- und Ausschalten einer Lampe.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Erstellen einer Sprachressource im Azure-Portal. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden. Sie benötigen dieses Mal keine Speech-Ressource. - Abrufen des Sprach-Ressourcenschlüssels und der -region. Wählen Sie nach der Bereitstellung Ihrer Sprachressource Zu Ressource wechseln aus, um Schlüssel anzuzeigen und zu verwalten.
Erstellen einer LUIS-App für die Absichtserkennung
Um die Schnellstartanleitung zur Absichtserkennung durchzuführen, müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und ein Projekt erstellen. Für diesen Schnellstart benötigen Sie ein LUIS-Abonnement in einer Region, in der die Absichtserkennung verfügbar ist. Ein Abonnement der Speech-Dienste ist nicht erforderlich.
Zuerst müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und eine App erstellen. Die erstellte LUIS-App verwendet eine vordefinierte Domäne für die Gebäudeautomatisierung, die Absichten, Entitäten und Beispieläußerungen bereitstellt. Am Ende dieser Schnellstartanleitung verfügen Sie über einen LUIS-Endpunkt in der Cloud, den Sie über das Speech SDK aufrufen können.
Führen Sie die folgenden Schritte aus, um Ihre LUIS-App zu erstellen:
Wenn Sie damit fertig sind, benötigen Sie vier Dinge:
- Erneute Veröffentlichung mit aktivierter Sprachvorbereitung
- Ihren Primärschlüssel für LUIS
- Ihren Standort für LUIS
- Ihre App-ID für LUIS
Diese Informationen finden Sie im LUIS-Vorschauportal:
Wählen Sie im LUIS-Vorschauportal Ihre App und dann die Schaltfläche Veröffentlichen aus.
Wählen Sie den Slot Produktion aus. Wählen Sie bei Verwendung von
en-US
die Option Einstellungen ändern aus, und legen Sie die Option Spracherkennungsvorbereitung auf Ein fest. Wählen Sie anschließend die Schaltfläche Veröffentlichen aus.Wichtig
Die Verwendung von Sprachvorbereitung wird dringend empfohlen, da hierdurch die Genauigkeit der Spracherkennung verbessert wird.
Wählen Sie im LUIS-Vorschauportal Verwalten und dann Azure-Ressourcen aus. Auf dieser Seite finden Sie Ihren LUIS-Schlüssel und -Speicherort (zuweilen auch als Region bezeichnet) für Ihre LUIS-Vorhersageressource.
Nachdem Sie Schlüssel und Speicherort abgerufen haben, benötigen Sie die App-ID. Wählen Sie Einstellungen aus. Ihre App-ID ist auf dieser Seite verfügbar.
Öffnen Sie Ihr Projekt in Visual Studio.
Öffnen Sie als Nächstes Ihr Projekt in Visual Studio.
- Starten Sie Visual Studio 2019.
- Laden Sie das Projekt, und öffnen Sie
Program.cs
.
Beginnen mit Codebausteinen
Fügen Sie Code hinzu, der als Gerüst für das Projekt fungiert. Beachten Sie, dass Sie eine asynchrone Methode mit dem Namen RecognizeIntentAsync()
erstellt haben.
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();
}
}
}
Erstellen einer Speech-Konfiguration
Bevor Sie ein IntentRecognizer
-Objekt initialisieren können, müssen Sie eine Konfiguration erstellen, die den Schlüssel und Speicherort Ihrer LUIS-Vorhersageressource verwendet.
Wichtig
Der Starterschlüssel und die Erstellungsschlüssel funktionieren nicht. Sie müssen den Vorhersageschlüssel und den Vorhersagespeicherort verwenden, die Sie zuvor erstellt haben. Weitere Informationen finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
Fügen Sie diesen Code in die Methode RecognizeIntentAsync()
ein. Stellen Sie sicher, dass Sie folgende Werte aktualisieren:
- Ersetzen Sie
"YourLanguageUnderstandingSubscriptionKey"
durch Ihren LUIS-Vorhersageschlüssel. - Ersetzen Sie
"YourLanguageUnderstandingServiceRegion"
durch Ihren LUIS-Speicherort. Verwenden Sie den Regionsbezeichner der Region.
Tipp
Informationen dazu, wie Sie diese Werte ermitteln, finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Sicherheit von Azure KI Services.
var config = SpeechConfig.FromSubscription(
"YourLanguageUnderstandingSubscriptionKey",
"YourLanguageUnderstandingServiceRegion");
In diesem Beispiel wird die Methode FromSubscription()
zum Erstellen von SpeechConfig
verwendet. Eine vollständige Liste der verfügbaren Methoden finden Sie unter SpeechConfig-Klasse.
Das Speech SDK verwendet für die Erkennung standardmäßig amerikanisches Englisch (en-us). Informationen zum Auswählen der Ausgangssprache finden Sie unter Erkennen von Sprache.
Initialisieren eines IntentRecognizer-Objekts
Als Nächstes erstellen wir ein Objekt vom Typ IntentRecognizer
. Dieses Objekt wird in einer using-Anweisung erstellt, um die ordnungsgemäße Freigabe nicht verwalteter Ressourcen sicherzustellen. Fügen Sie diesen Code in die Methode RecognizeIntentAsync()
direkt unterhalb der Speech-Konfiguration ein.
// Creates an intent recognizer using microphone as audio input.
using (var recognizer = new IntentRecognizer(config))
{
}
Hinzufügen von LanguageUnderstandingModel und Absichten
Sie müssen der Absichtserkennung ein LanguageUnderstandingModel
zuordnen und die zu erkennenden Absichten hinzufügen. Wir verwenden Absichten aus der vordefinierten Domäne für die Gebäudeautomatisierung. Fügen Sie diesen Code in die using-Anweisung aus dem vorherigen Abschnitt ein. Stellen Sie sicher, dass Sie "YourLanguageUnderstandingAppId"
durch die ID Ihrer LUIS-App ersetzen.
Tipp
Informationen dazu, wie Sie diesen Wert ermitteln, finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
// 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");
In diesem Beispiel wird die Funktion AddIntent()
verwendet, um Absichten individuell hinzuzufügen. Wenn Sie alle Absichten aus einem Modell hinzufügen möchten, verwenden Sie AddAllIntents(model)
, und übergeben Sie das Modell.
Erkennen einer Absicht
Rufen Sie die Methode RecognizeOnceAsync()
über das Objekt IntentRecognizer
auf. Diese Methode teilt dem Spracherkennungsdienst mit, dass Sie einen einzelnen Ausdruck zur Erkennung senden, und dass die Spracherkennung beendet werden soll, sobald der Ausdruck ermittelt wurde.
Fügen Sie in der using-Anweisung unterhalb Ihres Modells den folgenden Code hinzu:
// 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();
Anzeigen von Erkennungsergebnissen (oder Fehlern)
Wenn das Erkennungsergebnis vom Speech-Dienst zurückgegeben wird, möchten Sie es natürlich in irgendeiner Form verwenden. In diesem Beispiel geben wir die Ergebnisse einfach in der Konsole aus.
Fügen Sie in der using-Anweisung unterhalb von RecognizeOnceAsync()
den folgenden Code ein:
// 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;
}
Überprüfen des Codes
Ihr Code sollte nun wie folgt aussehen:
Hinweis
Wir haben dieser Version einige Kommentare hinzugefügt.
//
// 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>
Erstellen und Ausführen der App
Sie können nun Ihre App erstellen und die Spracherkennung mit dem Speech-Dienst testen.
- Kompilieren des Codes: Wählen Sie auf der Menüleiste von Visual Studio Build>Projektmappe erstellen aus.
- Starten der App: Wählen Sie auf der Menüleiste Debuggen>Debuggen starten aus, oder drücken Sie F5.
- Starten der Erkennung: Sie werden aufgefordert, etwas auf Englisch zu sagen. Ihre Spracheingabe wird an den Speech-Dienst gesendet, in Text transkribiert und in der Konsole ausgegeben.
Referenzdokumentation | Paket (NuGet) | Zusätzliche Beispiele auf GitHub
In dieser Schnellstartanleitung verwenden Sie das Speech SDK und den LUIS-Dienst (Language Understanding), um Absichten aus Audiodaten zu erkennen, die von einem Mikrofon aufgezeichnet wurden. Genauer gesagt, verwenden Sie das Speech SDK zum Erfassen der Sprachausgabe und eine vordefinierte Domäne von LUIS zur Absichtserkennung für die Gebäudeautomatisierung, beispielsweise zum Ein- und Ausschalten einer Lampe.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Erstellen einer Sprachressource im Azure-Portal. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden. Sie benötigen dieses Mal keine Speech-Ressource. - Abrufen des Sprach-Ressourcenschlüssels und der -region. Wählen Sie nach der Bereitstellung Ihrer Sprachressource Zu Ressource wechseln aus, um Schlüssel anzuzeigen und zu verwalten.
Erstellen einer LUIS-App für die Absichtserkennung
Um die Schnellstartanleitung zur Absichtserkennung durchzuführen, müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und ein Projekt erstellen. Für diesen Schnellstart benötigen Sie ein LUIS-Abonnement in einer Region, in der die Absichtserkennung verfügbar ist. Ein Abonnement der Speech-Dienste ist nicht erforderlich.
Zuerst müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und eine App erstellen. Die erstellte LUIS-App verwendet eine vordefinierte Domäne für die Gebäudeautomatisierung, die Absichten, Entitäten und Beispieläußerungen bereitstellt. Am Ende dieser Schnellstartanleitung verfügen Sie über einen LUIS-Endpunkt in der Cloud, den Sie über das Speech SDK aufrufen können.
Führen Sie die folgenden Schritte aus, um Ihre LUIS-App zu erstellen:
Wenn Sie damit fertig sind, benötigen Sie vier Dinge:
- Erneute Veröffentlichung mit aktivierter Sprachvorbereitung
- Ihren Primärschlüssel für LUIS
- Ihren Standort für LUIS
- Ihre App-ID für LUIS
Diese Informationen finden Sie im LUIS-Vorschauportal:
Wählen Sie im LUIS-Vorschauportal Ihre App und dann die Schaltfläche Veröffentlichen aus.
Wählen Sie den Slot Produktion aus. Wählen Sie bei Verwendung von
en-US
die Option Einstellungen ändern aus, und legen Sie die Option Spracherkennungsvorbereitung auf Ein fest. Wählen Sie anschließend die Schaltfläche Veröffentlichen aus.Wichtig
Die Verwendung von Sprachvorbereitung wird dringend empfohlen, da hierdurch die Genauigkeit der Spracherkennung verbessert wird.
Wählen Sie im LUIS-Vorschauportal Verwalten und dann Azure-Ressourcen aus. Auf dieser Seite finden Sie Ihren LUIS-Schlüssel und -Speicherort (zuweilen auch als Region bezeichnet) für Ihre LUIS-Vorhersageressource.
Nachdem Sie Schlüssel und Speicherort abgerufen haben, benötigen Sie die App-ID. Wählen Sie Einstellungen aus. Ihre App-ID ist auf dieser Seite verfügbar.
Öffnen Sie Ihr Projekt in Visual Studio.
Öffnen Sie als Nächstes Ihr Projekt in Visual Studio.
- Starten Sie Visual Studio 2019.
- Laden Sie das Projekt, und öffnen Sie
helloworld.cpp
.
Beginnen mit Codebausteinen
Fügen Sie Code hinzu, der als Gerüst für das Projekt fungiert. Beachten Sie, dass Sie eine asynchrone Methode mit dem Namen recognizeIntent()
erstellt haben.
#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;
}
Erstellen einer Speech-Konfiguration
Bevor Sie ein IntentRecognizer
-Objekt initialisieren können, müssen Sie eine Konfiguration erstellen, die den Schlüssel und Speicherort Ihrer LUIS-Vorhersageressource verwendet.
Wichtig
Der Starterschlüssel und die Erstellungsschlüssel funktionieren nicht. Sie müssen den Vorhersageschlüssel und den Vorhersagespeicherort verwenden, die Sie zuvor erstellt haben. Weitere Informationen finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
Fügen Sie diesen Code in die Methode recognizeIntent()
ein. Stellen Sie sicher, dass Sie folgende Werte aktualisieren:
- Ersetzen Sie
"YourLanguageUnderstandingSubscriptionKey"
durch Ihren LUIS-Vorhersageschlüssel. - Ersetzen Sie
"YourLanguageUnderstandingServiceRegion"
durch Ihren LUIS-Speicherort. Verwenden Sie den Regionsbezeichner der Region.
Tipp
Informationen dazu, wie Sie diese Werte ermitteln, finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Sicherheit von Azure KI Services.
auto config = SpeechConfig::FromSubscription(
"YourLanguageUnderstandingSubscriptionKey",
"YourLanguageUnderstandingServiceRegion");
In diesem Beispiel wird die Methode FromSubscription()
zum Erstellen von SpeechConfig
verwendet. Eine vollständige Liste der verfügbaren Methoden finden Sie unter SpeechConfig-Klasse.
Das Speech SDK verwendet für die Erkennung standardmäßig amerikanisches Englisch (en-us). Informationen zum Auswählen der Ausgangssprache finden Sie unter Erkennen von Sprache.
Initialisieren eines IntentRecognizer-Objekts
Als Nächstes erstellen wir ein Objekt vom Typ IntentRecognizer
. Fügen Sie diesen Code in die Methode recognizeIntent()
direkt unterhalb der Speech-Konfiguration ein.
// Creates an intent recognizer using microphone as audio input.
auto recognizer = IntentRecognizer::FromConfig(config);
Hinzufügen von LanguageUnderstandingModel und Absichten
Sie müssen der Absichtserkennung ein LanguageUnderstandingModel
zuordnen und die zu erkennenden Absichten hinzufügen. Wir verwenden Absichten aus der vordefinierten Domäne für die Gebäudeautomatisierung.
Fügen Sie diesen Code unterhalb von IntentRecognizer
ein. Stellen Sie sicher, dass Sie "YourLanguageUnderstandingAppId"
durch die ID Ihrer LUIS-App ersetzen.
Tipp
Informationen dazu, wie Sie diesen Wert ermitteln, finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
// 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");
In diesem Beispiel wird die Funktion AddIntent()
verwendet, um Absichten individuell hinzuzufügen. Wenn Sie alle Absichten aus einem Modell hinzufügen möchten, verwenden Sie AddAllIntents(model)
, und übergeben Sie das Modell.
Erkennen einer Absicht
Rufen Sie die Methode RecognizeOnceAsync()
über das Objekt IntentRecognizer
auf. Diese Methode teilt dem Spracherkennungsdienst mit, dass Sie einen einzelnen Ausdruck zur Erkennung senden, und dass die Spracherkennung beendet werden soll, sobald der Ausdruck ermittelt wurde. Der Einfachheit halber warten wir auf die kommende Rückgabe, um fortzufahren.
Fügen Sie diesen Code unterhalb Ihres Modells ein:
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();
Anzeigen der Erkennungsergebnisse (oder Fehler)
Wenn das Erkennungsergebnis vom Speech-Dienst zurückgegeben wird, möchten Sie es natürlich in irgendeiner Form verwenden. In diesem Beispiel geben wir das Ergebnis einfach in der Konsole aus.
Fügen Sie diesen Code unterhalb von auto result = recognizer->RecognizeOnceAsync().get();
ein:
// 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;
}
}
Überprüfen des Codes
Ihr Code sollte nun wie folgt aussehen:
Hinweis
Wir haben dieser Version einige Kommentare hinzugefügt.
//
// 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>
Erstellen und Ausführen der App
Sie können nun Ihre App erstellen und die Spracherkennung mit dem Speech-Dienst testen.
- Kompilieren des Codes: Wählen Sie auf der Menüleiste von Visual Studio Build>Projektmappe erstellen aus.
- Starten der App: Wählen Sie auf der Menüleiste Debuggen>Debuggen starten aus, oder drücken Sie F5.
- Starten der Erkennung: Sie werden aufgefordert, etwas auf Englisch zu sagen. Ihre Spracheingabe wird an den Speech-Dienst gesendet, in Text transkribiert und in der Konsole ausgegeben.
Referenzdokumentation | Zusätzliche Beispiele auf GitHub
In dieser Schnellstartanleitung verwenden Sie das Speech SDK und den LUIS-Dienst (Language Understanding), um Absichten aus Audiodaten zu erkennen, die von einem Mikrofon aufgezeichnet wurden. Genauer gesagt, verwenden Sie das Speech SDK zum Erfassen der Sprachausgabe und eine vordefinierte Domäne von LUIS zur Absichtserkennung für die Gebäudeautomatisierung, beispielsweise zum Ein- und Ausschalten einer Lampe.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Erstellen einer Sprachressource im Azure-Portal. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden. Sie benötigen dieses Mal keine Speech-Ressource. - Abrufen des Sprach-Ressourcenschlüssels und der -region. Wählen Sie nach der Bereitstellung Ihrer Sprachressource Zu Ressource wechseln aus, um Schlüssel anzuzeigen und zu verwalten.
Sie müssen außerdem das Speech SDK für Ihre Entwicklungsumgebung installieren und ein leeres Beispielprojekt erstellen.
Erstellen einer LUIS-App für die Absichtserkennung
Um die Schnellstartanleitung zur Absichtserkennung durchzuführen, müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und ein Projekt erstellen. Für diesen Schnellstart benötigen Sie ein LUIS-Abonnement in einer Region, in der die Absichtserkennung verfügbar ist. Ein Abonnement der Speech-Dienste ist nicht erforderlich.
Zuerst müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und eine App erstellen. Die erstellte LUIS-App verwendet eine vordefinierte Domäne für die Gebäudeautomatisierung, die Absichten, Entitäten und Beispieläußerungen bereitstellt. Am Ende dieser Schnellstartanleitung verfügen Sie über einen LUIS-Endpunkt in der Cloud, den Sie über das Speech SDK aufrufen können.
Führen Sie die folgenden Schritte aus, um Ihre LUIS-App zu erstellen:
Wenn Sie damit fertig sind, benötigen Sie vier Dinge:
- Erneute Veröffentlichung mit aktivierter Sprachvorbereitung
- Ihren Primärschlüssel für LUIS
- Ihren Standort für LUIS
- Ihre App-ID für LUIS
Diese Informationen finden Sie im LUIS-Vorschauportal:
Wählen Sie im LUIS-Vorschauportal Ihre App und dann die Schaltfläche Veröffentlichen aus.
Wählen Sie den Slot Produktion aus. Wählen Sie bei Verwendung von
en-US
die Option Einstellungen ändern aus, und legen Sie die Option Spracherkennungsvorbereitung auf Ein fest. Wählen Sie anschließend die Schaltfläche Veröffentlichen aus.Wichtig
Die Verwendung von Sprachvorbereitung wird dringend empfohlen, da hierdurch die Genauigkeit der Spracherkennung verbessert wird.
Wählen Sie im LUIS-Vorschauportal Verwalten und dann Azure-Ressourcen aus. Auf dieser Seite finden Sie Ihren LUIS-Schlüssel und -Speicherort (zuweilen auch als Region bezeichnet) für Ihre LUIS-Vorhersageressource.
Nachdem Sie Schlüssel und Speicherort abgerufen haben, benötigen Sie die App-ID. Wählen Sie Einstellungen aus. Ihre App-ID ist auf dieser Seite verfügbar.
Öffnen Ihres Projekts
- Öffnen Sie Ihre bevorzugte IDE.
- Laden Sie das Projekt, und öffnen Sie
Main.java
.
Beginnen mit Codebausteinen
Fügen Sie Code hinzu, der als Gerüst für das Projekt fungiert.
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);
}
}
}
Erstellen einer Speech-Konfiguration
Bevor Sie ein IntentRecognizer
-Objekt initialisieren können, müssen Sie eine Konfiguration erstellen, die den Schlüssel und Speicherort Ihrer LUIS-Vorhersageressource verwendet.
Fügen Sie den Code in main()
in den try/catch-Block ein. Stellen Sie sicher, dass Sie folgende Werte aktualisieren:
- Ersetzen Sie
"YourLanguageUnderstandingSubscriptionKey"
durch Ihren LUIS-Vorhersageschlüssel. - Ersetzen Sie
"YourLanguageUnderstandingServiceRegion"
durch Ihren LUIS-Speicherort. Verwenden Sie den Regionsbezeichner der Region.
Tipp
Informationen dazu, wie Sie diese Werte ermitteln, finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Sicherheit von Azure KI Services.
// 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);
In diesem Beispiel wird die Methode FromSubscription()
zum Erstellen von SpeechConfig
verwendet. Eine vollständige Liste der verfügbaren Methoden finden Sie unter SpeechConfig-Klasse.
Das Speech SDK verwendet für die Erkennung standardmäßig amerikanisches Englisch (en-us). Informationen zum Auswählen der Ausgangssprache finden Sie unter Erkennen von Sprache.
Initialisieren eines IntentRecognizer-Objekts
Als Nächstes erstellen wir ein Objekt vom Typ IntentRecognizer
. Fügen Sie den folgenden Code direkt unterhalb Ihrer Speech-Konfiguration ein:
IntentRecognizer recognizer = new IntentRecognizer(config)) {
Hinzufügen von LanguageUnderstandingModel und Absichten
Sie müssen der Absichtserkennung ein LanguageUnderstandingModel
zuordnen und die zu erkennenden Absichten hinzufügen. Wir verwenden Absichten aus der vordefinierten Domäne für die Gebäudeautomatisierung.
Fügen Sie diesen Code unterhalb von IntentRecognizer
ein. Stellen Sie sicher, dass Sie "YourLanguageUnderstandingAppId"
durch die ID Ihrer LUIS-App ersetzen.
Tipp
Informationen dazu, wie Sie diesen Wert ermitteln, finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
// 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");
In diesem Beispiel wird die Funktion addIntent()
verwendet, um Absichten individuell hinzuzufügen. Wenn Sie alle Absichten aus einem Modell hinzufügen möchten, verwenden Sie addAllIntents(model)
, und übergeben Sie das Modell.
Erkennen einer Absicht
Rufen Sie die Methode recognizeOnceAsync()
über das Objekt IntentRecognizer
auf. Diese Methode teilt dem Spracherkennungsdienst mit, dass Sie einen einzelnen Ausdruck zur Erkennung senden, und dass die Spracherkennung beendet werden soll, sobald der Ausdruck ermittelt wurde.
Fügen Sie diesen Code unterhalb Ihres Modells ein:
System.out.println("Say something...");
// Starts recognition. It returns when the first utterance has been recognized.
IntentRecognitionResult result = recognizer.recognizeOnceAsync().get();
Anzeigen der Erkennungsergebnisse (oder Fehler)
Wenn das Erkennungsergebnis vom Speech-Dienst zurückgegeben wird, möchten Sie es natürlich in irgendeiner Form verwenden. In diesem Beispiel geben wir das Ergebnis einfach in der Konsole aus.
Fügen Sie diesen Code unterhalb Ihres Aufrufs von recognizeOnceAsync()
ein:
// 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?");
}
}
Überprüfen des Codes
Ihr Code sollte nun wie folgt aussehen:
Hinweis
Wir haben dieser Version einige Kommentare hinzugefügt.
//
// 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>
Erstellen und Ausführen der App
Drücken Sie F11, oder wählen Sie Ausführen>Debuggen aus. Die nächsten 15 Sekunden der Spracheingabe vom Mikrofon werden erkannt und im Konsolenfenster protokolliert.
Referenzdokumentation | Paket (npm) | Zusätzliche Beispiele auf GitHub | Quellcode der Bibliothek
In dieser Schnellstartanleitung verwenden Sie das Speech SDK und den LUIS-Dienst (Language Understanding), um Absichten aus Audiodaten zu erkennen, die von einem Mikrofon aufgezeichnet wurden. Genauer gesagt, verwenden Sie das Speech SDK zum Erfassen der Sprachausgabe und eine vordefinierte Domäne von LUIS zur Absichtserkennung für die Gebäudeautomatisierung, beispielsweise zum Ein- und Ausschalten einer Lampe.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Erstellen einer Sprachressource im Azure-Portal. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden. Sie benötigen dieses Mal keine Speech-Ressource. - Abrufen des Sprach-Ressourcenschlüssels und der -region. Wählen Sie nach der Bereitstellung Ihrer Sprachressource Zu Ressource wechseln aus, um Schlüssel anzuzeigen und zu verwalten.
Sie müssen außerdem das Speech SDK für Ihre Entwicklungsumgebung installieren und ein leeres Beispielprojekt erstellen.
Erstellen einer LUIS-App für die Absichtserkennung
Um die Schnellstartanleitung zur Absichtserkennung durchzuführen, müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und ein Projekt erstellen. Für diesen Schnellstart benötigen Sie ein LUIS-Abonnement in einer Region, in der die Absichtserkennung verfügbar ist. Ein Abonnement der Speech-Dienste ist nicht erforderlich.
Zuerst müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und eine App erstellen. Die erstellte LUIS-App verwendet eine vordefinierte Domäne für die Gebäudeautomatisierung, die Absichten, Entitäten und Beispieläußerungen bereitstellt. Am Ende dieser Schnellstartanleitung verfügen Sie über einen LUIS-Endpunkt in der Cloud, den Sie über das Speech SDK aufrufen können.
Führen Sie die folgenden Schritte aus, um Ihre LUIS-App zu erstellen:
Wenn Sie damit fertig sind, benötigen Sie vier Dinge:
- Erneute Veröffentlichung mit aktivierter Sprachvorbereitung
- Ihren Primärschlüssel für LUIS
- Ihren Standort für LUIS
- Ihre App-ID für LUIS
Diese Informationen finden Sie im LUIS-Vorschauportal:
Wählen Sie im LUIS-Vorschauportal Ihre App und dann die Schaltfläche Veröffentlichen aus.
Wählen Sie den Slot Produktion aus. Wählen Sie bei Verwendung von
en-US
die Option Einstellungen ändern aus, und legen Sie die Option Spracherkennungsvorbereitung auf Ein fest. Wählen Sie anschließend die Schaltfläche Veröffentlichen aus.Wichtig
Die Verwendung von Sprachvorbereitung wird dringend empfohlen, da hierdurch die Genauigkeit der Spracherkennung verbessert wird.
Wählen Sie im LUIS-Vorschauportal Verwalten und dann Azure-Ressourcen aus. Auf dieser Seite finden Sie Ihren LUIS-Schlüssel und -Speicherort (zuweilen auch als Region bezeichnet) für Ihre LUIS-Vorhersageressource.
Nachdem Sie Schlüssel und Speicherort abgerufen haben, benötigen Sie die App-ID. Wählen Sie Einstellungen aus. Ihre App-ID ist auf dieser Seite verfügbar.
Beginnen mit Codebausteinen
Fügen Sie Code hinzu, der als Gerüst für das Projekt fungiert.
<!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>
Hinzufügen von Benutzeroberflächenelementen
Sie fügen nun einige grundlegende Benutzeroberflächenelemente für Eingabefelder hinzu, verweisen auf den JavaScript-Code des Speech SDK, und rufen ein Autorisierungstoken ab, sofern verfügbar.
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Sicherheit von Azure KI Services.
<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="https://learn.microsoft.com/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>
// Note: Replace the URL with a valid endpoint to retrieve
// authorization tokens for your subscription.
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>
Erstellen einer Speech-Konfiguration
Bevor Sie ein SpeechRecognizer
-Objekt initialisieren können, müssen Sie eine Konfiguration erstellen, die den Abonnementschlüssel und die Abonnementregion verwendet. Fügen Sie diesen Code in die Methode startRecognizeOnceAsyncButton.addEventListener()
ein.
Hinweis
Das Speech SDK verwendet für die Erkennung standardmäßig amerikanisches Englisch (en-us). Informationen zum Auswählen der Ausgangssprache finden Sie unter Erkennen von Sprache.
// 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";
Erstellen einer Audiokonfiguration
Nun müssen Sie ein AudioConfig
-Objekt erstellen, das auf Ihr Eingabegerät verweist. Fügen Sie diesen Code in die Methode startIntentRecognizeAsyncButton.addEventListener()
direkt unterhalb der Speech-Konfiguration ein.
var audioConfig = SpeechSDK.AudioConfig.fromDefaultMicrophoneInput();
Initialisieren eines IntentRecognizer-Objekts
Erstellen Sie nun das Objekt IntentRecognizer
mithilfe der zuvor erstellten Objekte SpeechConfig
und AudioConfig
. Fügen Sie diesen Code in die Methode startIntentRecognizeAsyncButton.addEventListener()
ein.
recognizer = new SpeechSDK.IntentRecognizer(speechConfig, audioConfig);
Hinzufügen von LanguageUnderstandingModel und Absichten
Sie müssen der Absichtserkennung ein LanguageUnderstandingModel
zuordnen und die zu erkennenden Absichten hinzufügen. Wir verwenden Absichten aus der vordefinierten Domäne für die Gebäudeautomatisierung.
Fügen Sie diesen Code unterhalb von IntentRecognizer
ein. Stellen Sie sicher, dass Sie "YourLanguageUnderstandingAppId"
durch die ID Ihrer LUIS-App ersetzen.
if (appId.value !== "" && appId.value !== "YOUR_LANGUAGE_UNDERSTANDING_APP_ID") {
var lm = SpeechSDK.LanguageUnderstandingModel.fromAppId(appId.value);
recognizer.addAllIntents(lm);
}
Hinweis
Vom Speech SDK werden nur LUIS-v2.0-Endpunkte unterstützt. Die v3.0-Endpunkt-URL im Beispielabfragefeld muss manuell geändert werden, um ein v2.0-URL-Muster zu verwenden. Von LUIS-v2.0-Endpunkten wird immer eines der beiden folgenden Muster verwendet:
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=
Erkennen einer Absicht
Rufen Sie die Methode recognizeOnceAsync()
über das Objekt IntentRecognizer
auf. Diese Methode teilt dem Spracherkennungsdienst mit, dass Sie einen einzelnen Ausdruck zur Erkennung senden, und dass die Spracherkennung beendet werden soll, sobald der Ausdruck ermittelt wurde.
Fügen Sie den folgenden Code unterhalb der Modellergänzung ein:
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;
});
Überprüfen des Codes
<!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>
Erstellen der Tokenquelle (optional)
Wenn Sie die Webseite auf einem Webserver hosten möchten, können Sie optional eine Tokenquelle für die Demoanwendung bereitstellen. Auf diese Weise verlässt Ihr Abonnementschlüssel nie den Server, während Benutzer gleichzeitig die Sprachfunktionen verwenden können, ohne selbst Autorisierungscode eingeben zu müssen.
Erstellen Sie eine neue Datei mit dem Namen token.php
. In diesem Beispiel wird davon ausgegangen, dass der Webserver die PHP-Skriptsprache mit aktiviertem cURL unterstützt. Geben Sie den folgenden Code ein:
<?php
header('Access-Control-Allow-Origin: ' . $_SERVER['SERVER_NAME']);
// Replace with your own subscription key and service region (e.g., "westus").
$subscriptionKey = 'YourSubscriptionKey';
$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);
?>
Hinweis
Autorisierungstoken haben nur eine begrenzte Lebensdauer. Dieses vereinfachte Beispiel zeigt nicht, wie Autorisierungstoken automatisch aktualisiert werden. Als Benutzer können Sie die Seite manuell laden oder F5 drücken, um sie zu aktualisieren.
Erstellen und lokales Ausführen des Beispiels
Um die App zu starten, doppelklicken Sie auf die Datei „index.html“, oder öffnen Sie die Datei „index.html“ mit Ihren bevorzugten Browser. Eine einfache GUI wird angezeigt, über die Sie Ihren LUIS-Schlüssel, die LUIS-Region und die LUIS-Anwendungs-ID eingeben können. Nachdem Sie diese Felder eingegeben haben, können Sie auf die entsprechende Schaltfläche klicken, um eine Erkennung mithilfe des Mikrofons auszulösen.
Hinweis
Diese Methode kann für den Safari-Browser nicht verwendet werden. Für Safari muss die Beispielwebseite auf einem Webserver gehostet werden. In Safari können Websites, die aus einer lokalen Datei geladen werden, das Mikrofon nicht verwenden.
Erstellen und Ausführen des Beispiels über einen Webserver
Öffnen Sie zum Starten Ihrer App Ihren bevorzugten Browser, und verweisen Sie in diesem auf die öffentliche URL, unter der Sie den Ordner hosten. Geben Sie Ihre LUIS-Region sowie die LUIS-Anwendungs-ID ein, und lösen Sie über das Mikrofon eine Erkennung aus. Wenn dies konfiguriert wurde, wird ein Token aus der Tokenquelle abgerufen, und es wird mit der Erkennung gesprochener Befehle begonnen.
Referenzdokumentation | Paket (PyPi) | Zusätzliche Beispiele auf GitHub
In dieser Schnellstartanleitung verwenden Sie das Speech SDK und den LUIS-Dienst (Language Understanding), um Absichten aus Audiodaten zu erkennen, die von einem Mikrofon aufgezeichnet wurden. Genauer gesagt, verwenden Sie das Speech SDK zum Erfassen der Sprachausgabe und eine vordefinierte Domäne von LUIS zur Absichtserkennung für die Gebäudeautomatisierung, beispielsweise zum Ein- und Ausschalten einer Lampe.
Voraussetzungen
- Azure-Abonnement – Erstellen eines kostenlosen Kontos
- Erstellen einer Sprachressource im Azure-Portal. Sie können den kostenlosen Tarif (
F0
) verwenden, um den Dienst zu testen, und später für die Produktion auf einen kostenpflichtigen Tarif upgraden. Sie benötigen dieses Mal keine Speech-Ressource. - Abrufen des Sprach-Ressourcenschlüssels und der -region. Wählen Sie nach der Bereitstellung Ihrer Sprachressource Zu Ressource wechseln aus, um Schlüssel anzuzeigen und zu verwalten.
Sie müssen außerdem das Speech SDK für Ihre Entwicklungsumgebung installieren und ein leeres Beispielprojekt erstellen.
Erstellen einer LUIS-App für die Absichtserkennung
Um die Schnellstartanleitung zur Absichtserkennung durchzuführen, müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und ein Projekt erstellen. Für diesen Schnellstart benötigen Sie ein LUIS-Abonnement in einer Region, in der die Absichtserkennung verfügbar ist. Ein Abonnement der Speech-Dienste ist nicht erforderlich.
Zuerst müssen Sie über das LUIS-Vorschauportal ein LUIS-Konto und eine App erstellen. Die erstellte LUIS-App verwendet eine vordefinierte Domäne für die Gebäudeautomatisierung, die Absichten, Entitäten und Beispieläußerungen bereitstellt. Am Ende dieser Schnellstartanleitung verfügen Sie über einen LUIS-Endpunkt in der Cloud, den Sie über das Speech SDK aufrufen können.
Führen Sie die folgenden Schritte aus, um Ihre LUIS-App zu erstellen:
Wenn Sie damit fertig sind, benötigen Sie vier Dinge:
- Erneute Veröffentlichung mit aktivierter Sprachvorbereitung
- Ihren Primärschlüssel für LUIS
- Ihren Standort für LUIS
- Ihre App-ID für LUIS
Diese Informationen finden Sie im LUIS-Vorschauportal:
Wählen Sie im LUIS-Vorschauportal Ihre App und dann die Schaltfläche Veröffentlichen aus.
Wählen Sie den Slot Produktion aus. Wählen Sie bei Verwendung von
en-US
die Option Einstellungen ändern aus, und legen Sie die Option Spracherkennungsvorbereitung auf Ein fest. Wählen Sie anschließend die Schaltfläche Veröffentlichen aus.Wichtig
Die Verwendung von Sprachvorbereitung wird dringend empfohlen, da hierdurch die Genauigkeit der Spracherkennung verbessert wird.
Wählen Sie im LUIS-Vorschauportal Verwalten und dann Azure-Ressourcen aus. Auf dieser Seite finden Sie Ihren LUIS-Schlüssel und -Speicherort (zuweilen auch als Region bezeichnet) für Ihre LUIS-Vorhersageressource.
Nachdem Sie Schlüssel und Speicherort abgerufen haben, benötigen Sie die App-ID. Wählen Sie Einstellungen aus. Ihre App-ID ist auf dieser Seite verfügbar.
Öffnen Ihres Projekts
- Öffnen Sie Ihre bevorzugte IDE.
- Erstellen Sie ein neues Projekt, erstellen Sie eine Datei namens
quickstart.py
, und öffnen Sie diese Datei.
Beginnen mit Codebausteinen
Fügen Sie Code hinzu, der als Gerüst für das Projekt fungiert.
import azure.cognitiveservices.speech as speechsdk
print("Say something...")
Erstellen einer Speech-Konfiguration
Bevor Sie ein IntentRecognizer
-Objekt initialisieren können, müssen Sie eine Konfiguration erstellen, die den Schlüssel und Speicherort Ihrer LUIS-Vorhersageressource verwendet.
Fügen Sie diesen Code in quickstart.py
ein. Stellen Sie sicher, dass Sie folgende Werte aktualisieren:
- Ersetzen Sie
"YourLanguageUnderstandingSubscriptionKey"
durch Ihren LUIS-Vorhersageschlüssel. - Ersetzen Sie
"YourLanguageUnderstandingServiceRegion"
durch Ihren LUIS-Speicherort. Verwenden Sie den Regionsbezeichner der Region.
Tipp
Informationen dazu, wie Sie diese Werte ermitteln, finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
Wichtig
Denken Sie daran, den Schlüssel aus Ihrem Code zu entfernen, wenn Sie fertig sind, und ihn niemals zu veröffentlichen. Verwenden Sie für die Produktion eine sichere Art der Speicherung und des Zugriffs auf Ihre Anmeldeinformationen wie Azure Key Vault. Weitere Informationen finden Sie im Artikel zur Sicherheit von Azure KI Services.
# 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")
In diesem Beispiel wird das Objekt SpeechConfig
mit dem LUIS-Schlüssel und der entsprechenden Region erstellt. Eine vollständige Liste der verfügbaren Methoden finden Sie unter SpeechConfig-Klasse.
Das Speech SDK verwendet für die Erkennung standardmäßig amerikanisches Englisch (en-us). Informationen zum Auswählen der Ausgangssprache finden Sie unter Erkennen von Sprache.
Initialisieren eines IntentRecognizer-Objekts
Als Nächstes erstellen wir ein Objekt vom Typ IntentRecognizer
. Fügen Sie den folgenden Code direkt unterhalb Ihrer Speech-Konfiguration ein:
# Set up the intent recognizer
intent_recognizer = speechsdk.intent.IntentRecognizer(speech_config=intent_config)
Hinzufügen von LanguageUnderstandingModel und Absichten
Sie müssen der Absichtserkennung ein LanguageUnderstandingModel
zuordnen und die zu erkennenden Absichten hinzufügen. Wir verwenden Absichten aus der vordefinierten Domäne für die Gebäudeautomatisierung.
Fügen Sie diesen Code unterhalb von IntentRecognizer
ein. Stellen Sie sicher, dass Sie "YourLanguageUnderstandingAppId"
durch die ID Ihrer LUIS-App ersetzen.
Tipp
Informationen dazu, wie Sie diesen Wert ermitteln, finden Sie unter Erstellen einer LUIS-App für die Absichtserkennung.
# 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)
In diesem Beispiel wird die Funktion add_intents()
verwendet, um eine Liste explizit definierter Absichten hinzuzufügen. Wenn Sie alle Absichten aus einem Modell hinzufügen möchten, verwenden Sie add_all_intents(model)
, und übergeben Sie das Modell.
Erkennen einer Absicht
Rufen Sie die Methode recognize_once()
über das Objekt IntentRecognizer
auf. Diese Methode teilt dem Spracherkennungsdienst mit, dass Sie einen einzelnen Ausdruck zur Erkennung senden, und dass die Spracherkennung beendet werden soll, sobald der Ausdruck ermittelt wurde.
Fügen Sie diesen Code unterhalb Ihres Modells ein:
intent_result = intent_recognizer.recognize_once()
Anzeigen der Erkennungsergebnisse (oder Fehler)
Wenn das Erkennungsergebnis vom Speech-Dienst zurückgegeben wird, möchten Sie es natürlich in irgendeiner Form verwenden. In diesem Beispiel geben wir das Ergebnis einfach in der Konsole aus.
Fügen Sie unterhalb des Aufrufs von recognize_once()
den folgenden Code hinzu:
# 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))
Überprüfen des Codes
Ihr Code sollte nun wie folgt aussehen:
Hinweis
Wir haben dieser Version einige Kommentare hinzugefügt.
# 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>
Erstellen und Ausführen der App
Führen Sie das Beispiel über die Konsole oder in Ihrer IDE aus:
python quickstart.py
Die nächsten 15 Sekunden der Spracheingabe vom Mikrofon werden erkannt und im Konsolenfenster protokolliert.
Referenzdokumentation | Paket (Go) | Zusätzliche Beispiele auf GitHub
Das Speech SDK für Go unterstützt keine Absichtserkennung. Wählen Sie eine andere Programmiersprache aus, oder verwenden Sie die Go-Referenz und -Beispiele unter dem entsprechenden Link am Anfang dieses Artikels.
Referenzdokumentation | Paket (Download) | Zusätzliche Beispiele auf GitHub
Das Speech SDK für Objective-C unterstützt zwar die Absichtserkennung, aber wir haben hier noch keinen Leitfaden aufgenommen. Wählen Sie eine andere Programmiersprache aus, um loszulegen und sich über die Konzepte zu informieren, oder verwenden Sie die Objective-C-Referenz und -Beispiele unter dem entsprechenden Link am Anfang dieses Artikels.
Referenzdokumentation | Paket (Download) | Zusätzliche Beispiele auf GitHub
Das Speech SDK für Swift unterstützt zwar die Absichtserkennung, aber wir haben hier noch keinen Leitfaden aufgenommen. Wählen Sie eine andere Programmiersprache aus, um loszulegen und sich über die Konzepte zu informieren, oder verwenden Sie die Swift-Referenz und -Beispiele unter dem entsprechenden Link am Anfang dieses Artikels.
REST-API-Referenz für die Spracherkennung | REST-API-Referenz für die Spracherkennung für kurze Audiodateien | Zusätzliche Beispiele auf GitHub
Sie können zwar die REST-API für die Absichtserkennung verwenden, aber wir haben hier noch keinen Leitfaden aufgenommen. Wählen Sie eine andere Programmiersprache aus, um loszulegen und sich über die Konzepte zu informieren.
Die Speech CLI unterstützt zwar die Absichtserkennung, aber wir haben hier noch keinen Leitfaden aufgenommen. Wählen Sie eine andere Programmiersprache aus, um zu beginnen und sich über die Konzepte zu informieren. Weitere Informationen zur CLI finden Sie ansonsten in der Übersicht der Speech CLI.