Entrée vocale dans UnityVoice input in Unity

Notes

À la place des informations ci-dessous, envisagez d’utiliser le plug-in Unity pour le kit de développement logiciel (SDK) cognitive Speech services qui offre de meilleurs résultats de précision vocale et fournit un accès facile au décodage vocal en texte et aux fonctionnalités vocales avancées, telles que la boîte de dialogue, l’interaction fondée sur l’intention, la traduction, la synthèse vocale et laInstead of the below information, consider using the Unity plug-in for the Cognitive Speech Services SDK which has much better Speech Accuracy results and provides easy access to speech-to-text decode and advanced speech features like dialog, intent based interaction, translation, text-to-speech synthesis and natural language speech recognition. Recherchez l’exemple et documentation ici : https://docs.microsoft.com//azure/cognitive-services/speech-service/quickstart-csharp-unityFind the sample and documentaion here: https://docs.microsoft.com//azure/cognitive-services/speech-service/quickstart-csharp-unity

Unity expose trois façons d’ajouter une entrée vocale à votre application Unity.Unity exposes three ways to add Voice input to your Unity application.

Avec KeywordRecognizer (l’un des deux types de PhraseRecognizers), votre application peut recevoir un tableau de commandes de chaîne à écouter.With the KeywordRecognizer (one of two types of PhraseRecognizers), your app can be given an array of string commands to listen for. Avec GrammarRecognizer (l’autre type de PhraseRecognizer), votre application peut recevoir un fichier SRGS définissant une grammaire spécifique à écouter.With the GrammarRecognizer (the other type of PhraseRecognizer), your app can be given an SRGS file defining a specific grammar to listen for. Avec DictationRecognizer, votre application peut écouter tout mot et fournir à l’utilisateur une note ou un autre affichage de sa parole.With the DictationRecognizer, your app can listen for any word and provide the user with a note or other display of their speech.

Notes

Seule la reconnaissance de la dictée ou de l’expression peut être gérée à la fois.Only dictation or phrase recognition can be handled at once. Cela signifie que si un GrammarRecognizer ou un KeywordRecognizer est actif, un DictationRecognizer ne peut pas être actif et vice versa.That means if a GrammarRecognizer or KeywordRecognizer is active, a DictationRecognizer can not be active and vice versa.

Activation de la fonctionnalité de voixEnabling the capability for Voice

La fonctionnalité microphone doit être déclarée pour qu’une application utilise l’entrée vocale.The Microphone capability must be declared for an app to use Voice input.

  1. Dans l’éditeur Unity, accédez aux paramètres du lecteur en accédant à « modifier les paramètres du projet > > Player ».In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player"
  2. Sélectionnez sous l’onglet Windows StoreSelect on the "Windows Store" tab
  3. Dans la section « fonctionnalités de > des paramètres de publication », vérifiez la fonctionnalité du microphone .In the "Publishing Settings > Capabilities" section, check the Microphone capability

Reconnaissance d’expressionsPhrase Recognition

Pour permettre à votre application d’écouter des expressions spécifiques parlées par l’utilisateur, puis de prendre des mesures, vous devez :To enable your app to listen for specific phrases spoken by the user then take some action, you need to:

  1. Spécifier les expressions à écouter à l’aide d’un KeywordRecognizer ou d’un GrammarRecognizerSpecify which phrases to listen for using a KeywordRecognizer or GrammarRecognizer
  2. Gérer l’événement OnPhraseRecognized et entreprendre une action correspondant à l’expression reconnueHandle the OnPhraseRecognized event and take action corresponding to the phrase recognized

KeywordRecognizerKeywordRecognizer

Espace de noms : UnityEngine. Windows. SpeechNamespace: UnityEngine.Windows.Speech
Types : KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatusTypes: KeywordRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Nous aurons besoin de quelques instructions d’utilisation pour enregistrer des séquences de touches :We'll need a few using statements to save some keystrokes:

using UnityEngine.Windows.Speech;
using System.Collections.Generic;
using System.Linq;

Nous allons ensuite ajouter quelques champs à votre classe pour stocker le module de reconnaissance et de mot clé->dictionnaire d’actions :Then let's add a few fields to your class to store the recognizer and keyword->action dictionary:

KeywordRecognizer keywordRecognizer;
Dictionary<string, System.Action> keywords = new Dictionary<string, System.Action>();

Ajoutez maintenant un mot clé au dictionnaire, par exemple dans une méthode Start ().Now add a keyword to the dictionary, for example in of a Start() method. Nous ajoutons le mot clé « Activate » dans cet exemple :We're adding the "activate" keyword in this example:

