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

Speech SDK för Azure AI-tjänster 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 att:

  • Skapa ett Visual Studio-projekt som refererar till Speech SDK NuGet-paketet
  • Skapa en talkonfiguration och få 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 mönstermatchning om:

  • Du är bara intresserad av att matcha strikt vad användaren sa. Dessa mönster matchar mer aggressivt än konversationell språkförst förstå (CLU).
  • Du har inte åtkomst till en CLU-modell, men vill ändå ha avsikter.

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 Azure AI-tjänstresurs 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 ett ord omsluts inom klammerparenteser. Det här exemplet definierar en entitet med ID:t "floorName", som är skiftlägeskänslig:

    Take me to the {floorName}

Alla andra specialtecken och skiljetecken ignoreras.

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

Skapa ett projekt

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

Börja med lite pannplåtskod

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 Azure AI-tjänstförutsägelseresurs.

  • Ersätt "YOUR_SUBSCRIPTION_KEY" med förutsägelsenyckeln för Azure AI-tjänster.
  • Ersätt "YOUR_SUBSCRIPTION_REGION" med resursregionen för Azure AI-tjänster.

Det här exemplet använder FromSubscription() metoden för att skapa SpeechConfig. En fullständig lista över tillgängliga metoder finns i Klassen SpeechConfig.

Initiera en IntentRecognizer

Skapa nu en IntentRecognizer. Infoga den här koden precis under din Speech-konfiguration.

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

Kommentar

Det finns ingen gräns för hur många entiteter 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 - 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:

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

Skapa och köra 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 din app – 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åket är engelska. Ditt tal skickas till Speech-tjänsten, transkriberas som text och återges i konsolen.

Om du till exempel säger "Ta mig till våning 7" bör det här 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 lite pannplåtskod

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 Azure AI-tjänstförutsägelseresurs.

  • Ersätt "YOUR_SUBSCRIPTION_KEY" med förutsägelsenyckeln för Azure AI-tjänster.
  • Ersätt "YOUR_SUBSCRIPTION_REGION" med resursregionen för Azure AI-tjänster.

Det här exemplet använder FromSubscription() metoden för att skapa SpeechConfig. En fullständig lista över tillgängliga metoder finns i Klassen SpeechConfig.

Initiera en IntentRecognizer

Skapa nu en IntentRecognizer. Infoga den här koden precis under din Speech-konfiguration.

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

Kommentar

Det finns ingen gräns för hur många entiteter 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 - 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:

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

Skapa och köra 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 din app – 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åket är engelska. Ditt tal skickas till Speech-tjänsten, transkriberas som text och återges i konsolen.

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

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

Referensdokumentation | Ytterligare exempel på GitHub

I den här snabbstarten installerar du 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 64-bitars målarkitekturen. Windows 10 eller senare krävs.

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.

Speech SDK för Java stöder inte Windows på ARM64.

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 instruktionerna använder en specifik SDK-version, till exempel 1.24.2. Om du vill kontrollera den senaste versionen söker du 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.37.0</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 pannplåtskod

  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 Azure AI-tjänstförutsägelseresurs.

  • Ersätt "YOUR_SUBSCRIPTION_KEY" med förutsägelsenyckeln för Azure AI-tjänster.
  • Ersätt "YOUR_SUBSCRIPTION_REGION" med resursregionen för Azure AI-tjänster.

Det här exemplet använder FromSubscription() metoden för att skapa SpeechConfig. En fullständig lista över tillgängliga metoder finns i Klassen SpeechConfig.

Initiera en IntentRecognizer

Skapa nu en IntentRecognizer. Infoga den här koden precis under din Speech-konfiguration.

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 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 try blocket:

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

Kommentar

Det finns ingen gräns för hur många entiteter 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 - 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änningsresultaten (eller felen)

När igenkänningsresultatet returneras av Speech-tjä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?");
                }
            }
        }
    }
}

Skapa och köra 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.

Välj knappen Kör 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 om ditt yttrande och tittar på utdata.

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

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

Nästa steg

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