Så här identifierar du avsikter med enkel språkmönstermatchning

Cognitive Services Speech SDK har en inbyggd funktion som ger avsiktsigenkänning med enkel språkmönstermatchning. En avsikt är något som användaren vill göra: stänga ett fönster, markera en kryssruta, infoga text osv.

I den här guiden använder du Speech SDK för att utveckla ett C++-konsolprogram som härleder avsikter från användaryttranden via enhetens mikrofon. Du lär dig följande:

  • Skapa ett Visual Studio-projekt som refererar till Speech SDK NuGet-paketet
  • Skapa en talkonfiguration och hämta en avsiktsigenkänning
  • Lägga till avsikter och mönster via Speech SDK-API:et
  • Identifiera tal från en mikrofon
  • Använd asynkron, händelsedriven kontinuerlig igenkänning

När mönstermatchning ska användas

Använd den här exempelkoden om:

  • Du är bara intresserad av att matcha strikt vad användaren sa. Dessa mönster matchar mer aggressivt än LUIS.
  • Du har inte åtkomst till en LUIS-app , men vill ändå ha avsikter.
  • Du kan inte eller vill inte skapa en LUIS-app , men du vill fortfarande ha en röstkommandofunktion.

Mer information finns i översikten över mönstermatchning.

Förutsättningar

Se till att du har följande objekt innan du påbörjar den här guiden:

Tal och enkla mönster

De enkla mönstren är en funktion i Speech SDK och behöver en Cognitive Services-resurs eller en Unified Speech-resurs.

Ett mönster är en fras som innehåller en entitet någonstans i den. En entitet definieras genom att omsluta ett ord inom klammerparenteser. Det här exemplet definierar en entitet med ID:t "floorName", som är skiftlägeskänsligt:

    Take me to the {floorName}

Alla andra specialtecken och skiljetecken ignoreras.

Avsikter läggs till med hjälp av anrop till INTENTRecognizer-AddIntent>()-API:et.

Skapa ett projekt

Skapa ett nytt C#-konsolprogramprojekt i Visual Studio 2019 och installera Speech SDK.

Börja med någon exempelkod

Nu ska vi öppna Program.cs och lägga till kod som fungerar som ett skelett för vårt projekt.

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");
        }
    }
}

Skapa en Speech-konfiguration

Innan du kan initiera ett IntentRecognizer objekt måste du skapa en konfiguration som använder nyckeln och platsen för din Cognitive Services-förutsägelseresurs.

  • Ersätt "YOUR_SUBSCRIPTION_KEY" med förutsägelsenyckeln för Cognitive Services.
  • Ersätt "YOUR_SUBSCRIPTION_REGION" med din Cognitive Services-resursregion.

I det FromSubscription() här exemplet används metoden för att skapa SpeechConfig. En fullständig lista över tillgängliga metoder finns i SpeechConfig-klass.

Initiera en IntentRecognizer

Skapa nu en IntentRecognizer. Infoga den här koden precis under speech-konfigurationen.

using (var intentRecognizer = new IntentRecognizer(config))
{
    
}

Lägg till några avsikter

Du måste associera vissa mönster med IntentRecognizer genom att anropa AddIntent(). Vi lägger till två avsikter med samma ID för att byta golv och en annan avsikt med ett separat ID för att öppna och stänga dörrar. Infoga den här koden i using blocket:

intentRecognizer.AddIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer.AddIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer.AddIntent("{action} the door.", "OpenCloseDoor");

Anteckning

Det finns ingen gräns för antalet entiteter som du kan deklarera, men de matchas löst. Om du lägger till en fras som "{action} door" matchar den varje gång det finns text före ordet "dörr". Avsikter utvärderas baserat på deras antal entiteter. Om två mönster skulle matcha returneras den med mer definierade entiteter.

Identifiera en avsikt

Från -objektet IntentRecognizer anropar RecognizeOnceAsync() du metoden. Den här metoden ber taltjänsten att känna igen tal i en enda fras och sluta känna igen tal när frasen har identifierats. För enkelhetens skull väntar vi på att framtiden ska slutföras.

Infoga den här koden under dina avsikter:

Console.WriteLine("Say something...");

var result = await intentRecognizer.RecognizeOnceAsync();

Visa igenkänningsresultaten (eller felen)

När igenkänningsresultatet returneras av Speech-tjänsten skriver vi ut resultatet.

Infoga den här koden nedan 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;
}

Kontrollera koden

