Rozpoznávání záměrů pomocí jednoduchého porovnávání vzorů jazyka

Sada Speech SDK služeb Azure AI má integrovanou funkci, která poskytuje rozpoznávání záměrů pomocí jednoduchého porovnávání vzorů jazyka. Záměr je něco, co chce uživatel udělat: zavřete okno, označte zaškrtávací políčko, vložte nějaký text atd.

V této příručce použijete sadu Speech SDK k vývoji konzolové aplikace jazyka C++, která odvozuje záměry z promluv uživatelů prostřednictvím mikrofonu vašeho zařízení. Získáte informace pro:

  • Vytvořit projekt sady Visual Studio odkazující na balíček NuGet sady Speech SDK
  • Vytvoření konfigurace řeči a získání rozpoznávání záměru
  • Přidání záměrů a vzorů prostřednictvím rozhraní SPEECH SDK API
  • Rozpoznávání řeči z mikrofonu
  • Používat asynchronní událostmi řízené průběžné rozpoznávání

Kdy použít porovnávání vzorů

Porovnávání vzorů použijte v následujících případech:

Další informace najdete v přehledu porovnávání vzorů.

Požadavky

Než začnete s tímto průvodcem, ujistěte se, že máte následující položky:

Řeč a jednoduché vzory

Jednoduché vzory jsou funkcí sady Speech SDK a potřebují prostředek služeb Azure AI nebo prostředek unified Speech.

Vzor je fráze, která obsahuje entitu někde v ní. Entita je definována zabalením slova do složených závorek. Tento příklad definuje entitu s ID "floorName", což je rozlišují malá a velká písmena:

    Take me to the {floorName}

Všechny ostatní speciální znaky a interpunkce se ignorují.

Záměry se přidávají pomocí volání rozhraní INTENTRecognizer-AddIntent>() API.

Vytvoření projektu

V sadě Visual Studio 2019 vytvořte nový projekt konzolové aplikace jazyka C# a nainstalujte sadu Speech SDK.

Začněte s některými často používanými kódy

Pojďme otevřít Program.cs a přidat kód, který funguje jako kostra našeho projektu.

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

Vytvoření konfigurace služby Speech

Než budete moct inicializovat IntentRecognizer objekt, musíte vytvořit konfiguraci, která používá klíč a umístění pro prostředek predikce služeb Azure AI.

  • Nahraďte "YOUR_SUBSCRIPTION_KEY" prediktivním klíčem služeb Azure AI.
  • Nahraďte "YOUR_SUBSCRIPTION_REGION" oblastí prostředků služeb Azure AI.

Tato ukázka používá metodu FromSubscription()SpeechConfigk sestavení . Úplný seznam dostupných metod naleznete v tématu SpeechConfig – třída.

Inicializace objektu IntentRecognizer

Teď vytvořte .IntentRecognizer Vložte tento kód přímo pod konfiguraci služby Speech.

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

Přidání některých záměrů

Je třeba přidružit některé vzory voláním IntentRecognizerAddIntent(). Přidáme 2 záměry se stejným ID pro změnu podlah a další záměr s odděleným ID pro otevírání a zavírání dveří. Vložte tento kód do using bloku:

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

Poznámka:

Počet entit, které můžete deklarovat, není nijak omezený, ale budou volně spárované. Pokud přidáte frázi jako "{action} door", bude se shodovat kdykoli před slovem "dveře". Záměry se vyhodnocují na základě počtu entit. Pokud by se shodovaly dva vzory, vrátí se ten s více definovanými entitami.

Rozpoznávání záměru

Z objektu IntentRecognizer zavoláte metodu RecognizeOnceAsync() . Tato metoda požádá službu Speech, aby rozpoznala řeč v jedné frázi a přestala rozpoznávat řeč po identifikaci fráze. Pro zjednodušení počkáme na dokončení budoucnosti.

Vložte tento kód pod záměry:

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

var result = await intentRecognizer.RecognizeOnceAsync();

Zobrazení výsledků rozpoznávání (nebo chyb)

Když služba Speech vrátí výsledek rozpoznávání, vytiskneme výsledek.

Vložte následující kód 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;
}

Kontrola kódu

V tomto okamžiku by váš kód měl vypadat takto:

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

