Entrée vocale dans Unity

Attention

Avant de commencer, envisagez d’utiliser le plug-in Unity pour le Kit de développement logiciel (SDK) Cognitive Speech Services. Le plug-in offre de meilleurs résultats d’exactitude de la parole et un accès facile au décodage de la reconnaissance vocale, ainsi que des fonctionnalités vocales avancées telles que le dialogue, l’interaction basée sur l’intention, la traduction, la synthèse de texte en synthèse vocale et la reconnaissance vocale en langage naturel. Pour commencer, case activée l’exemple et la documentation.

Unity expose trois façons d’ajouter une entrée Voice à votre application Unity, dont les deux premières sont des types de PhraseRecognizer :

  • fournit KeywordRecognizer à votre application un tableau de commandes de chaîne à écouter
  • donne GrammarRecognizer à votre application un fichier SRGS définissant une grammaire spécifique à écouter
  • permet DictationRecognizer à votre application d’écouter n’importe quel mot et de fournir à l’utilisateur une note ou un autre affichage de sa parole

Notes

La dictée et la reconnaissance d’expressions ne peuvent pas être gérées en même temps. Si un GrammarRecognizer ou un KeywordRecognizer est actif, un DictationRecognizer ne peut pas être actif et vice versa.

Activation de la fonctionnalité pour Voice

La fonctionnalité Microphone doit être déclarée pour qu’une application utilise l’entrée Voice.

  1. Dans l’éditeur Unity, accédez à Modifier le > Lecteur paramètres > du projet
  2. Sélectionnez l’onglet Windows Store
  3. Dans la section Fonctionnalités des paramètres > de publication, case activée la fonctionnalité Microphone
  4. Accorder des autorisations à l’application pour l’accès au microphone sur votre appareil HoloLens
    • Vous serez invité à le faire au démarrage de l’appareil, mais si vous avez accidentellement cliqué sur « non », vous pouvez modifier les autorisations dans les paramètres de l’appareil

Reconnaissance d’expressions

Pour permettre à votre application d’écouter des expressions spécifiques prononcées par l’utilisateur, puis d’effectuer une action, vous devez :

  1. Spécifier les expressions à écouter à l’aide d’un KeywordRecognizer ou GrammarRecognizer
  2. Gérer l’événement OnPhraseRecognized et effectuer une action correspondant à l’expression reconnue

KeywordRecognizer

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

Nous aurons besoin de quelques instructions using pour enregistrer certaines frappes :

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

Ensuite, ajoutons quelques champs à votre classe pour stocker le dictionnaire de reconnaissance et d’action mot clé> :

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

Ajoutez maintenant une mot clé au dictionnaire, par exemple dans d’une Start() méthode. Nous ajoutons le mot clé « activer » dans cet exemple :

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

Créez le mot clé recognizer et indiquez-lui ce que nous voulons reconnaître :

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

Inscrivez-vous maintenant à l’événement OnPhraseRecognized

keywordRecognizer.OnPhraseRecognized += KeywordRecognizer_OnPhraseRecognized;

Voici un exemple de gestionnaire :

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 !

keywordRecognizer.Start();

GrammarRecognizer

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

GrammarRecognizer est utilisé si vous spécifiez votre grammaire de reconnaissance à l’aide de SRGS. Cela peut être utile si votre application comporte plus que quelques mots clés, si vous souhaitez reconnaître des expressions plus complexes ou si vous souhaitez activer et désactiver facilement des ensembles de commandes. Consultez : Créer des grammaires à l’aide de SRGS XML pour obtenir des informations sur le format de fichier.

Une fois que vous avez votre grammaire SRGS et qu’elle se trouve dans votre projet dans un dossier StreamingAssets :

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

Créez un GrammarRecognizer et transmettez-lui le chemin d’accès à votre fichier SRGS :

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

Inscrivez-vous maintenant à l’événement OnPhraseRecognized

grammarRecognizer.OnPhraseRecognized += grammarRecognizer_OnPhraseRecognized;

Vous obtiendrez un rappel contenant des informations spécifiées dans votre grammaire SRGS, que vous pouvez gérer de manière appropriée. La plupart des informations importantes seront fournies dans le semanticMeanings tableau.

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

Enfin, commencez à reconnaître !

grammarRecognizer.Start();

Dictation

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

Utilisez pour DictationRecognizer convertir la parole de l’utilisateur en texte. DictationRecognizer expose la fonctionnalité de dictée et prend en charge l’inscription et l’écoute des événements d’hypothèses et d’expressions terminées, afin que vous puissiez envoyer des commentaires à votre utilisateur pendant qu’il parle et après. Start() et Stop() les méthodes activent et désactivent respectivement la reconnaissance de dictée. Une fois le module de reconnaissance terminé, il doit être supprimé à l’aide Dispose() de pour libérer les ressources qu’il utilise. Il libère automatiquement ces ressources pendant le garbage collection à un coût de performances supplémentaire si elles ne sont pas publiées avant cela.

