Share via


Basit dil desen eşleştirmesi ile amaçları tanıma

Azure AI hizmetleri Konuşma SDK'sı, basit dil desen eşleştirmesi ile amaç tanıma sağlayan yerleşik bir özelliğe sahiptir. Amaç, kullanıcının yapmak istediği bir şeydir: pencereyi kapatma, onay kutusunu işaretleme, metin ekleme vb.

Bu kılavuzda Konuşma SDK'sını kullanarak cihazınızın mikrofonu aracılığıyla kullanıcı konuşmalarından amaçları türeten bir C++ konsol uygulaması geliştireceksiniz. Şunları yapmayı öğreneceksiniz:

  • Konuşma SDK'sı NuGet paketine başvuran bir Visual Studio projesi oluşturma
  • Konuşma yapılandırması oluşturma ve amaç tanıyıcısı alma
  • Konuşma SDK'sı API'sini kullanarak amaçlar ve desenler ekleme
  • Mikrofondan konuşmayı tanıma
  • Zaman uyumsuz, olay odaklı sürekli tanıma kullanma

Desen eşleştirme ne zaman kullanılır?

Şu durumlar için desen eşleştirmeyi kullanın:

  • Yalnızca kullanıcının söylediklerini tam olarak eşleştirmek istiyorsunuz. Bu desenler, konuşma dili anlama (CLU) ile daha agresif bir şekilde eşleşmektedir.
  • CLU modeline erişiminiz yok, ancak yine de amaçları istiyorsunuz.

Daha fazla bilgi için bkz. desen eşleştirmeye genel bakış.

Önkoşullar

Bu kılavuza başlamadan önce aşağıdaki öğelere sahip olduğunuzdan emin olun:

Konuşma ve basit desenler

Basit desenler Konuşma SDK'sının bir özelliğidir ve bir Azure AI hizmetleri kaynağına veya Birleşik Konuşma kaynağına ihtiyaç duyar.

Desen, içinde bir Varlık içeren bir tümceciktir. Varlık, bir sözcüğü küme ayraç içine sarmalayarak tanımlanır. Bu örnek, büyük/küçük harfe duyarlı olan "floorName" kimliğine sahip bir Varlık tanımlar:

    Take me to the {floorName}

Diğer tüm özel karakterler ve noktalama işaretleri yoksayılır.

Amaçlar IntentRecognizer-AddIntent>() API'sine çağrılar kullanılarak eklenir.

Bir proje oluştur

Visual Studio 2019'da yeni bir C# konsol uygulaması projesi oluşturun ve Konuşma SDK'sını yükleyin.

Bazı ortak kodlarla başlayın

Şimdi projemiz için iskelet olarak çalışan bazı kodlar açalım Program.cs ve ekleyelim.

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

Konuşma yapılandırması oluşturma

Bir IntentRecognizer nesneyi başlatabilmeniz için önce Azure AI hizmetleri tahmin kaynağınızın anahtarını ve konumunu kullanan bir yapılandırma oluşturmanız gerekir.

  • değerini Azure AI hizmetleri tahmin anahtarınız ile değiştirin "YOUR_SUBSCRIPTION_KEY" .
  • değerini Azure AI hizmetleri kaynak bölgenizle değiştirin "YOUR_SUBSCRIPTION_REGION" .

Bu örnek, FromSubscription() derlemek SpeechConfigiçin yöntemini kullanır. Kullanılabilir yöntemlerin tam listesi için bkz . SpeechConfig Sınıfı.

IntentRecognizer başlatma

Şimdi bir IntentRecognizeroluşturun. Bu kodu Konuşma yapılandırmanızın hemen altına ekleyin.

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

Bazı amaçlar ekleme

çağrısı AddIntent()yaparak bazı desenleri ile IntentRecognizer ilişkilendirmeniz gerekir. Kat değiştirmek için aynı kimliğe sahip 2 amaç ve kapıları açmak ve kapatmak için ayrı bir kimlik içeren başka bir amaç ekleyeceğiz. Bu kodu bloğun using içine ekleyin:

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

