Esercitazione: Riconoscere le finalità dai contenuti vocali con Speech SDK per C#Tutorial: Recognize intents from speech using the Speech SDK for C#

I servizi cognitivi Speech SDK si integrano con il servizio Language Understanding Intelligent Service (LUIS) per fornire il riconoscimento finalità.The Cognitive Services Speech SDK integrates with the Language Understanding service (LUIS) to provide intent recognition. Una finalità è qualcosa che l'utente desidera fare: prenotare un volo, controllare il meteo o effettuare una chiamata.An intent is something the user wants to do: book a flight, check the weather, or make a call. L'utente può usare qualunque termine suoni naturale.The user can use whatever terms feel natural. Con l'uso di machine learning, LUIS esegue il mapping delle richieste degli utenti per le finalità che sono state definite.Using machine learning, LUIS maps user requests to the intents you've defined.

Nota

Un'applicazione LUIS definisce le finalità e le entità che si desidera riconoscere.A LUIS application defines the intents and entities you want to recognize. È separata dall'applicazione C# che usa il servizio di riconoscimento vocale.It's separate from the C# application that uses the Speech service. In questo articolo, "app" sta per app LUIS, mentre "applicazione" sta per codice C#.In this article, "app" means the LUIS app, while "application" means the C# code.

In questa esercitazione, si usa Speech SDK per sviluppare un'applicazione console C# che ricava le finalità da espressioni dell'utente tramite il microfono del dispositivo.In this tutorial, you use the Speech SDK to develop a C# console application that derives intents from user utterances through your device's microphone. Si apprenderà come:You'll learn how to:

  • Creare un progetto di Visual Studio che fa riferimento al pacchetto Speech SDK NuGetCreate a Visual Studio project referencing the Speech SDK NuGet package
  • Creare una configurazione di riconoscimento vocale e ricevere un sistema di riconoscimento delle finalitàCreate a speech configuration and get an intent recognizer
  • Ottenere il modello per l'app LUIS e aggiungere la finalità necessarieGet the model for your LUIS app and add the intents you need
  • Specificare la lingua per il riconoscimento vocaleSpecify the language for speech recognition
  • Riconoscere la sintesi vocale da un fileRecognize speech from a file
  • Usare riconoscimento asincrono continuo basato su eventiUse asynchronous, event-driven continuous recognition

PrerequisitiPrerequisites

Prima di iniziare questa esercitazione, è necessario disporre degli elementi seguenti:Be sure you have the following items before you begin this tutorial:

LUIS e riconoscimento vocaleLUIS and speech

LUIS si integra con i servizi Voce per distinguere le finalità dai contenuti vocali.LUIS integrates with the Speech Services to recognize intents from speech. Non è necessaria una sottoscrizione ai servizi Voce, LUIS è sufficiente.You don't need a Speech Services subscription, just LUIS.

LUIS usa due tipi di chiave:LUIS uses two kinds of keys:

Tipo di chiaveKey type ScopoPurpose
CreazioneAuthoring Consente di creare e modificare a livello di codice app LUISLets you create and modify LUIS apps programmatically
EndpointEndpoint Autorizza l'accesso a una particolare app LUISAuthorizes access to a particular LUIS app

Per questa esercitazione è necessario il tipo di chiave dell'endpoint.For this tutorial, you need the endpoint key type. L'esercitazione usa l'esempio dell'app di domotica LUIS, che è possibile creare seguendo l'avvio rapido Usare l'app di domotica predefinita.The tutorial uses the example Home Automation LUIS app, which you can create by following the Use prebuilt Home automation app quickstart. Se è stata creata un'app LUIS personalizzata, è possibile invece usare quest'ultima.If you've created a LUIS app of your own, you can use it instead.

Quando si crea un'app LUIS, viene generata automaticamente una chiave di avvio in modo da testare l'app usando le query di testo.When you create a LUIS app, LUIS automatically generates a starter key so you can test the app using text queries. Questa chiave non abilita l'integrazione dei servizi Voce e non funziona con questa esercitazione.This key doesn't enable the Speech Services integration and won't work with this tutorial. Creare una risorsa LUIS nel dashboard di Azure e assegnarla all'app LUIS.Create a LUIS resource in the Azure dashboard and assign it to the LUIS app. È possibile usare il livello di sottoscrizione gratuita per questa esercitazione.You can use the free subscription tier for this tutorial.