Nu bör koden se ut så här:

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;
                }
            }
        }
    }
}

Utveckla och kör din app

Nu är du redo att skapa din app och testa vår taligenkänning med hjälp av Speech-tjänsten.

  1. Kompilera koden – Från menyraden i Visual Studio väljer du Skapa>bygglösning.
  2. Starta appen – Välj Felsök>Starta felsökning i menyraden eller tryck på F5.
  3. Starta igenkänning – Du uppmanas att säga något. Standardspråk är engelska. Ditt tal skickas till Speech-tjänsten, transkriberas som text och renderas i konsolen.

Om du till exempel säger "Ta mig till våning 7" bör detta vara utdata:

Say something ...
RECOGNIZED: Text= Take me to floor 7.
  Intent Id= ChangeFloors
  FloorName= 7

Skapa ett projekt

Skapa ett nytt C++-konsolprogramprojekt i Visual Studio 2019 och installera Speech SDK.

Börja med någon exempelkod

Nu ska vi öppna helloworld.cpp och lägga till kod som fungerar som ett skelett för vårt projekt.

    #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");
    }

Skapa en Speech-konfiguration

Innan du kan initiera ett IntentRecognizer objekt måste du skapa en konfiguration som använder nyckeln och platsen för din Cognitive Services-förutsägelseresurs.

  • Ersätt "YOUR_SUBSCRIPTION_KEY" med förutsägelsenyckeln för Cognitive Services.
  • Ersätt "YOUR_SUBSCRIPTION_REGION" med din Cognitive Services-resursregion.

I det FromSubscription() här exemplet används metoden för att skapa SpeechConfig. En fullständig lista över tillgängliga metoder finns i SpeechConfig-klass.

Initiera en IntentRecognizer

Skapa nu en IntentRecognizer. Infoga den här koden precis under speech-konfigurationen.

    auto intentRecognizer = IntentRecognizer::FromConfig(config);

Lägg till några avsikter

Du måste associera vissa mönster med IntentRecognizer genom att anropa AddIntent(). Vi lägger till två avsikter med samma ID för att byta golv och en annan avsikt med ett separat ID för att öppna och stänga dörrar.

    intentRecognizer->AddIntent("Take me to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("Go to floor {floorName}.", "ChangeFloors");
    intentRecognizer->AddIntent("{action} the door.", "OpenCloseDoor");

Anteckning

Det finns ingen gräns för antalet entiteter som du kan deklarera, men de matchas löst. Om du lägger till en fras som "{action} door" matchar den varje gång det finns text före ordet "dörr". Avsikter utvärderas baserat på deras antal entiteter. Om två mönster skulle matcha returneras den med mer definierade entiteter.

Identifiera en avsikt

Från -objektet IntentRecognizer anropar RecognizeOnceAsync() du metoden. Den här metoden ber taltjänsten att känna igen tal i en enda fras och sluta känna igen tal när frasen har identifierats. För enkelhetens skull väntar vi på att framtiden ska slutföras.

Infoga den här koden under dina avsikter:

    std::cout << "Say something ..." << std::endl;
    auto result = intentRecognizer->RecognizeOnceAsync().get();

Visa igenkänningsresultaten (eller felen)

När igenkänningsresultatet returneras av Speech-tjänsten skriver vi ut resultatet.

Infoga den här koden nedan 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;
}

Kontrollera koden

Nu bör koden se ut så här:

#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;
    }
}

Utveckla och kör din app

Nu är du redo att skapa din app och testa vår taligenkänning med hjälp av Speech-tjänsten.

  1. Kompilera koden – Välj Skapa>bygglösning på menyraden i Visual Studio.
  2. Starta din app – Välj Felsök>Starta felsökning på menyraden eller tryck på F5.
  3. Starta igenkänning – du uppmanas att säga något. Standardspråk är engelska. Ditt tal skickas till Speech-tjänsten, transkriberas som text och renderas i konsolen.

Om du till exempel säger "Ta mig till våning 7" bör detta vara utdata:

Say something ...
RECOGNIZED: Text = Take me to floor 7.
  Intent Id = ChangeFloors
  Floor name: = 7

Referensdokumentation | Ytterligare exempel på GitHub

Den här guiden visar hur du installerar Speech SDK för Java.

Plattformskrav

Välj målmiljö

Speech SDK för Java är kompatibelt med Windows, Linux och macOS.

I Windows måste du använda x64-målarkitekturen.

