Intenties herkennen met eenvoudige taalpatroonkoppeling
De Speech SDK van Azure AI-services heeft een ingebouwde functie voor het herkennen van intenties met eenvoudige taalpatronen. Een intentie is iets wat de gebruiker wil doen: een venster sluiten, een selectievakje markeren, tekst invoegen, enzovoort.
In deze handleiding gebruikt u de Speech SDK om een C++-consoletoepassing te ontwikkelen die intenties afleidt van gebruikersuitingen via de microfoon van uw apparaat. U leert het volgende:
- Een Visual Studio-project maken dat verwijst naar het NuGet-pakket van de Speech SDK
- Een spraakconfiguratie maken en een intentieherkenning ophalen
- Intenties en patronen toevoegen via de Speech SDK-API
- Spraak herkennen met een microfoon
- Asynchrone, gebeurtenisgestuurde continue herkenning gebruiken
Wanneer gebruikt u patroonkoppeling
Gebruik patroonkoppeling als:
- U bent alleen geïnteresseerd in het vergelijken van strikt wat de gebruiker zei. Deze patronen komen agressief overeen dan conversationele language understanding (CLU).
- U hebt geen toegang tot een CLU-model, maar wilt toch intenties.
Zie het overzicht van patroonkoppelingen voor meer informatie.
Vereisten
Zorg ervoor dat u de volgende items hebt voordat u aan deze handleiding begint:
- Een Azure AI-servicesresource of een Unified Speech-resource
- Visual Studio 2019 (elke editie).
Spraak en eenvoudige patronen
De eenvoudige patronen zijn een functie van de Speech SDK en hebben een Azure AI-servicesresource of een Unified Speech-resource nodig.
Een patroon is een woordgroep die een entiteit ergens erin bevat. Een entiteit wordt gedefinieerd door een woord tussen accolades te verpakken. In dit voorbeeld wordt een entiteit gedefinieerd met de id 'floorName', die hoofdlettergevoelig is:
Take me to the {floorName}
Alle andere speciale tekens en leestekens worden genegeerd.
Intenties worden toegevoegd met aanroepen naar de IntentRecognizer-AddIntent>() API.
Een project maken
Maak een nieuw C#-consoletoepassingsproject in Visual Studio 2019 en installeer de Speech SDK.
Beginnen met standaardcode
We gaan code openen Program.cs
en toevoegen die werkt als een skelet voor ons project.
using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Intent;
namespace helloworld
{
class Program
{
static void Main(string[] args)
{
IntentPatternMatchingWithMicrophoneAsync().Wait();
}
private static async Task IntentPatternMatchingWithMicrophoneAsync()
{
var config = SpeechConfig.FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
}
}
}
Een Speech-configuratie maken
Voordat u een IntentRecognizer
object kunt initialiseren, moet u een configuratie maken die gebruikmaakt van de sleutel en locatie voor uw Voorspellingsresource voor Azure AI-services.
- Vervang door
"YOUR_SUBSCRIPTION_KEY"
de voorspellingssleutel van uw Azure AI-services. - Vervang deze door
"YOUR_SUBSCRIPTION_REGION"
de resourceregio van uw Azure AI-services.
In dit voorbeeld wordt de methode FromSubscription()
gebruikt om de SpeechConfig
te maken. Zie SpeechConfig Class voor een volledige lijst met beschikbare methoden.
Een IntentRecognizer initialiseren
Maak nu een IntentRecognizer
. Voeg deze code toe onder uw Speech-configuratie.
using (var intentRecognizer = new IntentRecognizer(config))
{
}
Enkele intenties toevoegen
U moet enkele patronen koppelen aan de IntentRecognizer
door te bellen AddIntent()
.
We voegen twee intenties toe met dezelfde id voor het wijzigen van vloeren en een andere intentie met een afzonderlijke id voor het openen en sluiten van deuren.
Voeg deze code in het using
blok in:
intentRecognizer.AddIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer.AddIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer.AddIntent("{action} the door.", "OpenCloseDoor");
Notitie
Er is geen limiet voor het aantal entiteiten dat u kunt declareren, maar ze komen losjes overeen. Als u een woordgroep als {action} toevoegt, komt deze overeen wanneer er tekst voor het woord 'deur' staat. Intenties worden geëvalueerd op basis van hun aantal entiteiten. Als er twee patronen overeenkomen, wordt het patroon met meer gedefinieerde entiteiten geretourneerd.
Een intentie herkennen
Vanuit het IntentRecognizer
-object roept u de methode RecognizeOnceAsync()
aan. Met deze methode wordt de Speech-service gevraagd om spraak in één woordgroep te herkennen en te stoppen met het herkennen van spraak zodra de woordgroep is geïdentificeerd. Voor de eenvoud zullen we wachten tot de toekomstige retournering voltooid is.
Voeg deze code in onder uw intenties:
Console.WriteLine("Say something...");
var result = await intentRecognizer.RecognizeOnceAsync();
De herkenningsresultaten (of fouten) weergeven
Wanneer de Speech-service het herkenningsresultaat retourneert, wordt het resultaat afgedrukt.
Voeg deze code toe onder var result = await recognizer.RecognizeOnceAsync();
:
string floorName;
switch (result.Reason)
{
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
Console.WriteLine($" Intent not recognized.");
break;
case ResultReason.RecognizedIntent:
Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
Console.WriteLine($" Intent Id= {result.IntentId}.");
var entities = result.Entities;
if (entities.TryGetValue("floorName", out floorName))
{
Console.WriteLine($" FloorName= {floorName}");
}
if (entities.TryGetValue("action", out floorName))
{
Console.WriteLine($" Action= {floorName}");
}
break;
case ResultReason.NoMatch:
{
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
var noMatch = NoMatchDetails.FromResult(result);
switch (noMatch.Reason)
{
case NoMatchReason.NotRecognized:
Console.WriteLine($"NOMATCH: Speech was detected, but not recognized.");
break;
case NoMatchReason.InitialSilenceTimeout:
Console.WriteLine($"NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech.");
break;
case NoMatchReason.InitialBabbleTimeout:
Console.WriteLine($"NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech.");
break;
case NoMatchReason.KeywordNotRecognized:
Console.WriteLine($"NOMATCH: Keyword not recognized");
break;
}
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 set the speech resource key and region values?");
}
break;
}
default:
break;
}
Uw code controleren
Op dit punt moet uw code er als volgt uitzien:
using System;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Intent;
namespace helloworld
{
class Program
{
static void Main(string[] args)
{
IntentPatternMatchingWithMicrophoneAsync().Wait();
}
private static async Task IntentPatternMatchingWithMicrophoneAsync()
{
var config = SpeechConfig.FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
using (var intentRecognizer = new IntentRecognizer(config))
{
intentRecognizer.AddIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer.AddIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer.AddIntent("{action} the door.", "OpenCloseDoor");
Console.WriteLine("Say something...");
var result = await intentRecognizer.RecognizeOnceAsync();
string floorName;
switch (result.Reason)
{
case ResultReason.RecognizedSpeech:
Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
Console.WriteLine($" Intent not recognized.");
break;
case ResultReason.RecognizedIntent:
Console.WriteLine($"RECOGNIZED: Text= {result.Text}");
Console.WriteLine($" Intent Id= {result.IntentId}.");
var entities = result.Entities;
if (entities.TryGetValue("floorName", out floorName))
{
Console.WriteLine($" FloorName= {floorName}");
}
if (entities.TryGetValue("action", out floorName))
{
Console.WriteLine($" Action= {floorName}");
}
break;
case ResultReason.NoMatch:
{
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
var noMatch = NoMatchDetails.FromResult(result);
switch (noMatch.Reason)
{
case NoMatchReason.NotRecognized:
Console.WriteLine($"NOMATCH: Speech was detected, but not recognized.");
break;
case NoMatchReason.InitialSilenceTimeout:
Console.WriteLine($"NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech.");
break;
case NoMatchReason.InitialBabbleTimeout:
Console.WriteLine($"NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech.");
break;
case NoMatchReason.KeywordNotRecognized:
Console.WriteLine($"NOMATCH: Keyword not recognized");
break;
}
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 set the speech resource key and region values?");
}
break;
}
default:
break;
}
}
}
}
}
De app bouwen en uitvoeren
U bent nu klaar om uw app te bouwen en de spraakherkenning te testen met behulp van de Speech-service.
- De code compileren: kies in de menubalk van Visual Studio Build>Build Solution.
- Start uw app: kies in de menubalk Debug>Start Debugging of druk op F5.
- Herkenning starten - u wordt gevraagd iets te zeggen. De standaardtaal is Engels. Uw spraak wordt verzonden naar de Speech-service, getranscribeerd als tekst en weergegeven in de console.
Als u bijvoorbeeld 'Neem me mee naar verdieping 7', moet dit de uitvoer zijn:
Say something ...
RECOGNIZED: Text= Take me to floor 7.
Intent Id= ChangeFloors
FloorName= 7
Een project maken
Maak een nieuw C++-consoletoepassingsproject in Visual Studio 2019 en installeer de Speech SDK.
Beginnen met standaardcode
We gaan code openen helloworld.cpp
en toevoegen die werkt als een skelet voor ons project.
#include <iostream>
#include <speechapi_cxx.h>
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Intent;
int main()
{
std::cout << "Hello World!\n";
auto config = SpeechConfig::FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
}
Een Speech-configuratie maken
Voordat u een IntentRecognizer
object kunt initialiseren, moet u een configuratie maken die gebruikmaakt van de sleutel en locatie voor uw Voorspellingsresource voor Azure AI-services.
- Vervang door
"YOUR_SUBSCRIPTION_KEY"
de voorspellingssleutel van uw Azure AI-services. - Vervang deze door
"YOUR_SUBSCRIPTION_REGION"
de resourceregio van uw Azure AI-services.
In dit voorbeeld wordt de methode FromSubscription()
gebruikt om de SpeechConfig
te maken. Zie SpeechConfig Class voor een volledige lijst met beschikbare methoden.
Een IntentRecognizer initialiseren
Maak nu een IntentRecognizer
. Voeg deze code toe onder uw Speech-configuratie.
auto intentRecognizer = IntentRecognizer::FromConfig(config);
Enkele intenties toevoegen
U moet enkele patronen koppelen aan de IntentRecognizer
door te bellen AddIntent()
.
We voegen twee intenties toe met dezelfde id voor het wijzigen van vloeren en een andere intentie met een afzonderlijke id voor het openen en sluiten van deuren.
intentRecognizer->AddIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer->AddIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer->AddIntent("{action} the door.", "OpenCloseDoor");
Notitie
Er is geen limiet voor het aantal entiteiten dat u kunt declareren, maar ze komen losjes overeen. Als u een woordgroep als {action} toevoegt, komt deze overeen wanneer er tekst voor het woord 'deur' staat. Intenties worden geëvalueerd op basis van hun aantal entiteiten. Als er twee patronen overeenkomen, wordt het patroon met meer gedefinieerde entiteiten geretourneerd.
Een intentie herkennen
Vanuit het IntentRecognizer
-object roept u de methode RecognizeOnceAsync()
aan. Met deze methode wordt de Speech-service gevraagd om spraak in één woordgroep te herkennen en te stoppen met het herkennen van spraak zodra de woordgroep is geïdentificeerd. Voor de eenvoud zullen we wachten tot de toekomstige retournering voltooid is.
Voeg deze code in onder uw intenties:
std::cout << "Say something ..." << std::endl;
auto result = intentRecognizer->RecognizeOnceAsync().get();
De herkenningsresultaten (of fouten) weergeven
Wanneer de Speech-service het herkenningsresultaat retourneert, wordt het resultaat afgedrukt.
Voeg deze code toe onder auto result = intentRecognizer->RecognizeOnceAsync().get();
:
switch (result->Reason)
{
case ResultReason::RecognizedSpeech:
std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
std::cout << "NO INTENT RECOGNIZED!" << std::endl;
break;
case ResultReason::RecognizedIntent:
std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
std::cout << " Intent Id = " << result->IntentId.c_str() << std::endl;
auto entities = result->GetEntities();
if (entities.find("floorName") != entities.end())
{
std::cout << " Floor name: = " << entities["floorName"].c_str() << std::endl;
}
if (entities.find("action") != entities.end())
{
std::cout << " Action: = " << entities["action"].c_str() << std::endl;
}
break;
case ResultReason::NoMatch:
{
auto noMatch = NoMatchDetails::FromResult(result);
switch (noMatch->Reason)
{
case NoMatchReason::NotRecognized:
std::cout << "NOMATCH: Speech was detected, but not recognized." << std::endl;
break;
case NoMatchReason::InitialSilenceTimeout:
std::cout << "NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech." << std::endl;
break;
case NoMatchReason::InitialBabbleTimeout:
std::cout << "NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech." << std::endl;
break;
case NoMatchReason::KeywordNotRecognized:
std::cout << "NOMATCH: Keyword not recognized" << std::endl;
break;
}
break;
}
case ResultReason::Canceled:
{
auto cancellation = CancellationDetails::FromResult(result);
if (!cancellation->ErrorDetails.empty())
{
std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails.c_str() << std::endl;
std::cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
}
}
default:
break;
}
Uw code controleren
Op dit punt moet uw code er als volgt uitzien:
#include <iostream>
#include <speechapi_cxx.h>
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Intent;
int main()
{
auto config = SpeechConfig::FromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
auto intentRecognizer = IntentRecognizer::FromConfig(config);
intentRecognizer->AddIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer->AddIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer->AddIntent("{action} the door.", "OpenCloseDoor");
std::cout << "Say something ..." << std::endl;
auto result = intentRecognizer->RecognizeOnceAsync().get();
switch (result->Reason)
{
case ResultReason::RecognizedSpeech:
std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
std::cout << "NO INTENT RECOGNIZED!" << std::endl;
break;
case ResultReason::RecognizedIntent:
std::cout << "RECOGNIZED: Text = " << result->Text.c_str() << std::endl;
std::cout << " Intent Id = " << result->IntentId.c_str() << std::endl;
auto entities = result->GetEntities();
if (entities.find("floorName") != entities.end())
{
std::cout << " Floor name: = " << entities["floorName"].c_str() << std::endl;
}
if (entities.find("action") != entities.end())
{
std::cout << " Action: = " << entities["action"].c_str() << std::endl;
}
break;
case ResultReason::NoMatch:
{
auto noMatch = NoMatchDetails::FromResult(result);
switch (noMatch->Reason)
{
case NoMatchReason::NotRecognized:
std::cout << "NOMATCH: Speech was detected, but not recognized." << std::endl;
break;
case NoMatchReason::InitialSilenceTimeout:
std::cout << "NOMATCH: The start of the audio stream contains only silence, and the service timed out waiting for speech." << std::endl;
break;
case NoMatchReason::InitialBabbleTimeout:
std::cout << "NOMATCH: The start of the audio stream contains only noise, and the service timed out waiting for speech." << std::endl;
break;
case NoMatchReason::KeywordNotRecognized:
std::cout << "NOMATCH: Keyword not recognized." << std::endl;
break;
}
break;
}
case ResultReason::Canceled:
{
auto cancellation = CancellationDetails::FromResult(result);
if (!cancellation->ErrorDetails.empty())
{
std::cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails.c_str() << std::endl;
std::cout << "CANCELED: Did you set the speech resource key and region values?" << std::endl;
}
}
default:
break;
}
}
De app bouwen en uitvoeren
U bent nu klaar om uw app te bouwen en de spraakherkenning te testen met behulp van de Speech-service.
- De code compileren: kies in de menubalk van Visual Studio Build>Build Solution.
- Start uw app: kies in de menubalk Debug>Start Debugging of druk op F5.
- Herkenning starten - u wordt gevraagd iets te zeggen. De standaardtaal is Engels. Uw spraak wordt verzonden naar de Speech-service, getranscribeerd als tekst en weergegeven in de console.
Als u bijvoorbeeld 'Neem me mee naar verdieping 7', moet dit de uitvoer zijn:
Say something ...
RECOGNIZED: Text = Take me to floor 7.
Intent Id = ChangeFloors
Floor name: = 7
Referentiedocumentatie | Aanvullende voorbeelden op GitHub
In deze quickstart installeert u de Speech SDK voor Java.
Platformvereisten
Kies uw doelomgeving:
De Speech SDK voor Java is compatibel met Windows, Linux en macOS.
In Windows moet u de 64-bits doelarchitectuur gebruiken. Windows 10 of hoger is vereist.
Installeer Microsoft Visual C++ Redistributable voor Visual Studio 2015, 2017, 2019 en 2022 voor uw platform. Als u dit pakket voor de eerste keer installeert, moet u mogelijk opnieuw opstarten.
De Speech SDK voor Java biedt geen ondersteuning voor Windows in ARM64.
Installeer een Java Development Kit zoals Azul Zulu OpenJDK. De Microsoft Build van OpenJDK of uw favoriete JDK moet ook werken.
De Speech SDK voor Java installeren
Sommige instructies gebruiken een specifieke SDK-versie, zoals 1.42.0
. Als u de nieuwste versie wilt controleren, zoekt u in onze GitHub-opslagplaats.
Kies uw doelomgeving:
Deze handleiding laat zien hoe u de Speech SDK voor Java installeert in de Java Runtime.
Ondersteunde besturingssystemen
Het Speech SDK-pakket voor Java is beschikbaar voor deze besturingssystemen:
- Windows: alleen 64-bits.
- Mac: macOS X versie 10.14 of hoger.
- Linux: Bekijk de ondersteunde Linux-distributies en doelarchitecturen.
Volg deze stappen om de Speech SDK voor Java te installeren met behulp van Apache Maven:
Installeer Apache Maven.
Open een opdrachtprompt waarin u het nieuwe project wilt opnemen en maak een nieuw pom.xml bestand.
Kopieer de volgende XML-inhoud naar pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.microsoft.cognitiveservices.speech.samples</groupId> <artifactId>quickstart-eclipse</artifactId> <version>1.0.0-SNAPSHOT</version> <build> <sourceDirectory>src</sourceDirectory> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>com.microsoft.cognitiveservices.speech</groupId> <artifactId>client-sdk</artifactId> <version>1.42.0</version> </dependency> </dependencies> </project>
Voer de volgende Maven-opdracht uit om de Speech SDK en afhankelijkheden te installeren.
mvn clean dependency:copy-dependencies
Beginnen met standaardcode
Open
Main.java
vanuit de src dir.Vervang de inhoud van het bestand door het volgende:
package quickstart;
import java.util.Dictionary;
import java.util.concurrent.ExecutionException;
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.intent.*;
public class Program {
public static void main(String[] args) throws InterruptedException, ExecutionException {
IntentPatternMatchingWithMicrophone();
}
public static void IntentPatternMatchingWithMicrophone() throws InterruptedException, ExecutionException {
SpeechConfig config = SpeechConfig.fromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
}
}
Een Speech-configuratie maken
Voordat u een IntentRecognizer
object kunt initialiseren, moet u een configuratie maken die gebruikmaakt van de sleutel en locatie voor uw Voorspellingsresource voor Azure AI-services.
- Vervang door
"YOUR_SUBSCRIPTION_KEY"
de voorspellingssleutel van uw Azure AI-services. - Vervang deze door
"YOUR_SUBSCRIPTION_REGION"
de resourceregio van uw Azure AI-services.
In dit voorbeeld wordt de methode FromSubscription()
gebruikt om de SpeechConfig
te maken. Zie SpeechConfig Class voor een volledige lijst met beschikbare methoden.
Een IntentRecognizer initialiseren
Maak nu een IntentRecognizer
. Voeg deze code toe onder uw Speech-configuratie.
try (IntentRecognizer intentRecognizer = new IntentRecognizer(config)) {
}
Enkele intenties toevoegen
U moet enkele patronen koppelen aan de IntentRecognizer
door te bellen addIntent()
.
We voegen twee intenties toe met dezelfde id voor het wijzigen van vloeren en een andere intentie met een afzonderlijke id voor het openen en sluiten van deuren.
Voeg deze code in het try
blok in:
intentRecognizer.addIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer.addIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer.addIntent("{action} the door.", "OpenCloseDoor");
Notitie
Er is geen limiet voor het aantal entiteiten dat u kunt declareren, maar ze komen losjes overeen. Als u een woordgroep zoals {action} toevoegt, komt deze overeen wanneer er tekst voor het woord 'deur' staat. Intenties worden geëvalueerd op basis van hun aantal entiteiten. Als er twee patronen overeenkomen, wordt het patroon met meer gedefinieerde entiteiten geretourneerd.
Een intentie herkennen
Vanuit het IntentRecognizer
-object roept u de methode recognizeOnceAsync()
aan. Met deze methode wordt de Speech-service gevraagd om spraak in één woordgroep te herkennen en te stoppen met het herkennen van spraak zodra de woordgroep is geïdentificeerd. Voor de eenvoud zullen we wachten tot de toekomstige retournering voltooid is.
Voeg deze code in onder uw intenties:
System.out.println("Say something...");
IntentRecognitionResult result = intentRecognizer.recognizeOnceAsync().get();
De herkenningsresultaten (of fouten) weergeven
Wanneer het herkenningsresultaat wordt geretourneerd door de Speech-service, wordt het resultaat afgedrukt.
Voeg deze code toe onder IntentRecognitionResult result = recognizer.recognizeOnceAsync().get();
:
if (result.getReason() == ResultReason.RecognizedSpeech) {
System.out.println("RECOGNIZED: Text= " + result.getText());
System.out.println(String.format("%17s", "Intent not recognized."));
}
else if (result.getReason() == ResultReason.RecognizedIntent) {
System.out.println("RECOGNIZED: Text= " + result.getText());
System.out.println(String.format("%17s %s", "Intent Id=", result.getIntentId() + "."));
Dictionary<String, String> entities = result.getEntities();
if (entities.get("floorName") != null) {
System.out.println(String.format("%17s %s", "FloorName=", entities.get("floorName")));
}
if (entities.get("action") != null) {
System.out.println(String.format("%17s %s", "Action=", entities.get("action")));
}
}
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?");
}
}
Uw code controleren
Op dit punt moet uw code er als volgt uitzien:
package quickstart;
import java.util.Dictionary;
import java.util.concurrent.ExecutionException;
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.intent.*;
public class Main {
public static void main(String[] args) throws InterruptedException, ExecutionException {
IntentPatternMatchingWithMicrophone();
}
public static void IntentPatternMatchingWithMicrophone() throws InterruptedException, ExecutionException {
SpeechConfig config = SpeechConfig.fromSubscription("YOUR_SUBSCRIPTION_KEY", "YOUR_SUBSCRIPTION_REGION");
try (IntentRecognizer intentRecognizer = new IntentRecognizer(config)) {
intentRecognizer.addIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer.addIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer.addIntent("{action} the door.", "OpenCloseDoor");
System.out.println("Say something...");
IntentRecognitionResult result = intentRecognizer.recognizeOnceAsync().get();
if (result.getReason() == ResultReason.RecognizedSpeech) {
System.out.println("RECOGNIZED: Text= " + result.getText());
System.out.println(String.format("%17s", "Intent not recognized."));
}
else if (result.getReason() == ResultReason.RecognizedIntent) {
System.out.println("RECOGNIZED: Text= " + result.getText());
System.out.println(String.format("%17s %s", "Intent Id=", result.getIntentId() + "."));
Dictionary<String, String> entities = result.getEntities();
if (entities.get("floorName") != null) {
System.out.println(String.format("%17s %s", "FloorName=", entities.get("floorName")));
}
if (entities.get("action") != null) {
System.out.println(String.format("%17s %s", "Action=", entities.get("action")));
}
}
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?");
}
}
}
}
}
De app bouwen en uitvoeren
U bent nu klaar om uw app te bouwen en onze intentieherkenning te testen met behulp van de spraakservice en de ingesloten patroonmatcher.
Selecteer de knop Uitvoeren in Eclipse of druk op Ctrl+F11 en bekijk vervolgens de uitvoer voor de tekst 'Iets zeggen...' prompt. Zodra deze wordt weergegeven, spreekt u uw uiting en bekijkt u de uitvoer.
Als u bijvoorbeeld 'Neem me mee naar verdieping 7', moet dit de uitvoer zijn:
Say something ...
RECOGNIZED: Text= Take me to floor 7.
Intent Id= ChangeFloors
FloorName= 7
Volgende stappen
Verbeter uw patroonkoppeling met behulp van aangepaste entiteiten.