Dopo aver creato la risorsa LUIS nel dashboard di Azure, accedere al portale LUIS, scegliere l'applicazione nella pagina App personali, quindi passare alla pagina Gestione dell'app.After you create the LUIS resource in the Azure dashboard, log into the LUIS portal, choose your application on the My Apps page, then switch to the app's Manage page. Infine, selezionare Chiavi ed endpoint nella barra laterale.Finally, select Keys and Endpoints in the sidebar.

Chiavi del portale LUIS e impostazioni di endpoint

Nella pagina Impostazioni chiavi ed endpoint:On the Keys and Endpoint settings page:

  1. Scorrere verso il basso fino alla sezione Risorse e chiavi e selezionare Assegnare risorsa.Scroll down to the Resources and Keys section and select Assign resource.

  2. Nella finestra di dialogo Assegnare una chiave all'app apportare le modifiche seguenti:In the Assign a key to your app dialog box, make the following changes:

    • In Tenant scegliere Microsoft.Under Tenant, choose Microsoft.
    • In Nome della sottoscrizione scegliere la sottoscrizione di Azure che contiene la risorsa LUIS che si vuole usare.Under Subscription Name, choose the Azure subscription that contains the LUIS resource you want to use.
    • In Chiave scegliere la risorsa LUIS che si vuole usare con l'app.Under Key, choose the LUIS resource that you want to use with the app.

    A breve, la nuova sottoscrizione viene visualizzata nella tabella nella parte inferiore della pagina.In a moment, the new subscription appears in the table at the bottom of the page.

  3. Selezionare l'icona accanto a una chiave per copiarla negli Appunti.Select the icon next to a key to copy it to the clipboard. (È possibile usare una qualsiasi chiave.)(You may use either key.)

Chiavi di sottoscrizione dell'app LUIS

Creare un progetto di sintesi vocale in Visual StudioCreate a speech project in Visual Studio

Per creare un progetto di Visual Studio per lo sviluppo per Windows, è necessario creare il progetto, configurare l'ambiente di sviluppo per desktop .NET in Visual Studio, installare Speech SDK e selezionare l'architettura di destinazione.To create a Visual Studio project for Windows development, you need to create the project, set up Visual Studio for .NET desktop development, install the Speech SDK, and choose the target architecture.

Creare il progetto e aggiungere il carico di lavoroCreate the project and add the workload

Per iniziare, creare il progetto in Visual Studio e verificare che Visual Studio sia configurato per lo sviluppo per desktop .NET:To start, create the project in Visual Studio, and make sure that Visual Studio is set up for .NET desktop development:

  1. Aprire Visual Studio 2019.Open Visual Studio 2019.

  2. Nella finestra di avvio selezionare Crea un nuovo progetto.In the Start window, select Create a new project.

  3. Nella finestra Crea un nuovo progetto scegliere App console (.NET Framework) e quindi fare clic su Avanti.In the Create a new project window, choose Console App (.NET Framework), and then select Next.

  4. Nella finestra Configura il nuovo progetto immettere helloworld in Nome progetto scegliere o creare il percorso della directory in Percorso e quindi selezionare Crea.In the Configure your new project window, enter helloworld in Project name, choose or create the directory path in Location, and then select Create.

  5. Dalla barra dei menu di Visual Studio scegliere Strumenti > Ottieni strumenti e funzionalità per aprire il Programma di installazione di Visual Studio e visualizzare la finestra di dialogo Modifica.From the Visual Studio menu bar, select Tools > Get Tools and Features, which opens Visual Studio Installer and displays the Modifying dialog box.

  6. Assicurarsi che il carico di lavoro di Sviluppo per desktop .NET sia disponibile.Check whether the .NET desktop development workload is available. Se il carico di lavoro non è stato installato, selezionare la casella di controllo accanto ad esso e quindi fare clic su Modifica per avviare l'installazione.If the workload hasn't been installed, select the check box next to it, and then select Modify to start the installation. Il download e l'installazione può richiedere alcuni minuti.It may take a few minutes to download and install.

    Se la casella di controllo accanto a Sviluppo per desktop .NET è già selezionata, fare clic su Chiudi per chiudere la finestra di dialogo.If the check box next to .NET desktop development is already selected, select Close to exit the dialog box.

    Abilitare lo sviluppo per desktop .NET

  7. Chiudere il Programma di installazione di Visual Studio.Close Visual Studio Installer.