Not

Bildirebileceğiniz varlık sayısıyla ilgili bir sınır yoktur, ancak bunlar gevşek bir şekilde eşleştirilir. "{action} door" gibi bir tümcecik eklerseniz, "kapı" sözcüğünden önce herhangi bir metin olduğunda eşleşir. Amaçlar, varlık sayısına göre değerlendirilir. İki desen eşleşirse, daha fazla tanımlı varlığı olan bir tane döndürülür.

Amacı tanıma

nesnesinden IntentRecognizer yöntemini çağıracaksınız RecognizeOnceAsync() . Bu yöntem Konuşma tanıma hizmetinden tek bir tümcecikteki konuşmayı tanımasını ve tümcecik tanımlandıktan sonra konuşmayı tanımayı durdurmasını ister. Kolaylık olması için, geleceğin tamamlanmasını bekleyeceğiz.

Bu kodu amaçlarınızın altına ekleyin:

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

var result = await intentRecognizer.RecognizeOnceAsync();

Tanıma sonuçlarını (veya hatalarını) görüntüleme

Tanıma sonucu Konuşma hizmeti tarafından döndürülürse, sonucu yazdıracağız.

Bu kodu altına var result = await recognizer.RecognizeOnceAsync();ekleyin:

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

Kodunuzu denetleyin

Bu noktada kodunuz şu şekilde görünmelidir:

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

Uygulamanızı derleme ve çalıştırma

Artık uygulamanızı oluşturmaya ve Konuşma tanıma hizmetini kullanarak konuşma tanımamızı test etmeye hazırsınız.

  1. Kodu derleme - Visual Studio'nun menü çubuğunda Derleme Çözümü'ne> tıklayın.
  2. Uygulamanızı başlatın - Menü çubuğunda Hata AyıklamaYı>Başlat Hata Ayıklama'yı seçin veya F5 tuşuna basın.
  3. Tanımayı başlat - Bir şey söylemenizi ister. Varsayılan dil İngilizce'dir. Konuşmanız Konuşma hizmetine gönderilir, metin olarak yazılır ve konsolda işlenir.

Örneğin, "Beni 7. kata götür" diyorsanız, çıkış bu olmalıdır:

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

Bir proje oluştur

Visual Studio 2019'da yeni bir C++ konsol uygulaması projesi oluşturun ve Konuşma SDK'sını yükleyin.

Bazı ortak kodlarla başlayın

Şimdi projemiz için iskelet olarak çalışan bazı kodlar açalım helloworld.cpp ve ekleyelim.

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

Konuşma yapılandırması oluşturma

Bir IntentRecognizer nesneyi başlatabilmeniz için önce Azure AI hizmetleri tahmin kaynağınızın anahtarını ve konumunu kullanan bir yapılandırma oluşturmanız gerekir.

  • değerini Azure AI hizmetleri tahmin anahtarınız ile değiştirin "YOUR_SUBSCRIPTION_KEY" .
  • değerini Azure AI hizmetleri kaynak bölgenizle değiştirin "YOUR_SUBSCRIPTION_REGION" .

Bu örnek, FromSubscription() derlemek SpeechConfigiçin yöntemini kullanır. Kullanılabilir yöntemlerin tam listesi için bkz . SpeechConfig Sınıfı.

IntentRecognizer başlatma

Şimdi bir IntentRecognizeroluşturun. Bu kodu Konuşma yapılandırmanızın hemen altına ekleyin.

    auto intentRecognizer = IntentRecognizer::FromConfig(config);

Bazı amaçlar ekleme

çağrısı AddIntent()yaparak bazı desenleri ile IntentRecognizer ilişkilendirmeniz gerekir. Kat değiştirmek için aynı kimliğe sahip 2 amaç ve kapıları açmak ve kapatmak için ayrı bir kimlik içeren başka bir amaç ekleyeceğiz.

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

