Reconocimiento de intenciones a partir de contenido de voz mediante el SDK de Voz para C#How to recognize intents from speech using the Speech SDK for C#

El SDK de Voz de Cognitive Services se integra con Language Understanding Intelligent Service (LUIS) para proporcionar un reconocimiento de la intención.The Cognitive Services Speech SDK integrates with the Language Understanding service (LUIS) to provide intent recognition. Una intención es algo que el usuario quiere hacer: reservar un vuelo, comprobar el tiempo o hacer una llamada.An intent is something the user wants to do: book a flight, check the weather, or make a call. El usuario puede utilizar cualquier término que le parezca natural.The user can use whatever terms feel natural. Mediante el aprendizaje automático, LUIS asigna las solicitudes de los usuarios a las intenciones que se hayan definido.Using machine learning, LUIS maps user requests to the intents you've defined.

Nota

Una aplicación LUIS define las intenciones y entidades que desea reconocer.A LUIS application defines the intents and entities you want to recognize. Es independiente de la aplicación C# que utiliza el servicio Voz.It's separate from the C# application that uses the Speech service. En este artículo, con la palabra "aplicación" se indica tanto la aplicación LUIS, como el código C#.In this article, "app" means the LUIS app, while "application" means the C# code.

En esta guía, se utiliza el SDK de Voz para desarrollar una aplicación de consola C# que deriva las intenciones de las expresiones de los usuarios mediante el micrófono del dispositivo.In this guide, you use the Speech SDK to develop a C# console application that derives intents from user utterances through your device's microphone. Aprenderá a:You'll learn how to:

  • Crear un proyecto de Visual Studio que haga referencia al paquete NuGet del SDK de VozCreate a Visual Studio project referencing the Speech SDK NuGet package
  • Crear una configuración de voz y obtener un reconocedor de intencionesCreate a speech configuration and get an intent recognizer
  • Obtener el modelo para la aplicación LUIS y agregar las intenciones que necesitaGet the model for your LUIS app and add the intents you need
  • Especificar el idioma para el reconocimiento de vozSpecify the language for speech recognition
  • Reconocer la voz a partir de un archivoRecognize speech from a file
  • Usar el reconocimiento asincrónico, continuo y controlado por eventosUse asynchronous, event-driven continuous recognition

PrerrequisitosPrerequisites

Asegúrese de disponer de los siguientes elementos antes de empezar esta guía:Be sure you have the following items before you begin this guide:

LUIS y vozLUIS and speech

LUIS se integra con el servicio Voz para reconocer las intenciones a partir de contenido de voz.LUIS integrates with the Speech service to recognize intents from speech. No necesita una suscripción al servicio Voz, solo LUIS.You don't need a Speech service subscription, just LUIS.

LUIS usa tres tipos de claves:LUIS uses three kinds of keys:

Tipo de claveKey type PropósitoPurpose
CreaciónAuthoring Le permite crear y modificar aplicaciones de LUIS mediante programaciónLets you create and modify LUIS apps programmatically
InicioStarter Permite probar la aplicación de LUIS mediante el uso solo de texto.Lets you test your LUIS application using text only
Punto de conexiónEndpoint Autoriza el acceso a una aplicación de LUIS concretaAuthorizes access to a particular LUIS app

Para esta guía, necesitará el tipo de clave de punto de conexión.For this guide, you need the endpoint key type. Esta guía utiliza la aplicación de LUIS Home Automation de ejemplo, que se puede crear siguiendo el inicio rápido Uso de automatización del hogar compilada previamente.This guide uses the example Home Automation LUIS app, which you can create by following the Use prebuilt Home automation app quickstart. Si ha creado su propia aplicación de LUIS, puede usarla si lo prefiere.If you've created a LUIS app of your own, you can use it instead.

