Sdílet prostřednictvím


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í. Naučíte se, jak:

  • Vytvořte projekt ve Visual Studiu, který odkazuje na balíček NuGet sady Speech SDK
  • Vytvořte konfiguraci řeči a získejte rozpoznávač 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:

  • Zajímáte se pouze o přesné shody s tím, co uživatel řekl. Tyto vzory se shodují agresivněji než porozumění konverzačnímu jazyku (CLU).
  • Nemáte přístup k modelu CLU, ale přesto chcete záměry.

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 součástí Speech SDK a vyžadují AI Foundry nebo Unified Speech prostředek.

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", u kterého se 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 se šablonou kódu

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("YourSpeechResourceKey", "YourSpeechResourceRegion");
        }
    }
}

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 "YourSpeechResourceKey" prediktivním klíčem služeb Azure AI.
  • Nahraďte "YourSpeechResourceRegion" oblastí prostředků Azure AI Foundry.

Tato ukázka používá metodu FromSubscription() k sestavení SpeechConfig. Úplný seznam dostupných metod naleznete viz 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řidejte nějaké záměry

Je třeba spojit některé vzory s IntentRecognizer pomocí volání AddIntent(). Přidáme dva 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} dveře“, shoduje se to kdykoli je text 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 níže pod vaše intence:

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("YourSpeechResourceKey", "YourSpeechResourceRegion");
            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 – V nabídce sady Visual Studio zvolte Sestavení>Sestavit řešení.
  2. Spusťte aplikaci – na řádku nabídek zvolte> Spustit ladění nebo stiskněte klávesu F5.
  3. Spusťte rozpoznávání – vyzve vás, 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 se šablonou kódu

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("YourSpeechResourceKey", "YourSpeechResourceRegion");
    }

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 "YourSpeechResourceKey" prediktivním klíčem služeb Azure AI.
  • Nahraďte "YourSpeechResourceRegion" oblastí prostředků Azure AI Foundry.

Tato ukázka používá metodu FromSubscription() k sestavení SpeechConfig. Úplný seznam dostupných metod naleznete viz 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řidejte nějaké záměry

Je třeba spojit některé vzory s IntentRecognizer pomocí volání AddIntent(). Přidáme dva 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} dveře“, shoduje se to kdykoli je text 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 níže pod vaše intence:

    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("YourSpeechResourceKey", "YourSpeechResourceRegion");
    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 – V nabídce sady Visual Studio zvolte Sestavení>Sestavit řešení.
  2. Spusťte aplikaci – na řádku nabídek zvolte> Spustit ladění nebo stiskněte klávesu F5.
  3. Spusťte rozpoznávání – vyzve vás, 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 Visual C++ Redistribuovatelný balíček 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 vývojovou sadu Java, například Azul Zulu OpenJDK. Také Microsoft Build of OpenJDK nebo vaše upřednostňovaná sada JDK by měla fungovat.

Instalace sady Speech SDK pro Javu

Některé pokyny používají konkrétní verzi sady SDK, například 1.43.0. 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. Zkopírujte následující obsah XML do 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.43.0</version>
            </dependency>
        </dependencies>
    </project>
    
  4. Spusťte následující příkaz Mavenu k instalaci sady Speech SDK a jejích závislostí.

    mvn clean dependency:copy-dependencies
    

Začněte se šablonou kódu

  1. Otevřete Main.java ze zdrojového adresáře.

  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("YourSpeechResourceKey", "YourSpeechResourceRegion");
    }
}

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 "YourSpeechResourceKey" prediktivním klíčem služeb Azure AI.
  • Nahraďte "YourSpeechResourceRegion" oblastí prostředků Azure AI Foundry.

Tato ukázka používá metodu FromSubscription() k sestavení SpeechConfig. Úplný seznam dostupných metod naleznete viz 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řidejte nějaké záměry

Je třeba spojit některé vzory s IntentRecognizer pomocí volání addIntent(). 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, pokud před slovem "dveře" bude jakýkoliv text. 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 níže pod vaše intence:

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 Speech resource 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("YourSpeechResourceKey", "YourSpeechResourceRegion");

        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 Speech resource 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 s výzvou "Řekněte něco...". Jakmile se objeví výzva, pronesete svou promluvu a sledujte 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.