Installare Speech SDKInstall the Speech SDK

Il passaggio successivo prevede l'installazione del pacchetto NuGet Speech SDK per potervi fare riferimento nel codice.The next step is to install the Speech SDK NuGet package, so you can reference it in the code.

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto helloworld e quindi scegliere Gestisci pacchetti NuGet per visualizzare Gestione pacchetti NuGet.In the Solution Explorer, right-click the helloworld project, and then select Manage NuGet Packages to show the NuGet Package Manager.

    Gestione pacchetti NuGet

  2. Nell'angolo in alto a destra individuare la casella a discesa Origine dei pacchetti e assicurarsi che sia selezionata l'opzione nuget.org.In the upper-right corner, find the Package Source drop-down box, and make sure that nuget.org is selected.

  3. Nell'angolo in alto a sinistra fare clic su Sfoglia.In the upper-left corner, select Browse.

  4. Nella casella di ricerca digitare Microsoft.CognitiveServices.Speech e premere INVIO.In the search box, type Microsoft.CognitiveServices.Speech and select Enter.

  5. Nei risultati della ricerca selezionare il pacchetto Microsoft.CognitiveServices.Speech e quindi selezionare Installa per installare la versione stabile più recente.From the search results, select the Microsoft.CognitiveServices.Speech package, and then select Install to install the latest stable version.

    Installare il pacchetto NuGet Microsoft.CognitiveServices.Speech

  6. Accettare tutti i contratti e le licenze per avviare l'installazione.Accept all agreements and licenses to start the installation.

    Dopo aver installato il pacchetto, viene visualizzato un messaggio di conferma nella finestra della Console di Gestione pacchetti.After the package is installed, a confirmation appears in the Package Manager Console window.

Scegliere l'architettura di destinazioneChoose the target architecture

A questo punto, per compilare ed eseguire l'applicazione console, creare una configurazione della piattaforma corrispondente all'architettura del computer.Now, to build and run the console application, create a platform configuration matching your computer's architecture.

  1. Nella barra dei menu selezionare Compila > Gestione configurazione.From the menu bar, select Build > Configuration Manager. Verrà visualizzata finestra di dialogo Gestione configurazione.The Configuration Manager dialog box appears.

    Finestra di dialogo Gestione configurazione

  2. Nella casella a discesa Piattaforma soluzione attiva selezionare Nuova.In the Active solution platform drop-down box, select New. Verrà visualizzata la finestra di dialogo Nuova piattaforma soluzione.The New Solution Platform dialog box appears.

  3. Nella casella a discesa Digitare o selezionare la nuova piattaforma:In the Type or select the new platform drop-down box:

    • Se è in esecuzione Windows a 64 bit, selezionare x64.If you're running 64-bit Windows, select x64.
    • Se è in esecuzione Windows a 32 bit, selezionare x86.If you're running 32-bit Windows, select x86.
  4. Fare clic su OK e quindi su Chiudi.Select OK and then Close.

Aggiungere il codiceAdd the code