Al crear una aplicación LUIS, el propio LUIS genera automáticamente una clave de inicio para que pueda probarla aplicación mediante consultas de texto.When you create a LUIS app, LUIS automatically generates a starter key so you can test the app using text queries. Esta clave no permite la integración del servicio de voz y no funcionará con esta guía.This key doesn't enable the Speech service integration and won't work with this guide. Cree un recurso de LUIS en el panel de Azure y asígnelo a la aplicación de LUIS.Create a LUIS resource in the Azure dashboard and assign it to the LUIS app. Puede usar el nivel de suscripción gratis para esta guía.You can use the free subscription tier for this guide.

Después de crear el recurso de LUIS en el panel de Azure, inicie sesión en el portal de LUIS, elija la aplicación en la página My Apps (Mis aplicaciones) y, después, cambie a la página Manage (Administrar) de la aplicación.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. Por último, seleccione Keys and Endpoints (Claves y puntos de conexión) en la barra lateral.Finally, select Keys and Endpoints in the sidebar.

Configuración de los puntos de conexión y claves del portal de LUIS

En la página Keys and Endpoint settings (Configuración de claves y puntos de conexión):On the Keys and Endpoint settings page:

  1. Desplácese hacia abajo hasta la sección Resources and Keys (Recursos y claves) y seleccione Assign resource (Asignar recurso).Scroll down to the Resources and Keys section and select Assign resource.

  2. En el cuadro de diálogo Assign a key to your app (Asignar una clave a la aplicación), realices los siguientes cambios:In the Assign a key to your app dialog box, make the following changes:

    • En Tenant (Inquilino), elija Microsoft.Under Tenant, choose Microsoft.
    • En Subscription Name (Nombre de suscripción), elija la suscripción de Azure que contiene el recurso de LUIS que desea usar.Under Subscription Name, choose the Azure subscription that contains the LUIS resource you want to use.
    • En Key (Clave), elija el recurso de LUIS que desea usar con la aplicación.Under Key, choose the LUIS resource that you want to use with the app.

    En unos instantes, la nueva suscripción aparecerá en la tabla en la parte inferior de la página.In a moment, the new subscription appears in the table at the bottom of the page.

  3. Seleccione el icono situado junto a una clave para copiarla al Portapapeles.Select the icon next to a key to copy it to the clipboard. (Puede usar cualquiera de las claves).(You may use either key.)

Claves de suscripción de la aplicación LUIS

Creación de un proyecto de contenido de voz en Visual StudioCreate a speech project in Visual Studio

Para crear un proyecto de Visual Studio para el desarrollo de Windows, debe crear el proyecto, configurar Visual Studio para el desarrollo de escritorio de .NET, instalar el SDK de Voz y elegir la arquitectura de destino.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.

Creación del proyecto e incorporación de la carga de trabajoCreate the project and add the workload

Para empezar, cree el proyecto en Visual Studio y asegúrese de que Visual Studio está configurado para el desarrollo de escritorio de .NET:To start, create the project in Visual Studio, and make sure that Visual Studio is set up for .NET desktop development:

  1. Abra Visual Studio 2019.Open Visual Studio 2019.

  2. En la ventana Inicio, seleccione Crear un proyecto.In the Start window, select Create a new project.

  3. En la ventana Crear un proyecto, elija Aplicación de consola (.NET Framework) y seleccione Siguiente.In the Create a new project window, choose Console App (.NET Framework), and then select Next.

  4. En la ventana Configure su nuevo proyecto, escriba helloworld en Nombre del proyecto , elija o cree la ruta de acceso del directorio en Ubicación y seleccione Crear.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. En la barra de menús de Visual Studio, seleccione Herramientas > Obtener herramientas y características, que abre el Instalador de Visual Studio y muestra el cuadro de diálogo Modificando.From the Visual Studio menu bar, select Tools > Get Tools and Features, which opens Visual Studio Installer and displays the Modifying dialog box.

  6. Compruebe si la carga de trabajo Desarrollo de escritorio de .NET está disponible.Check whether the .NET desktop development workload is available. Si la carga de trabajo aún no se ha instalado, active la casilla que hay al lado y seleccione Modificar para iniciar la instalación.If the workload hasn't been installed, select the check box next to it, and then select Modify to start the installation. La descarga e instalación pueden tardar unos minutos.It may take a few minutes to download and install.

    Si la casilla que está junto a Desarrollo de escritorio de .NET ya está seleccionada, seleccione Cerrar para salir del cuadro de diálogo.If the check box next to .NET desktop development is already selected, select Close to exit the dialog box.

    Habilitación del desarrollo de escritorio .NET

  7. Cierre el Instalador de Visual Studio.Close Visual Studio Installer.