Not

Bildirebileceğiniz varlık sayısıyla ilgili bir sınır yoktur, ancak bunlar gevşek bir şekilde eşleştirilir. "{action} door" gibi bir tümcecik eklerseniz, "kapı" sözcüğünden önce herhangi bir metin olduğunda eşleşir. Amaçlar, varlık sayısına göre değerlendirilir. İki desen eşleşirse, daha fazla tanımlı varlığı olan bir tane döndürülür.

Amacı tanıma

nesnesinden IntentRecognizer yöntemini çağıracaksınız RecognizeOnceAsync() . Bu yöntem Konuşma tanıma hizmetinden tek bir tümcecikteki konuşmayı tanımasını ve tümcecik tanımlandıktan sonra konuşmayı tanımayı durdurmasını ister. Kolaylık olması için, geleceğin tamamlanmasını bekleyeceğiz.

Bu kodu amaçlarınızın altına ekleyin:

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

Tanıma sonuçlarını (veya hatalarını) görüntüleme

Tanıma sonucu Konuşma hizmeti tarafından döndürülürse, sonucu yazdıracağız.

Bu kodu altına auto result = intentRecognizer->RecognizeOnceAsync().get();ekleyin:

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

Kodunuzu denetleyin

Bu noktada kodunuz şu şekilde görünmelidir:

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

Uygulamanızı derleme ve çalıştırma

Artık uygulamanızı oluşturmaya ve Konuşma tanıma hizmetini kullanarak konuşma tanımamızı test etmeye hazırsınız.

  1. Kodu derleme - Visual Studio'nun menü çubuğunda Derleme Çözümü'ne> tıklayın.
  2. Uygulamanızı başlatın - Menü çubuğunda Hata AyıklamaYı>Başlat Hata Ayıklama'yı seçin veya F5 tuşuna basın.
  3. Tanımayı başlat - Bir şey söylemenizi ister. Varsayılan dil İngilizce'dir. Konuşmanız Konuşma hizmetine gönderilir, metin olarak yazılır ve konsolda işlenir.

Örneğin, "Beni 7. kata götür" diyorsanız, çıkış bu olmalıdır:

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

Başvuru belgeleri | GitHub'da Ek Örnekler

Bu hızlı başlangıçta Java için Konuşma SDK'sını yükleyebilirsiniz.

Platform gereksinimleri

Hedef ortamınızı seçin:

Java için Konuşma SDK'sı Windows, Linux ve macOS ile uyumludur.

Windows'ta 64 bit hedef mimariyi kullanmanız gerekir. Windows 10 veya üzeri gereklidir.

Platformunuz için Microsoft Visual Studio için Visual C++ Yeniden Dağıtılabilir 2015, 2017, 2019 ve 2022'yi yükleyin. Bu paketi ilk kez yüklemek için yeniden başlatma gerekebilir.

Java için Konuşma SDK'sı ARM64'te Windows'u desteklemez.

Azul Zulu OpenJDK gibi bir Java Geliştirme Seti yükleyin. OpenJDK'nin Microsoft Derlemesi veya tercih ettiğiniz JDK de çalışmalıdır.

Java için Konuşma SDK'sını yükleme

Yönergelerden bazıları gibi 1.24.2belirli bir SDK sürümünü kullanır. En son sürümü denetlemek için GitHub depomuzda arama yapın.

Hedef ortamınızı seçin:

Bu kılavuzda Java Çalışma Zamanı'na Java için Konuşma SDK'sının nasıl yükleneceği gösterilmektedir.

Desteklenen işletim sistemleri

Java için Konuşma SDK'sı paketi şu işletim sistemleri için kullanılabilir:

  • Windows: Yalnızca 64 bit.
  • Mac: macOS X sürüm 10.14 veya üzeri.
  • Linux: Desteklenen Linux dağıtımlarına ve hedef mimarilerine bakın.