Aggiungere il codice al progetto.Next, you add code to the project.

  1. In Esplora soluzioni aprire il file Program.cs.From Solution Explorer, open the file Program.cs.

  2. Sostituire il blocco di istruzioni using all'inizio del file con le dichiarazioni seguenti:Replace the block of using statements at the beginning of the file with the following declarations:

    using System;
    using System.Threading.Tasks;
    using Microsoft.CognitiveServices.Speech;
    using Microsoft.CognitiveServices.Speech.Audio;
    using Microsoft.CognitiveServices.Speech.Intent;
    
  3. All'interno del metodo Main() fornito aggiungere il codice seguente:Inside the provided Main() method, add the following code:

    RecognizeIntentAsync().Wait();
    Console.WriteLine("Please press Enter to continue.");
    Console.ReadLine();
    
  4. Creare un metodo asincrono vuoto RecognizeIntentAsync(), come illustrato di seguito:Create an empty asynchronous method RecognizeIntentAsync(), as shown here:

    static async Task RecognizeIntentAsync()
    {
    }
    
  5. Nel corpo di questo nuovo metodo aggiungere questo codice:In the body of this new method, add this code:

    // Creates an instance of a speech config with specified subscription key
    // and service region. Note that in contrast to other services supported by
    // the Cognitive Services Speech SDK, the Language Understanding service
    // requires a specific subscription key from https://www.luis.ai/.
    // The Language Understanding service calls the required key 'endpoint key'.
    // Once you've obtained it, replace with below with your own Language Understanding subscription key
    // and service region (e.g., "westus").
    // The default language is "en-us".
    var config = SpeechConfig.FromSubscription("YourLanguageUnderstandingSubscriptionKey", "YourLanguageUnderstandingServiceRegion");
    
    // Creates an intent recognizer using microphone as audio input.
    using (var recognizer = new IntentRecognizer(config))
    {
        // Creates a Language Understanding model using the app id, and adds specific intents from your model
        var model = LanguageUnderstandingModel.FromAppId("YourLanguageUnderstandingAppId");
        recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
        recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
        recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");
    
        // Starts recognizing.
        Console.WriteLine("Say something...");
    
        // Starts intent recognition, and returns after a single utterance is recognized. The end of a
        // single utterance is determined by listening for silence at the end or until a maximum of 15
        // seconds of audio is processed.  The task returns the recognition text as result. 
        // Note: Since RecognizeOnceAsync() returns only a single utterance, it is suitable only for single
        // shot recognition like command or query. 
        // For long-running multi-utterance recognition, use StartContinuousRecognitionAsync() instead.
        var result = await recognizer.RecognizeOnceAsync().ConfigureAwait(false);
    
        // Checks result.
        if (result.Reason == ResultReason.RecognizedIntent)
        {
            Console.WriteLine($"RECOGNIZED: Text={result.Text}");
            Console.WriteLine($"    Intent Id: {result.IntentId}.");
            Console.WriteLine($"    Language Understanding JSON: {result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");
        }
        else if (result.Reason == ResultReason.RecognizedSpeech)
        {
            Console.WriteLine($"RECOGNIZED: Text={result.Text}");
            Console.WriteLine($"    Intent not recognized.");
        }
        else if (result.Reason == ResultReason.NoMatch)
        {
            Console.WriteLine($"NOMATCH: Speech could not be recognized.");
        }
        else if (result.Reason == 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 update the subscription info?");
            }
        }
    }
    
  6. Sostituire i segnaposto in questo metodo con la chiave di sottoscrizione LUIS, l'area e l'ID dell'app come indicato di seguito.Replace the placeholders in this method with your LUIS subscription key, region, and app ID as follows.

    PlaceholderPlaceholder Sostituire conReplace with
    YourLanguageUnderstandingSubscriptionKey La propria chiave di endpoint LUIS.Your LUIS endpoint key. Anche in questo caso, è necessario ottenere questo elemento dal dashboard di Azure, non da una "chiave di avvio".Again, you must get this item from your Azure dashboard, not a "starter key." È possibile trovarla nella pagina Chiavi ed endpoint dell'app (in Gestione) nel portale LUIS.You can find it on your app's Keys and Endpoints page (under Manage) in the LUIS portal.
    YourLanguageUnderstandingServiceRegion L'identificatore breve indica la propria area di sottoscrizione LUIS, ad esempio westus per Stati Uniti occidentali.The short identifier for the region your LUIS subscription is in, such as westus for West US. Vedere Tutte le aree.See Regions.
    YourLanguageUnderstandingAppId L'ID dell'app LUIS.The LUIS app ID. È possibile trovarlo nella pagina Impostazioni dell'app nel portale LUIS.You can find it on your app's Settings page in the LUIS portal.

Apportate queste modifiche, è possibile compilare (CTRL+MAIUSC+B) ed eseguire (F5) l'applicazione di esercitazione.With these changes made, you can build (Control+Shift+B) and run (F5) the tutorial application. Quando richiesto, provare a dire "Spegni le luci" nel microfono del PC.When you're prompted, try saying "Turn off the lights" into your PC's microphone. L'applicazione visualizza il risultato nella finestra della console.The application displays the result in the console window.

Le sezioni seguenti includono una discussione del codice.The following sections include a discussion of the code.

Creare un sistema di riconoscimento delle finalitàCreate an intent recognizer