Sestavení a spuštění aplikace

Teď jste připraveni sestavit aplikaci a otestovat rozpoznávání řeči pomocí služby Speech.

  1. Zkompilujte kód – Na řádku nabídek sady Visual Studio zvolte Sestavit>řešení sestavení.
  2. Spusťte aplikaci – na řádku nabídek zvolte> Spustit ladění nebo stiskněte klávesu F5.
  3. Spusťte rozpoznávání – zobrazí se výzva k tomu, abyste něco řekli. Výchozí jazyk je angličtina. Vaše řeč se odešle do služby Speech, přepíše se jako text a v konzole se vykreslí.

Pokud třeba řeknete "Take me to floor 7", mělo by to být výstup:

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

Vytvoření projektu

Vytvořte nový projekt konzolové aplikace C++ v sadě Visual Studio 2019 a nainstalujte sadu Speech SDK.

Začněte s některými často používanými kódy

Pojďme otevřít helloworld.cpp a přidat kód, který funguje jako kostra našeho projektu.

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

Vytvoření konfigurace služby Speech

Než budete moct inicializovat IntentRecognizer objekt, musíte vytvořit konfiguraci, která používá klíč a umístění pro prostředek predikce služeb Azure AI.

  • Nahraďte "YOUR_SUBSCRIPTION_KEY" prediktivním klíčem služeb Azure AI.
  • Nahraďte "YOUR_SUBSCRIPTION_REGION" oblastí prostředků služeb Azure AI.

Tato ukázka používá metodu FromSubscription()SpeechConfigk sestavení . Úplný seznam dostupných metod naleznete v tématu SpeechConfig – třída.

Inicializace objektu IntentRecognizer

Teď vytvořte .IntentRecognizer Vložte tento kód přímo pod konfiguraci služby Speech.

    auto intentRecognizer = IntentRecognizer::FromConfig(config);

Přidání některých záměrů

Je třeba přidružit některé vzory voláním IntentRecognizerAddIntent(). Přidáme 2 záměry se stejným ID pro změnu podlah a další záměr s odděleným ID pro otevírání a zavírání dveří.

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

Poznámka:

Počet entit, které můžete deklarovat, není nijak omezený, ale budou volně spárované. Pokud přidáte frázi jako "{action} door", bude se shodovat kdykoli před slovem "dveře". Záměry se vyhodnocují na základě počtu entit. Pokud by se shodovaly dva vzory, vrátí se ten s více definovanými entitami.

Rozpoznávání záměru

Z objektu IntentRecognizer zavoláte metodu RecognizeOnceAsync() . Tato metoda požádá službu Speech, aby rozpoznala řeč v jedné frázi a přestala rozpoznávat řeč po identifikaci fráze. Pro zjednodušení počkáme na dokončení budoucnosti.

Vložte tento kód pod záměry:

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

Zobrazení výsledků rozpoznávání (nebo chyb)

Když služba Speech vrátí výsledek rozpoznávání, vytiskneme výsledek.

Vložte následující kód 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;
}

Kontrola kódu

V tomto okamžiku by váš kód měl vypadat takto:

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

Sestavení a spuštění aplikace

Teď jste připraveni sestavit aplikaci a otestovat rozpoznávání řeči pomocí služby Speech.

  1. Zkompilujte kód – Na řádku nabídek sady Visual Studio zvolte Sestavit>řešení sestavení.
  2. Spusťte aplikaci – na řádku nabídek zvolte> Spustit ladění nebo stiskněte klávesu F5.
  3. Spusťte rozpoznávání – zobrazí se výzva k tomu, abyste něco řekli. Výchozí jazyk je angličtina. Vaše řeč se odešle do služby Speech, přepíše se jako text a v konzole se vykreslí.

Pokud třeba řeknete "Take me to floor 7", mělo by to být výstup:

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

Referenční dokumentace | Další ukázky na GitHubu

V tomto rychlém startu nainstalujete sadu Speech SDK pro Javu.

Požadavky platformy

Zvolte cílové prostředí:

Sada Speech SDK pro Javu je kompatibilní s Windows, Linuxem a macOS.

Ve Windows musíte použít 64bitovou cílovou architekturu. Vyžaduje se Windows 10 nebo novější.