Instalación de Speech SDKInstall the Speech SDK

El siguiente paso consiste en instalar el paquete NuGet del SDK de Voz para que pueda hacer referencia a él en el código.The next step is to install the Speech SDK NuGet package, so you can reference it in the code.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto helloworld y seleccione Administrar paquetes NuGet para mostrar el Administrador de paquetes NuGet.In the Solution Explorer, right-click the helloworld project, and then select Manage NuGet Packages to show the NuGet Package Manager.

    Administrador de paquetes NuGet

  2. En la esquina superior derecha, busque el cuadro desplegable Origen del paquete y asegúrese de que nuget.org está seleccionado.In the upper-right corner, find the Package Source drop-down box, and make sure that nuget.org is selected.

  3. En la esquina superior izquierda, seleccione Examinar.In the upper-left corner, select Browse.

  4. En el cuadro de búsqueda, escriba Microsoft.CognitiveServices.Speech y seleccione Entrar.In the search box, type Microsoft.CognitiveServices.Speech and select Enter.

  5. En los resultados de la búsqueda, seleccione el paquete Microsoft.CognitiveServices.Speech y, después, seleccione Instalar para instalar la versión estable más reciente.From the search results, select the Microsoft.CognitiveServices.Speech package, and then select Install to install the latest stable version.

    Instalación del paquete NuGet Microsoft.CognitiveServices.Speech

  6. Acepte todos los contratos y licencias para iniciar la instalación.Accept all agreements and licenses to start the installation.

    Después de instalar el paquete aparecerá una confirmación en la ventana Consola del administrador de paquetes.After the package is installed, a confirmation appears in the Package Manager Console window.

Elección de la arquitectura de destinoChoose the target architecture

Ahora, para compilar y ejecutar la aplicación de consola, cree una configuración de plataforma que coincida con la arquitectura del equipo.Now, to build and run the console application, create a platform configuration matching your computer's architecture.

  1. En la barra de menús, seleccione Compilar > Administrador de configuración.From the menu bar, select Build > Configuration Manager. Aparecerá el cuadro de diálogo Administrador de configuración.The Configuration Manager dialog box appears.

    Cuadro de diálogo Administrador de configuración

  2. En el cuadro desplegable Active solution platform (Plataforma de soluciones activas), seleccione Nuevo.In the Active solution platform drop-down box, select New. Aparecerá el cuadro de diálogo Nueva plataforma de solución.The New Solution Platform dialog box appears.

  3. En el cuadro desplegable escriba o seleccione la nueva plataforma:In the Type or select the new platform drop-down box:

    • Si está ejecutando Windows de 64 bits, seleccione x64.If you're running 64-bit Windows, select x64.
    • Si está ejecutando Windows de 32 bits, seleccione x86.If you're running 32-bit Windows, select x86.
  4. Seleccione Aceptar y, después, Cerrar.Select OK and then Close.

Adición del códigoAdd the code