In primo luogo, è necessario creare una configurazione per il riconoscimento vocale dalla chiave e dall'area dell'endpoint LUIS.First, you need to create a speech configuration from your LUIS endpoint key and region. È possibile usare le configurazioni del riconoscimento vocale per creare sistemi di riconoscimento per le diverse funzionalità di Speech SDK.You can use speech configurations to create recognizers for the various capabilities of the Speech SDK. La configurazione di riconoscimento vocale specifica in diversi modi la sottoscrizione da usare. In questo caso, usare FromSubscription, che accetta la chiave e l'area della sottoscrizione.The speech configuration has multiple ways to specify the subscription you want to use; here, we use FromSubscription, which takes the subscription key and region.

Nota

Usare la chiave e l'area della sottoscrizione LUIS, non di una sottoscrizione dei servizi Voce.Use the key and region of your LUIS subscription, not of a Speech Services subscription.

Creare un sistema di riconoscimento delle finalità tramite new IntentRecognizer(config).Next, create an intent recognizer using new IntentRecognizer(config). La configurazione conosce già quale sottoscrizione usare, non serve specificare nuovamente la chiave di sottoscrizione e l'endpoint quando si crea un sistema di riconoscimento.Since the configuration already knows which subscription to use, you don't need to specify the subscription key and endpoint again when creating the recognizer.

Importare un modello LUIS e aggiungere le finalitàImport a LUIS model and add intents

Ora importare il modello dalla app LUIS tramite LanguageUnderstandingModel.FromAppId() e aggiungere le finalità di LUIS che si desidera riconoscere tramite il metodo del sistema di riconoscimento AddIntent().Now import the model from the LUIS app using LanguageUnderstandingModel.FromAppId() and add the LUIS intents that you wish to recognize via the recognizer's AddIntent() method. Questi due passaggi migliorano l'accuratezza del riconoscimento vocale, indicando le parole che l'utente, con probabilità, usa nelle richieste.These two steps improve the accuracy of speech recognition by indicating words that the user is likely to use in their requests. Non è necessario aggiungere tutte le finalità dell'app se non è necessario riconoscerle tutte nella propria applicazione.You don't have to add all the app's intents if you don't need to recognize them all in your application.

Per aggiungere le finalità, è necessario specificare tre argomenti: il modello LUIS (che è stato creato e denominato model), il nome della finalità e un ID finalità.To add intents, you must provide three arguments: the LUIS model (which has been created and is named model), the intent name, and an intent ID. La differenza tra l'ID e il nome è come indicato di seguito.The difference between the ID and the name is as follows.

Argomento AddIntent() AddIntent() argument ScopoPurpose
intentNameintentName Il nome delle finalità va in base a quanto definito nell'app LUIS.The name of the intent as defined in the LUIS app. Questo valore deve corrispondere esattamente al nome finalità LUIS.This value must match the LUIS intent name exactly.
intentIDintentID ID assegnato a una finalità riconosciuta da Speech SDK.An ID assigned to a recognized intent by the Speech SDK. Questo valore può essere un qualsiasi valore; non è necessario che corrisponda al nome finalità come definito nell'app LUIS.This value can be whatever you like; it doesn't need to correspond to the intent name as defined in the LUIS app. Se più finalità vengono gestite tramite lo stesso codice, ad esempio, è possibile usare per queste lo stesso ID.If multiple intents are handled by the same code, for instance, you could use the same ID for them.

La app LUIS di domotica presenta due finalità: una per accendere il dispositivo e l'altra per spegnerlo.The Home Automation LUIS app has two intents: one for turning on a device, and another for turning off a device. Le righe in basso aggiungono queste finalità al sistema di riconoscimento; sostituire le tre linee AddIntent nel metodo RecognizeIntentAsync() con questo codice.The lines below add these intents to the recognizer; replace the three AddIntent lines in the RecognizeIntentAsync() method with this code.

recognizer.AddIntent(model, "HomeAutomation.TurnOff", "off");
recognizer.AddIntent(model, "HomeAutomation.TurnOn", "on");

Anziché aggiungere singole finalità, è anche possibile usare il metodo AddAllIntents per aggiungere tutte le finalità in un modello al sistema di riconoscimento.Instead of adding individual intents, you can also use the AddAllIntents method to add all the intents in a model to the recognizer.