Nainstalujte microsoft Distribuovatelné součásti Visual C++ pro Visual Studio 2015, 2017, 2019 a 2022 pro vaši platformu. První instalace tohoto balíčku může vyžadovat restartování.

Sada Speech SDK pro Javu nepodporuje Windows v ARM64.

Nainstalujte sadu Java Development Kit, jako je Azul Zulu OpenJDK. Měl by fungovat také microsoft build OpenJDK nebo upřednostňovaná sada JDK.

Instalace sady Speech SDK pro Javu

Některé pokyny používají konkrétní verzi sady SDK, například 1.24.2. Pokud chcete zkontrolovat nejnovější verzi, vyhledejte úložiště GitHub.

Zvolte cílové prostředí:

Tento průvodce ukazuje, jak nainstalovat sadu Speech SDK pro Javu v prostředí Java Runtime.

Podporované operační systémy

Balíček Speech SDK pro Javu je k dispozici pro tyto operační systémy:

Pokud chcete nainstalovat sadu Speech SDK pro Javu pomocí Apache Mavenu, postupujte takto:

  1. Nainstalujte Apache Maven.

  2. Otevřete příkazový řádek, na kterém chcete nový projekt, a vytvořte nový soubor pom.xml .

  3. Do pom.xml zkopírujte následující obsah 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. Spuštěním následujícího příkazu Mavenu nainstalujte sadu Speech SDK a závislosti.

    mvn clean dependency:copy-dependencies
    

Začněte s některými často používanými kódy

  1. Otevřete Main.java z nástroje src dir.

  2. Obsah souboru nahraďte následujícím kódem:

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

Vytvoření konfigurace služby Speech

Než budete moct inicializovat IntentRecognizer objekt, musíte vytvořit konfiguraci, která používá klíč a umístění pro prostředek predikce služeb Azure AI.

  • Nahraďte "YOUR_SUBSCRIPTION_KEY" prediktivním klíčem služeb Azure AI.
  • Nahraďte "YOUR_SUBSCRIPTION_REGION" oblastí prostředků služeb Azure AI.

Tato ukázka používá metodu FromSubscription()SpeechConfigk sestavení . Úplný seznam dostupných metod naleznete v tématu SpeechConfig – třída.

Inicializace objektu IntentRecognizer

Teď vytvořte .IntentRecognizer Vložte tento kód přímo pod konfiguraci služby Speech.

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

Přidání některých záměrů

Je třeba přidružit některé vzory voláním IntentRecognizeraddIntent(). Přidáme 2 záměry se stejným ID pro změnu podlah a další záměr s odděleným ID pro otevírání a zavírání dveří. Vložte tento kód do try bloku:

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

Poznámka:

Počet entit, které můžete deklarovat, není nijak omezený, ale budou volně spárované. Pokud přidáte frázi jako "{action} door", bude se shodovat kdykoli před slovem "dveře". Záměry se vyhodnocují na základě počtu entit. Pokud by se shodovaly dva vzory, vrátí se ten s více definovanými entitami.

Rozpoznávání záměru

Z objektu IntentRecognizer zavoláte metodu recognizeOnceAsync() . Tato metoda požádá službu Speech, aby rozpoznala řeč v jedné frázi a přestala rozpoznávat řeč po identifikaci fráze. Pro zjednodušení počkáme na dokončení budoucnosti.

Vložte tento kód pod záměry:

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

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

Zobrazení výsledků rozpoznávání (nebo chyb)

Když služba Speech vrátí výsledek rozpoznávání, vytiskneme výsledek.

Vložte následující kód 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?");
    }
}

Kontrola kódu

V tomto okamžiku by váš kód měl vypadat takto:

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

Sestavení a spuštění aplikace

Teď jste připraveni sestavit aplikaci a otestovat rozpoznávání záměru pomocí služby Speech a nástroje pro porovnávání vložených vzorů.

Vyberte tlačítko Spustit v Eclipse nebo stiskněte ctrl+F11 a pak sledujte výstup "Řekněte něco..." Výzva. Jakmile se zobrazí promluva a podívejte se na výstup.

Pokud třeba řeknete "Take me to floor 7", mělo by to být výstup:

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

Další kroky

Vylepšete porovnávání vzorů pomocí vlastních entit.