Después, agregue al código al proyecto.Next, you add code to the project.

  1. En el Explorador de soluciones, abra el archivo Program.cs.From Solution Explorer, open the file Program.cs.

  2. Reemplace el bloque de sentencias using del principio del archivo por las siguientes declaraciones: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. Reemplace el método Main() proporcionado por el siguiente equivalente asincrónico:Replace the provided Main() method, with the following asynchronous equivalent:

    public static async Task Main()
    {
        await RecognizeIntentAsync();
        Console.WriteLine("Please press Enter to continue.");
        Console.ReadLine();
    }
    
  4. Cree un método asincrónico vacío RecognizeIntentAsync(), tal como se muestra aquí:Create an empty asynchronous method RecognizeIntentAsync(), as shown here:

    static async Task RecognizeIntentAsync()
    {
    }
    
  5. En el cuerpo del nuevo método, agregue este código: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. Reemplace los marcadores de posición en este método por su clave de suscripción, región e identificador de aplicación de LUIS, como se indica a continuación.Replace the placeholders in this method with your LUIS subscription key, region, and app ID as follows.

    Marcador de posiciónPlaceholder Reemplazar porReplace with
    YourLanguageUnderstandingSubscriptionKey La clave de punto de conexión de LUIS.Your LUIS endpoint key. Una vez más, este elemento se debe obtener en el panel de Azure, no una "clave de inicio".Again, you must get this item from your Azure dashboard, not a "starter key." Se puede encontrar en la página Keys and Endpoints (Claves y puntos de conexión), (en Manage [Administrar] ) en el portal de LUIS.You can find it on your app's Keys and Endpoints page (under Manage) in the LUIS portal.
    YourLanguageUnderstandingServiceRegion El identificador corto para la región en la que se encuentra la suscripción a LUIS, como westus para Oeste de EE. UU.The short identifier for the region your LUIS subscription is in, such as westus for West US. Consulte Regiones.See Regions.
    YourLanguageUnderstandingAppId El id. de la aplicación LUIS.The LUIS app ID. Se puede encontrar en la página Settings (Configuración) del portal de LUIS.You can find it on your app's Settings page in the LUIS portal.

Con estos cambios realizados, puede crear (Control-Mayús-B) y ejecutar (F5) la aplicación de la guía.With these changes made, you can build (Control+Shift+B) and run (F5) the application. Cuando se le solicite, pruebe a decir "Apagar las luces" al micrófono del equipo.When you're prompted, try saying "Turn off the lights" into your PC's microphone. La aplicación muestra el resultado en la ventana de la consola.The application displays the result in the console window.

Las secciones siguientes incluyen una explicación del código.The following sections include a discussion of the code.

Creación de un reconocedor de intencionesCreate an intent recognizer

En primer lugar, es preciso crear una configuración de voz desde la región y la clave del punto de conexión de LUIS.First, you need to create a speech configuration from your LUIS endpoint key and region. Las configuraciones de voz se pueden utilizar para crear reconocedores para las distintas funcionalidades del SDK de Voz.You can use speech configurations to create recognizers for the various capabilities of the Speech SDK. La configuración de voz tiene varias formas de especificar la suscripción que se desea usar; aquí usamos FromSubscription, que toma la clave de suscripción y la región.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

Utilice la clave y la región de su suscripción a LUIS, no de su suscripción al servicio de voz.Use the key and region of your LUIS subscription, not a Speech service subscription.

Después, cree un reconocedor de intenciones mediante new IntentRecognizer(config).Next, create an intent recognizer using new IntentRecognizer(config). Dado que la configuración ya sabe la suscripción que hay que utilizar, no es preciso volver a especificar la clave de suscripción y el punto de conexión al crear el reconocedor.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.

Importación de un modelo de LUIS y adición de intencionesImport a LUIS model and add intents

Ahora importe el modelo desde la aplicación LUIS mediante LanguageUnderstandingModel.FromAppId() y agregue las intenciones de LUIS que desee reconocer mediante el método AddIntent() del reconocedor.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. Estos dos pasos mejoran la precisión del reconocimiento de voz al indicar palabras que el usuario probablemente utilizará en sus solicitudes.These two steps improve the accuracy of speech recognition by indicating words that the user is likely to use in their requests. No es preciso agregar todas las intenciones de la aplicación, salvo que se necesite reconocer todas en la aplicación.You don't have to add all the app's intents if you don't need to recognize them all in your application.