Avviare il riconoscimentoStart recognition

Con il riconoscimento creato e le finalità aggiunte, è possibile iniziare il riconoscimento.With the recognizer created and the intents added, recognition can begin. Speech SDK supporta sia il riconoscimento singolo che quello continuo.The Speech SDK supports both single-shot and continuous recognition.

Modalità di riconoscimentoRecognition mode Metodi di chiamataMethods to call RisultatoResult
SingoloSingle-shot RecognizeOnceAsync() Restituisce la finalità riconosciuta, se presente, dopo una singola espressione.Returns the recognized intent, if any, after one utterance.
ContinuoContinuous StartContinuousRecognitionAsync()
StopContinuousRecognitionAsync()
Riconosce più espressioni; genera eventi (ad esempio, IntermediateResultReceived) quando i risultati sono disponibili.Recognizes multiple utterances; emits events (for example, IntermediateResultReceived) when results are available.

L'applicazione di esercitazione usa la modalità singola e quindi chiama RecognizeOnceAsync() per iniziare il riconoscimento.The tutorial application uses single-shot mode and so calls RecognizeOnceAsync() to begin recognition. Il risultato è un oggetto IntentRecognitionResult contenente le informazioni sulla finalità riconosciuta.The result is an IntentRecognitionResult object containing information about the intent recognized. La risposta LUIS JSON viene estratta mediante l'espressione seguente:You extract the LUIS JSON response by using the following expression:

result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)

L'applicazione di esercitazione non analizza il risultato JSON.The tutorial application doesn't parse the JSON result. Viene visualizzato solo il testo JSON nella finestra della console.It only displays the JSON text in the console window.

Risultati del singolo riconoscimento LUIS

Specificare lingua di riconoscimentoSpecify recognition language

Per impostazione predefinita, LUIS riconosce le finalità in inglese Americano (en-us).By default, LUIS recognizes intents in US English (en-us). Tramite l'assegnazione di un codice impostazioni locali alla proprietà SpeechRecognitionLanguage della configurazione del riconoscimento vocale, questa è in grado di riconoscere le finalità in altre lingue.By assigning a locale code to the SpeechRecognitionLanguage property of the speech configuration, you can recognize intents in other languages. Ad esempio, aggiungere config.SpeechRecognitionLanguage = "de-de"; nell'applicazione dell'esercitazione prima di creare il sistema di riconoscimento per riconoscere le finalità in tedesco.For example, add config.SpeechRecognitionLanguage = "de-de"; in our tutorial application before creating the recognizer to recognize intents in German. Per altre informazioni, vedere Linguaggi supportati.For more information, see Supported Languages.

Riconoscimento vocale continuo da un fileContinuous recognition from a file

Il codice seguente illustra due funzionalità aggiuntive del riconoscimento finalità tramite Speech SDK.The following code illustrates two additional capabilities of intent recognition using the Speech SDK. Il primo, menzionato in precedenza, è il riconoscimento continuo, in cui il sistema di riconoscimento genera eventi quando sono disponibili i risultati.The first, previously mentioned, is continuous recognition, where the recognizer emits events when results are available. Questi eventi possono quindi essere elaborati dai gestori eventi forniti.These events can then be processed by event handlers that you provide. Con il riconoscimento continuo, si effettua una chiamata al metodoStartContinuousRecognitionAsync() del sistema di riconoscimento per avviare il riconoscimento anziché chiamare RecognizeOnceAsync().With continuous recognition, you call the recognizer's StartContinuousRecognitionAsync() method to start recognition instead of RecognizeOnceAsync().

L'altra funzionalità legge l'audio che contiene il riconoscimento vocale per essere elaborato da un file WAV.The other capability is reading the audio containing the speech to be processed from a WAV file. L'implementazione comporta la creazione di una configurazione audio che può essere usata quando si crea il riconoscimento finalità.Implementation involves creating an audio configuration that can be used when creating the intent recognizer. Il file deve essere singolo canale (mono) con una frequenza di campionamento di 16 kHz.The file must be single-channel (mono) with a sampling rate of 16 kHz.

Per provare queste funzionalità, eliminare o impostare come commento il corpo del metodo RecognizeIntentAsync() e sostituirlo con il codice seguente.To try out these features, delete or comment out the body of the RecognizeIntentAsync() method, and add the following code in its place.