//Create keywords for keyword recognizer
keywords.Add("activate", () =>
{
    // action to be performed when this keyword is spoken
});

Créez le module de reconnaissance de mot clé et dites-lui ce que nous souhaitons reconnaître :Create the keyword recognizer and tell it what we want to recognize:

keywordRecognizer = new KeywordRecognizer(keywords.Keys.ToArray());

Inscrivez-vous maintenant à l’événement OnPhraseRecognizedNow register for the OnPhraseRecognized event

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Voici un exemple de gestionnaire :An example handler is:

private void KeywordRecognizer_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
    System.Action keywordAction;
    // if the keyword recognized is in our dictionary, call that Action.
    if (keywords.TryGetValue(args.text, out keywordAction))
    {
        keywordAction.Invoke();
    }
}

Enfin, commencez à reconnaître !Finally, start recognizing!

keywordRecognizer.Start();

GrammarRecognizerGrammarRecognizer

Espace de noms : UnityEngine. Windows. SpeechNamespace: UnityEngine.Windows.Speech
Types: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatusTypes: GrammarRecognizer, PhraseRecognizedEventArgs, SpeechError, SpeechSystemStatus

Le GrammarRecognizer est utilisé si vous spécifiez votre grammaire de reconnaissance à l’aide de SRGS.The GrammarRecognizer is used if you're specifying your recognition grammar using SRGS. Cela peut être utile si votre application contient plus de seulement quelques mots-clés, si vous souhaitez reconnaître des expressions plus complexes ou si vous souhaitez facilement activer et désactiver des ensembles de commandes.This can be useful if your app has more than just a few keywords, if you want to recognize more complex phrases, or if you want to easily turn on and off sets of commands. Voir : créer des grammaires à l’aide de SRGS XML pour les informations de format de fichier.See: Create Grammars Using SRGS XML for file format information.

Une fois que vous disposez de la grammaire SRGS et que celle-ci se trouve dans votre projet dans un dossier StreamingAssets:Once you have your SRGS grammar, and it is in your project in a StreamingAssets folder:

<PROJECT_ROOT>/Assets/StreamingAssets/SRGS/myGrammar.xml

Créez un GrammarRecognizer et transmettez-lui le chemin d’accès à votre fichier SRGS :Create a GrammarRecognizer and pass it the path to your SRGS file:

private GrammarRecognizer grammarRecognizer;
grammarRecognizer = new GrammarRecognizer(Application.streamingDataPath + "/SRGS/myGrammar.xml");

Inscrivez-vous maintenant à l’événement OnPhraseRecognizedNow register for the OnPhraseRecognized event

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Vous obtenez un rappel contenant les informations spécifiées dans votre syntaxe SRGS, que vous pouvez gérer de manière appropriée.You'll get a callback containing information specified in your SRGS grammar, which you can handle appropriately. La plupart des informations importantes seront fournies dans le tableau semanticMeanings.Most of the important information will be provided in the semanticMeanings array.

private void Grammar_OnPhraseRecognized(PhraseRecognizedEventArgs args)
{
    SemanticMeaning[] meanings = args.semanticMeanings;
    // do something
}

Enfin, commencez à reconnaître !Finally, start recognizing!

grammarRecognizer.Start();

DictationDictation

Espace de noms : UnityEngine. Windows. SpeechNamespace: UnityEngine.Windows.Speech
Types: DictationRecognizer, SpeechError, SpeechSystemStatusTypes: DictationRecognizer, SpeechError, SpeechSystemStatus

Utilisez DictationRecognizer pour convertir la parole de l’utilisateur en texte.Use the DictationRecognizer to convert the user's speech to text. Le DictationRecognizer expose les fonctionnalités de dictée et prend en charge l’inscription et l’écoute des événements d’hypothèse et d’expression terminés, ce qui vous permet de fournir des commentaires à l’utilisateur pendant qu’il parle et par la suite.The DictationRecognizer exposes dictation functionality and supports registering and listening for hypothesis and phrase completed events, so you can give feedback to your user both while they speak and afterwards. Les méthodes Start () et Stop () respectivement activent et désactivent la reconnaissance de la dictée.Start() and Stop() methods respectively enable and disable dictation recognition. Une fois le module de reconnaissance terminé, il doit être supprimé à l’aide de la méthode Dispose () pour libérer les ressources qu’il utilise.Once done with the recognizer, it should be disposed using Dispose() method to release the resources it uses. Les ressources seront libérées automatiquement pendant la garbage collection à un coût de performances supplémentaire si elles ne sont pas libérées avant cela.It will release these resources automatically during garbage collection at an additional performance cost if they aren't released before that.