Para agregar intenciones, es preciso especificar tres argumentos: el modelo de LUIS (que se ha creado y se llama model), el nombre de la intención y un identificador de la intención.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 diferencia entre el identificador y el nombre es como sigue.The difference between the ID and the name is as follows.

Argumento de AddIntent() AddIntent() argument PropósitoPurpose
intentName El nombre de la intención, tal como se define en la aplicación LUIS.The name of the intent as defined in the LUIS app. Este valor debe coincidir exactamente con el nombre de la intención de LUIS.This value must match the LUIS intent name exactly.
intentID Identificador asignado a una intención reconocida por el SDK de Voz.An ID assigned to a recognized intent by the Speech SDK. Este valor puede ser el que desee; no es preciso que se corresponda con el nombre de la intención definido en la aplicación LUIS.This value can be whatever you like; it doesn't need to correspond to the intent name as defined in the LUIS app. Si se controlan varias intenciones con el mismo código, por ejemplo, se puede utilizar el mismo identificador para ellos.If multiple intents are handled by the same code, for instance, you could use the same ID for them.

La aplicación de LUIS Home Automation tiene dos intenciones: una para encender un dispositivo y otra para apagar un dispositivo.The Home Automation LUIS app has two intents: one for turning on a device, and another for turning off a device. En las líneas siguientes se agregan estas intenciones al reconocedor; reemplace las tres líneas AddIntent del método RecognizeIntentAsync() por este código.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");

En lugar de agregar intenciones individuales, puede usar el método AddAllIntents para agregar todas las intenciones de un modelo al reconocedor.Instead of adding individual intents, you can also use the AddAllIntents method to add all the intents in a model to the recognizer.

Inicio del reconocimientoStart recognition

Cuando haya creado el reconocedor y haya agregado las intenciones, puede empezar el reconocimiento.With the recognizer created and the intents added, recognition can begin. El SDK de Voz admite tanto el reconocimiento continuo como el de una sola emisión.The Speech SDK supports both single-shot and continuous recognition.

Modo de reconocimientoRecognition mode Métodos para la llamadaMethods to call ResultadoResult
Emisión únicaSingle-shot RecognizeOnceAsync() Devuelve la intención reconocida, si la hubiera, después de una expresión.Returns the recognized intent, if any, after one utterance.
ContinuoContinuous StartContinuousRecognitionAsync()
StopContinuousRecognitionAsync()
Reconoce varias expresiones; emite eventos (por ejemplo, IntermediateResultReceived) cuando los resultados están disponibles.Recognizes multiple utterances; emits events (for example, IntermediateResultReceived) when results are available.

La aplicación utiliza el modo de emisión única y, por lo tanto, llama a RecognizeOnceAsync() para iniciar el reconocimiento.The application uses single-shot mode and so calls RecognizeOnceAsync() to begin recognition. El resultado es un objeto IntentRecognitionResult que contiene información sobre la intención reconocida.The result is an IntentRecognitionResult object containing information about the intent recognized. La respuesta JSON de LUIS se extrae mediante la siguiente expresión:You extract the LUIS JSON response by using the following expression:

result.Properties.GetProperty(PropertyId.LanguageUnderstandingServiceResponse_JsonResult)

La aplicación no analiza el resultado de JSON.The application doesn't parse the JSON result. Solo muestra el texto JSON en la ventana de la consola.It only displays the JSON text in the console window.

Resultados individuales del reconocimiento de LUIS

Especificación de un idioma de reconocimientoSpecify recognition language