Apache Maven kullanarak Java için Konuşma SDK'sını yüklemek için şu adımları izleyin:

  1. Apache Maven'ı yükleyin.

  2. Yeni projeyi istediğiniz bir komut istemi açın ve yeni bir pom.xml dosyası oluşturun.

  3. Aşağıdaki XML içeriğini pom.xml kopyalayın:

    <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. Konuşma SDK'sını ve bağımlılıkları yüklemek için aşağıdaki Maven komutunu çalıştırın.

    mvn clean dependency:copy-dependencies
    

Bazı ortak kodlarla başlayın

  1. src dir'den açın Main.java .

  2. Dosyanın içeriğini aşağıdakilerle değiştirin:

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

Konuşma yapılandırması oluşturma

Bir IntentRecognizer nesneyi başlatabilmeniz için önce Azure AI hizmetleri tahmin kaynağınızın anahtarını ve konumunu kullanan bir yapılandırma oluşturmanız gerekir.

  • değerini Azure AI hizmetleri tahmin anahtarınız ile değiştirin "YOUR_SUBSCRIPTION_KEY" .
  • değerini Azure AI hizmetleri kaynak bölgenizle değiştirin "YOUR_SUBSCRIPTION_REGION" .

Bu örnek, FromSubscription() derlemek SpeechConfigiçin yöntemini kullanır. Kullanılabilir yöntemlerin tam listesi için bkz . SpeechConfig Sınıfı.

IntentRecognizer başlatma

Şimdi bir IntentRecognizeroluşturun. Bu kodu Konuşma yapılandırmanızın hemen altına ekleyin.

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

Bazı amaçlar ekleme

çağrısı addIntent()yaparak bazı desenleri ile IntentRecognizer ilişkilendirmeniz gerekir. Kat değiştirmek için aynı kimliğe sahip 2 amaç ve kapıları açmak ve kapatmak için ayrı bir kimlik içeren başka bir amaç ekleyeceğiz. Bu kodu bloğun try içine ekleyin:

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

Not

Bildirebileceğiniz varlık sayısıyla ilgili bir sınır yoktur, ancak bunlar gevşek bir şekilde eşleştirilir. "{action} door" gibi bir tümcecik eklerseniz, "kapı" sözcüğünden önce herhangi bir metin olduğunda eşleşir. Amaçlar, varlık sayısına göre değerlendirilir. İki desen eşleşirse, daha fazla tanımlı varlığı olan bir tane döndürülür.

Amacı tanıma

nesnesinden IntentRecognizer yöntemini çağıracaksınız recognizeOnceAsync() . Bu yöntem Konuşma tanıma hizmetinden tek bir tümcecikteki konuşmayı tanımasını ve tümcecik tanımlandıktan sonra konuşmayı tanımayı durdurmasını ister. Kolaylık olması için, geleceğin tamamlanmasını bekleyeceğiz.

Bu kodu amaçlarınızın altına ekleyin:

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

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

Tanıma sonuçlarını (veya hatalarını) görüntüleme

Tanıma sonucu Konuşma hizmeti tarafından döndürülürse, sonucu yazdıracağız.

Bu kodu altına IntentRecognitionResult result = recognizer.recognizeOnceAsync().get();ekleyin:

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

Kodunuzu denetleyin

Bu noktada kodunuz şu şekilde görünmelidir:

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

Uygulamanızı derleme ve çalıştırma

Artık konuşma hizmetini ve ekli desen eşleştiricisini kullanarak uygulamanızı oluşturmaya ve amaç tanımamızı test etmeye hazırsınız.

Eclipse'te çalıştır düğmesini seçin veya ctrl+F11 tuşlarına basın, ardından "Bir şey söyle..." çıkışını izleyin Istemi. Göründüğünde konuşmanızı söyleyin ve çıkışı izleyin.

Örneğin, "Beni 7. kata götür" diyorsanız, çıkış bu olmalıdır:

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

Sonraki adımlar

Özel varlıklar kullanarak desen eşleştirmenizi geliştirin.