Il n’y a que quelques étapes nécessaires pour commencer à utiliser la dictée :There are only a few steps needed to get started with dictation:

  1. Créer un nouveau DictationRecognizerCreate a new DictationRecognizer
  2. Gérer les événements de dictéeHandle Dictation events
  3. Démarrer le DictationRecognizerStart the DictationRecognizer

Activation de la fonctionnalité de dictéeEnabling the capability for dictation

La fonctionnalité « client Internet », ainsi que la fonctionnalité « microphone » mentionnée ci-dessus, doivent être déclarées pour qu’une application tire parti de la dictée.The "Internet Client" capability, along with the "Microphone" capability mentioned above, must be declared for an app to leverage dictation.

  1. Dans l’éditeur Unity, accédez aux paramètres du lecteur en accédant à la page « modifier les paramètres du projet > > Player ».In the Unity Editor, go to the player settings by navigating to "Edit > Project Settings > Player" page
  2. Sélectionnez sous l’onglet Windows StoreSelect on the "Windows Store" tab
  3. Dans la section « fonctionnalités de > des paramètres de publication », vérifiez la capacité de internetclientIn the "Publishing Settings > Capabilities" section, check the InternetClient capability

DictationRecognizerDictationRecognizer

Créez un DictationRecognizer de la manière suivante :Create a DictationRecognizer like so:

dictationRecognizer = new DictationRecognizer();

Quatre événements de dictée peuvent être souscrits et gérés pour implémenter le comportement de la dictée.There are four dictation events that can be subscribed to and handled to implement dictation behavior.

  1. DictationResultDictationResult
  2. DictationCompleteDictationComplete
  3. DictationHypothesisDictationHypothesis
  4. DictationErrorDictationError

DictationResultDictationResult

Cet événement est déclenché après la suspension de l’utilisateur, généralement à la fin d’une phrase.This event is fired after the user pauses, typically at the end of a sentence. La chaîne complète reconnue est retournée ici.The full recognized string is returned here.

Tout d’abord, abonnez-vous à l’événement DictationResult :First, subscribe to the DictationResult event:

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Gérez ensuite le rappel DictationResult :Then handle the DictationResult callback:

private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
{
    // do something
}

DictationHypothesisDictationHypothesis

Cet événement est déclenché en continu pendant que l’utilisateur parle.This event is fired continuously while the user is talking. À mesure que le module de reconnaissance écoute, il fournit du texte sur ce qu’il est entendu jusqu’à présent.As the recognizer listens, it provides text of what it's heard so far.

Tout d’abord, abonnez-vous à l’événement DictationHypothesis :First, subscribe to the DictationHypothesis event:

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Gérez ensuite le rappel DictationHypothesis :Then handle the DictationHypothesis callback:

private void DictationRecognizer_DictationHypothesis(string text)
{
    // do something
}

DictationCompleteDictationComplete

Cet événement est déclenché lorsque le module de reconnaissance s’arrête, qu’il s’agisse de l’appel de Stop (), d’un délai d’attente ou d’une autre erreur.This event is fired when the recognizer stops, whether from Stop() being called, a timeout occurring, or some other error.

Tout d’abord, abonnez-vous à l’événement DictationComplete :First, subscribe to the DictationComplete event:

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Gérez ensuite le rappel DictationComplete :Then handle the DictationComplete callback:

private void DictationRecognizer_DictationComplete(DictationCompletionCause cause)
{
   // do something
}

DictationErrorDictationError

Cet événement est déclenché lorsqu’une erreur se produit.This event is fired when an error occurs.

Tout d’abord, abonnez-vous à l’événement DictationError :First, subscribe to the DictationError event:

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Gérez ensuite le rappel DictationError :Then handle the DictationError callback:

private void DictationRecognizer_DictationError(string error, int hresult)
{
    // do something
}

Une fois que vous avez souscrit et géré les événements de dictée qui vous intéressent, démarrez le module de reconnaissance de dictée pour commencer à recevoir des événements.Once you've subscribed and handled the dictation events that you care about, start the dictation recognizer to begin receiving events.

dictationRecognizer.Start();