Il n’y a que quelques étapes nécessaires pour commencer à utiliser la dictée :

  1. Créer un nouveau DictationRecognizer
  2. Gérer les événements de dictée
  3. Démarrer DictationRecognizer

Activation de la fonctionnalité de dictée

Les fonctionnalités du client Internet et du microphone doivent être déclarées pour qu’une application utilise la dictée :

  1. Dans l’éditeur Unity, accédez à Modifier le > Lecteur paramètres > du projet
  2. Sélectionnez dans l’onglet Windows Store
  3. Dans la section Fonctionnalités des paramètres > de publication, case activée la fonctionnalité InternetClient
    • Éventuellement, si vous n’avez pas encore activé le microphone, case activée la fonctionnalité Microphone
  4. Accordez des autorisations à l’application pour l’accès au microphone sur votre appareil HoloLens si vous ne l’avez pas déjà fait
    • Vous serez invité à le faire au démarrage de l’appareil, mais si vous avez accidentellement cliqué sur « non », vous pouvez modifier les autorisations dans les paramètres de l’appareil

DictationRecognizer

Créez un DictationRecognizer comme suit :

dictationRecognizer = new DictationRecognizer();

Quatre événements de dictée peuvent être abonnés et gérés pour implémenter le comportement de dictée.

  1. DictationResult
  2. DictationComplete
  3. DictationHypothesis
  4. DictationError

DictationResult

Cet événement est déclenché après les pauses de l’utilisateur, généralement à la fin d’une phrase. La chaîne reconnue complète est retournée ici.

Tout d’abord, abonnez-vous à l’événement DictationResult :

dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;

Gérez ensuite le rappel DictationResult :

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

DictéeHypothèse

Cet événement est déclenché en continu pendant que l’utilisateur parle. À mesure que le module de reconnaissance écoute, il fournit le texte de ce qu’il a entendu jusqu’à présent.

Tout d’abord, abonnez-vous à l’événement DictationHypothesis :

dictationRecognizer.DictationHypothesis += DictationRecognizer_DictationHypothesis;

Ensuite, gérez le rappel DictationHypothesis :

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

DictationComplete

Cet événement est déclenché lorsque le module de reconnaissance s’arrête, que ce soit à partir de l’appel de Stop(), d’un délai d’expiration ou d’une autre erreur.

Tout d’abord, abonnez-vous à l’événement DictationComplete :

dictationRecognizer.DictationComplete += DictationRecognizer_DictationComplete;

Gérez ensuite le rappel DictationComplete :

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

DictationError

Cet événement est déclenché lorsqu’une erreur se produit.

Tout d’abord, abonnez-vous à l’événement DictationError :

dictationRecognizer.DictationError += DictationRecognizer_DictationError;

Gérez ensuite le rappel DictationError :

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 les événements.

dictationRecognizer.Start();

Si vous ne souhaitez plus conserver le DictationRecognizer, vous devez vous désabonner des événements et supprimer le DictationRecognizer.

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

Conseils

  • Start() et Stop() les méthodes activent et désactivent respectivement la reconnaissance de dictée.
  • Une fois le module de reconnaissance terminé, il doit être supprimé à l’aide Dispose() de pour libérer les ressources qu’il utilise. Il libère automatiquement ces ressources pendant le garbage collection à un coût de performances supplémentaire si elles ne sont pas publiées avant cela.
  • Les délais d’expiration se produisent après une période définie. Vous pouvez case activée pour ces délais d’expiration dans l’événementDictationComplete. Il existe deux délais d’expiration à connaître :
    1. Si le module de reconnaissance démarre et n’entend pas d’audio pendant les cinq premières secondes, il expire.
    2. Si le module de reconnaissance a donné un résultat, mais qu’il entend ensuite le silence pendant 20 secondes, il expire.

Utilisation de la reconnaissance d’expressions et de la dictée

Si vous souhaitez utiliser la reconnaissance d’expressions et la dictée dans votre application, vous devez arrêter complètement l’une d’elles avant de pouvoir démarrer l’autre. Si vous avez plusieurs KeywordRecognizers en cours d’exécution, vous pouvez les arrêter tous à la fois avec :

PhraseRecognitionSystem.Shutdown();

Vous pouvez appeler Restart() pour restaurer tous les modules de reconnaissance à leur état précédent après l’arrêt de DictationRecognizer :

PhraseRecognitionSystem.Restart();

Vous pouvez également simplement démarrer un KeywordRecognizer, qui redémarrera également PhraseRecognitionSystem.

Entrée vocale dans Mixed Reality Toolkit

Vous trouverez des exemples MRTK pour l’entrée vocale dans les scènes de démonstration suivantes :

Point de contrôle de développement suivant

Si vous suivez le parcours du point de contrôle de développement Unity que nous avons mis en place, la tâche suivante consiste à explorer les api et fonctionnalités de la plateforme Mixed Reality :

Vous pouvez revenir aux points de contrôle de développement Unity à tout moment.