De forma predeterminada, LUIS reconoce las intenciones en idioma inglés de Estados Unidos (en-us).By default, LUIS recognizes intents in US English (en-us). Al asignar un código de configuración regional a la propiedad SpeechRecognitionLanguage de la configuración de voz, puede reconocer las intenciones en otros idiomas.By assigning a locale code to the SpeechRecognitionLanguage property of the speech configuration, you can recognize intents in other languages. Por ejemplo, agregue config.SpeechRecognitionLanguage = "de-de"; en la aplicación antes de crear el reconocedor para reconocer las intenciones en idioma alemán.For example, add config.SpeechRecognitionLanguage = "de-de"; in our application before creating the recognizer to recognize intents in German. Para obtener más información, consulte Idiomas admitidos: LUIS.For more information, see LUIS language support.

Reconocimiento continuo desde un archivoContinuous recognition from a file

El código siguiente muestra dos funcionalidades adicionales de reconocimiento de intenciones mediante el SDK de Voz.The following code illustrates two additional capabilities of intent recognition using the Speech SDK. La primera, mencionada anteriormente, es el reconocimiento continuo, donde el reconocedor emite eventos cuando los resultados están disponibles.The first, previously mentioned, is continuous recognition, where the recognizer emits events when results are available. Estos eventos los pueden procesar los controladores de eventos que proporcione.These events can then be processed by event handlers that you provide. Con el reconocimiento continuo, se llama al método StartContinuousRecognitionAsync() del reconocedor para iniciar el reconocimiento, en lugar de a RecognizeOnceAsync().With continuous recognition, you call the recognizer's StartContinuousRecognitionAsync() method to start recognition instead of RecognizeOnceAsync().

La otra funcionalidad es leer el audio que contiene la voz que se va a procesar desde un archivo WAV.The other capability is reading the audio containing the speech to be processed from a WAV file. La implementación implica la creación de una configuración de audio que se puede utilizar al crear el reconocedor de intenciones.Implementation involves creating an audio configuration that can be used when creating the intent recognizer. El archivo debe ser monocanal (mono) con una frecuencia de muestreo de 16 kHz.The file must be single-channel (mono) with a sampling rate of 16 kHz.

Para probar estas características, elimine o marque como comentario el cuerpo del método RecognizeIntentAsync() y agregue el siguiente código en su lugar.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);
    }
}

Revise el código para incluir la clave del punto de conexión de LUIS, la región y el identificador de la aplicación y para agregar las intenciones de automatización de dispositivos del hogar, como antes.Revise the code to include your LUIS endpoint key, region, and app ID and to add the Home Automation intents, as before. Cambie whatstheweatherlike.wav por el nombre del archivo de audio grabado.Change whatstheweatherlike.wav to the name of your recorded audio file. Luego realice la compilación, copie el archivo de audio en el directorio de compilación y ejecute la aplicación.Then build, copy the audio file to the build directory, and run the application.

Por ejemplo, si dice "Apagar las luces", hace una pausa y, después, dice "Encender las luces" en el archivo de audio grabado, puede aparecer una salida en la consola similar a la siguiente: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:

Resultados del reconocimiento que hace LUIS de un archivo de audio

Código fuente de ejemploSample source code

El equipo del SDK de Voz mantiene activamente un conjunto grande de ejemplos en un repositorio de código abierto.The Speech SDK team actively maintains a large set of examples in an open-source repository. Para obtener el repositorio de código fuente de ejemplo, visite el SDK de Voz de Microsoft Cognitive Services en GitHub .For the sample source code repository, visit the Microsoft Cognitive Services Speech SDK on GitHub . Hay ejemplos para C#, C++, Java, Python, Objective-C, Swift, JavaScript, UWP, Unity y Xamarin.There are samples for C#, C++, Java, Python, Objective-C, Swift, JavaScript, UWP, Unity, and Xamarin.


GitHub

Busque el código de este artículo en la carpeta samples/csharp/sharedcontent/console.Look for the code from this article in the samples/csharp/sharedcontent/console folder.

Pasos siguientesNext steps