Si vous ne souhaitez plus conserver les DictationRecognizer, vous devez vous désabonner des événements et supprimer le DictationRecognizer.If you no longer want to keep the DictationRecognizer around, you need to unsubscribe from the events and Dispose the DictationRecognizer.

dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult;
dictationRecognizer.DictationComplete -= DictationRecognizer_DictationComplete ;
dictationRecognizer.DictationHypothesis -= DictationRecognizer_DictationHypothesis ;
dictationRecognizer.DictationError -= DictationRecognizer_DictationError ;
dictationRecognizer.Dispose();

ConseilsTips

  • Les méthodes Start () et Stop () respectivement activent et désactivent la reconnaissance de la dictée.Start() and Stop() methods respectively enable and disable dictation recognition.
  • Une fois le module de reconnaissance terminé, il doit être supprimé à l’aide de la méthode Dispose () pour libérer les ressources qu’il utilise.Once done with the recognizer, it must be disposed using Dispose() method to release the resources it uses. Les ressources seront libérées automatiquement pendant la garbage collection à un coût de performances supplémentaire si elles ne sont pas libérées avant cela.It will release these resources automatically during garbage collection at an additional performance cost if they aren't released before that.
  • Les délais d’attente se produisent après un laps de temps défini.Timeouts occur after a set period of time. Vous pouvez vérifier ces délais d’attente dans l’événement DictationComplete.You can check for these timeouts in the DictationComplete event. Deux délais d’attente doivent être pris en compte :There are two timeouts to be aware of:
    1. Si le module de reconnaissance démarre et n’entend aucun audio pendant les cinq premières secondes, il expire.If the recognizer starts and doesn't hear any audio for the first five seconds, it will time out.
    2. Si le module de reconnaissance a donné un résultat, mais émet un silence pendant 20 secondes, il expire.If the recognizer has given a result, but then hears silence for 20 seconds, it will time out.

Utilisation de la reconnaissance et de la dictée des expressionsUsing both Phrase Recognition and Dictation

Si vous souhaitez utiliser la reconnaissance d’expression et la dictée dans votre application, vous devez l’arrêter complètement avant de pouvoir démarrer l’autre.If you want to use both phrase recognition and dictation in your app, you'll need to fully shut one down before you can start the other. Si vous avez plusieurs KeywordRecognizers en cours d’exécution, vous pouvez les arrêter en même temps avec :If you have multiple KeywordRecognizers running, you can shut them all down at once with:

PhraseRecognitionSystem.Shutdown();

Pour restaurer tous les reconnaisseurs à leur état précédent, après l’arrêt du DictationRecognizer, vous pouvez appeler :In order to restore all recognizers to their previous state, after the DictationRecognizer has stopped, you can call:

PhraseRecognitionSystem.Restart();

Vous pouvez aussi simplement démarrer un KeywordRecognizer, qui redémarrera également le PhraseRecognitionSystem.You could also just start a KeywordRecognizer, which will restart the PhraseRecognitionSystem as well.

Utilisation du programme d’assistance du microphoneUsing the microphone helper

La boîte à outils de réalité mixte sur GitHub contient une classe d’assistance de microphone qui permet aux développeurs de savoir s’il existe un microphone utilisable sur le système.The Mixed Reality Toolkit on GitHub contains a microphone helper class to hint at developers if there's a usable microphone on the system. Il s’agit là d’une utilisation pour déterminer si un microphone est présent sur le système avant d’illustrer des indicateurs d’interaction vocale dans l’application.One use for it's where one would want to check if there's microphone on system before showing any speech interaction hints in the application.

Le script d’assistance du microphone se trouve dans le dossier entrées/scripts/utilitaires.The microphone helper script can be found in the Input/Scripts/Utilities folder. Le référentiel GitHub contient également un petit exemple illustrant l’utilisation de l’application auxiliaire.The GitHub repo also contains a small sample demonstrating how to use the helper.

Entrée vocale dans le Toolkit de réalité mixteVoice input in Mixed Reality Toolkit

Vous trouverez les exemples de l’entrée vocale dans cette scène.You can find the examples of the voice input in this scene.

Point de contrôle de développement suivantNext Development Checkpoint

Si vous suivez le parcours du point de contrôle de développement Unity que nous avons disposé, vous allez maintenant découvrir les API et les fonctionnalités de la plateforme de réalité mixte :If you're following the Unity development checkpoint journey we've laid out, you're next task is exploring the Mixed Reality platform capabilities and APIs:

Vous pouvez revenir aux points de contrôle de développement Unity à tout moment.You can always go back to the Unity development checkpoints at any time.