// Creates an instance of a speech config with specified subscription key
// and service region. Note that in contrast to other services supported by
// the Cognitive Services Speech SDK, the Language Understanding service
// requires a specific subscription key from https://www.luis.ai/.
// The Language Understanding service calls the required key 'endpoint key'.
// Once you've obtained it, replace with below with your own Language Understanding subscription key
// and service region (e.g., "westus").
var config = SpeechConfig.FromSubscription("YourLanguageUnderstandingSubscriptionKey", "YourLanguageUnderstandingServiceRegion");

// Creates an intent recognizer using file as audio input.
// Replace with your own audio file name.
using (var audioInput = AudioConfig.FromWavFileInput("whatstheweatherlike.wav"))
{
    using (var recognizer = new IntentRecognizer(config, audioInput))
    {
        // The TaskCompletionSource to stop recognition.
        var stopRecognition = new TaskCompletionSource<int>();

        // Creates a Language Understanding model using the app id, and adds specific intents from your model
        var model = LanguageUnderstandingModel.FromAppId("YourLanguageUnderstandingAppId");
        recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName1", "id1");
        recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName2", "id2");
        recognizer.AddIntent(model, "YourLanguageUnderstandingIntentName3", "any-IntentId-here");

        // Subscribes to events.
        recognizer.Recognizing += (s, e) => {
            Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
        };

        recognizer.Recognized += (s, e) => {
            if (e.Result.Reason == ResultReason.RecognizedIntent)
            {
                Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
                Console.WriteLine($"    Intent Id: {e.Result.IntentId}.");
                Console.WriteLine($"    Language Understanding JSON: {e.Result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)}.");
            }
            else if (e.Result.Reason == ResultReason.RecognizedSpeech)
            {
                Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
                Console.WriteLine($"    Intent not recognized.");
            }
            else if (e.Result.Reason == ResultReason.NoMatch)
            {
                Console.WriteLine($"NOMATCH: Speech could not be recognized.");
            }
        };

        recognizer.Canceled += (s, e) => {
            Console.WriteLine($"CANCELED: Reason={e.Reason}");

            if (e.Reason == CancellationReason.Error)
            {
                Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
                Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
                Console.WriteLine($"CANCELED: Did you update the subscription info?");
            }

            stopRecognition.TrySetResult(0);
        };

        recognizer.SessionStarted += (s, e) => {
            Console.WriteLine("\n    Session started event.");
        };

        recognizer.SessionStopped += (s, e) => {
            Console.WriteLine("\n    Session stopped event.");
            Console.WriteLine("\nStop recognition.");
            stopRecognition.TrySetResult(0);
        };


        // Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
        Console.WriteLine("Say something...");
        await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);

        // Waits for completion.
        // Use Task.WaitAny to keep the task rooted.
        Task.WaitAny(new[] { stopRecognition.Task });

        // Stops recognition.
        await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
    }
}

Aggiornare il codice per includere la propria chiave endpoint LUIS, la regione e l'ID dell'app per aggiungere le finalità Automazione home, come visto in precedenza.Revise the code to include your LUIS endpoint key, region, and app ID and to add the Home Automation intents, as before. Modificare whatstheweatherlike.wav nel nome del proprio file audio registrato.Change whatstheweatherlike.wav to the name of your recorded audio file. Quindi compilare, copiare il file audio nella directory di compilazione ed eseguire l'applicazione.Then build, copy the audio file to the build directory, and run the application.

Ad esempio, se si dice "Spegni le luci", pausa e quindi "Accendi le luci" nel file audio registrato, è possibile che venga visualizzato un output della console simile al seguente:For example, if you say "Turn off the lights", pause, and then say "Turn on the lights" in your recorded audio file, console output similar to the following may appear:

Risultati del riconoscimento LUIS del file audio

Ottenere gli esempiGet the samples

Per gli esempi più recenti, vedere il repository degli esempi di codice di Speech SDK di Servizi cognitivi in GitHub.For the latest samples, see the Cognitive Services Speech SDK sample code repository on GitHub.

Cercare il codice usato in questo articolo nella cartella samples/csharp/sharedcontent/console.Look for the code from this article in the samples/csharp/sharedcontent/console folder.

Passaggi successiviNext steps