Du måste installera Microsoft Visual C++ Redistributable för Visual Studio 2015, 2017, 2019 och 2022 för din plattform. Att installera det här paketet för första gången kan kräva en omstart.

Du måste installera ett Java Development Kit, till exempel Azul Zulu OpenJDK. Microsoft Build of OpenJDK eller din önskade JDK bör också fungera.

Installera Speech SDK för Java

Vissa av anvisningarna använder en specifik SDK-version, till exempel 1.24.2. Du kan kontrollera den senaste versionen genom att söka på vår GitHub-lagringsplats.

Välj målmiljö

Den här guiden visar hur du installerar Speech SDK för Java på Java Runtime.

Operativsystem som stöds

Speech SDK för Java-paketet är tillgängligt för dessa operativsystem:

Följ de här stegen för att installera Speech SDK för Java med Apache Maven:

  1. Installera Apache Maven.
  2. Öppna en kommandotolk där du vill ha det nya projektet och skapa en ny pom.xml fil.
  3. Kopiera följande XML-innehåll till 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.24.2</version>
            </dependency>
        </dependencies>
    </project>
    
  4. Kör följande Maven-kommando för att installera Speech SDK och beroenden.
    mvn clean dependency:copy-dependencies
    

Börja med lite exempelkod

  1. Öppna Main.java från src dir.

  2. Ersätt innehållet i filen med följande:

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");
    }
}

Skapa en Speech-konfiguration

Innan du kan initiera ett IntentRecognizer objekt måste du skapa en konfiguration som använder nyckeln och platsen för din Cognitive Services-förutsägelseresurs.

  • Ersätt "YOUR_SUBSCRIPTION_KEY" med din Cognitive Services-förutsägelsenyckel.
  • Ersätt "YOUR_SUBSCRIPTION_REGION" med din Cognitive Services-resursregion.

I det FromSubscription() här exemplet används metoden för att skapa SpeechConfig. En fullständig lista över tillgängliga metoder finns i SpeechConfig-klass.

Initiera en IntentRecognizer

Skapa nu en IntentRecognizer. Infoga den här koden precis under speech-konfigurationen.

try (IntentRecognizer intentRecognizer = new IntentRecognizer(config)) {
    
}

Lägg till några avsikter

Du måste associera vissa mönster med IntentRecognizer genom att anropa addIntent(). Vi kommer att lägga till 2 avsikter med samma ID för att byta golv och en annan avsikt med ett separat ID för att öppna och stänga dörrar. Infoga den här koden i try blocket:

intentRecognizer.addIntent("Take me to floor {floorName}.", "ChangeFloors");
intentRecognizer.addIntent("Go to floor {floorName}.", "ChangeFloors");
intentRecognizer.addIntent("{action} the door.", "OpenCloseDoor");

Anteckning

Det finns ingen gräns för antalet entiteter som du kan deklarera, men de matchas löst. Om du lägger till en fras som "{action}-dörr" matchar den när det finns text före ordet "dörr". Avsikter utvärderas baserat på deras antal entiteter. Om två mönster skulle matcha returneras den med mer definierade entiteter.

Identifiera en avsikt

Från - IntentRecognizer objektet anropar recognizeOnceAsync() du metoden . Den här metoden ber Speech-tjänsten att känna igen tal i en enda fras och sluta känna igen tal när frasen har identifierats. För enkelhetens skull väntar vi på att framtiden ska slutföras.

Infoga den här koden under dina avsikter:

System.out.println("Say something...");

IntentRecognitionResult result = intentRecognizer.recognizeOnceAsync().get();

Visa igenkänningsresultat (eller fel)

När igenkänningsresultatet returneras av taltjänsten skriver vi ut resultatet.

Infoga den här koden nedan 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?");
    }
}

Kontrollera koden

Nu bör koden se ut så här:

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?");
                }
            }
        }
    }
}

Utveckla och kör din app

Nu är du redo att skapa din app och testa vår avsiktsigenkänning med hjälp av taltjänsten och den inbäddade mönstermatchningen.

Klicka på körningsknappen i Eclipse eller tryck på ctrl+F11 och titta sedan på utdata för "Säg något..." Snabb. När det visas talar du ditt yttrande och tittar på utdata.

Om du till exempel säger "Ta mig till våning 7" bör detta vara utdata:

Say something ...
RECOGNIZED: Text= Take me to floor 7.
  Intent Id= ChangeFloors
  FloorName= 7

Nästa steg

Förbättra din mönstermatchning med hjälp av anpassade entiteter.