Share via


HoloLens (1ère génération) et Azure 301 : traduction linguistique


Notes

Les tutoriels Mixed Reality Academy ont été conçus pour les appareils HoloLens (1re génération) et les casques immersifs de réalité mixte. Nous estimons qu’il est important de laisser ces tutoriels à la disposition des développeurs qui recherchent encore des conseils pour développer des applications sur ces appareils. Notez que ces tutoriels ne sont pas mis à jour avec les derniers ensembles d’outils ou interactions utilisés pour HoloLens 2. Ils sont fournis dans le but de fonctionner sur les appareils pris en charge. Il y aura une nouvelle série de tutoriels qui seront publiés à l’avenir qui montreront comment développer pour HoloLens 2. Cet avis sera mis à jour avec un lien vers ces tutoriels lorsqu’ils seront publiés.


Dans ce cours, vous allez apprendre à ajouter des fonctionnalités de traduction à une application de réalité mixte à l’aide d’Azure Cognitive Services, avec l’API Translator Text.

Produit final

L’API Translator Text est un service de traduction qui fonctionne en quasi temps réel. Le service est basé sur le cloud et, à l’aide d’un appel d’API REST, une application peut utiliser la technologie de traduction automatique neuronale pour traduire du texte dans une autre langue. Pour plus d’informations, consultez la page API Azure Translator Text.

À la fin de ce cours, vous aurez une application de réalité mixte qui sera en mesure d’effectuer les opérations suivantes :

  1. L’utilisateur parle dans un microphone connecté à un casque immersif (VR) (ou au microphone intégré d’HoloLens).
  2. L’application capture la dictée et l’envoie à l’API Azure Translator Text.
  3. Le résultat de la traduction s’affiche dans un groupe d’interface utilisateur simple dans la scène Unity.

Ce cours vous apprendra à obtenir les résultats du service Translator dans un exemple d’application Unity. Il vous appartient d’appliquer ces concepts à une application personnalisée que vous créez peut-être.

Prise en charge des appareils

Cours HoloLens Casques immersifs
Réalité mixte - Azure - Cours 301 : Traduction ✔️ ✔️

Notes

Bien que ce cours se concentre principalement sur Windows Mixed Reality casques immersifs (VR), vous pouvez également appliquer ce que vous avez appris dans ce cours à Microsoft HoloLens. Au fur et à mesure que vous suivez le cours, vous verrez des notes sur les modifications que vous devrez peut-être utiliser pour prendre en charge HoloLens. Lorsque vous utilisez HoloLens, vous pouvez remarquer un certain écho lors de la capture vocale.

Prérequis

Notes

Ce tutoriel est conçu pour les développeurs qui ont une expérience de base avec Unity et C#. Sachez également que les conditions préalables et les instructions écrites contenues dans ce document représentent ce qui a été testé et vérifié au moment de la rédaction (mai 2018). Vous êtes libre d’utiliser les logiciels les plus récents, comme indiqué dans l’article Installer les outils , mais il ne faut pas supposer que les informations de ce cours correspondront parfaitement à ce que vous trouverez dans les logiciels plus récents que ceux répertoriés ci-dessous.

Nous vous recommandons les matériels et logiciels suivants pour ce cours :

Avant de commencer

  • Pour éviter de rencontrer des problèmes de génération de ce projet, il est fortement recommandé de créer le projet mentionné dans ce didacticiel dans un dossier racine ou proche de la racine (les chemins d’accès de dossiers longs peuvent provoquer des problèmes au moment de la génération).

  • Le code de ce tutoriel vous permet d’enregistrer à partir du périphérique microphone par défaut connecté à votre PC. Assurez-vous que l’appareil microphone par défaut est défini sur l’appareil que vous prévoyez d’utiliser pour capturer votre voix.

  • Pour permettre à votre PC d’activer la dictée, accédez à Paramètres Parole > de confidentialité > , entrée manuscrite & saisie, puis sélectionnez le bouton Activer les services vocaux et les suggestions de saisie.

  • Si vous utilisez un microphone et un casque connecté à (ou intégré à) votre casque, assurez-vous que l’option « Quand je porte mon casque, basculez vers le micro du casque » est activée dans Paramètres > De réalité > mixte Audio et voix.

    Paramètres de réalité mixte

    Paramètre microphone

Avertissement

Sachez que si vous développez un casque immersif pour ce labo, vous pouvez rencontrer des problèmes de périphérique de sortie audio. Cela est dû à un problème avec Unity, qui est résolu dans les versions ultérieures d’Unity (Unity 2018.2). Le problème empêche Unity de modifier le périphérique de sortie audio par défaut au moment de l’exécution. Pour contourner ce problème, vérifiez que vous avez effectué les étapes ci-dessus, puis fermez et rouvrez l’éditeur lorsque ce problème se présente.

Chapitre 1 : Portail Azure

Pour utiliser l’API Azure Translator, vous devez configurer une instance du service à mettre à la disposition de votre application.

  1. Connectez-vous au portail Azure.

    Notes

    Si vous n’avez pas encore de compte Azure, vous devez en créer un. Si vous suivez ce tutoriel dans une situation de classe ou de laboratoire, demandez à votre instructeur ou à l’un des surveillants de l’aide pour configurer votre nouveau compte.

  2. Une fois connecté, cliquez sur Nouveau dans le coin supérieur gauche et recherchez « API Translator Text ». Sélectionnez Entrée.

    Nouvelle ressource

    Notes

    Le mot Nouveau a peut-être été remplacé par Créer une ressource, dans les portails plus récents.

  3. La nouvelle page fournit une description du service d’API Translator Text . En bas à gauche de cette page, sélectionnez le bouton Créer pour créer une association avec ce service.

    Créer le service d’API Translator Text

  4. Une fois que vous avez cliqué sur Créer :

    1. Insérez le nom souhaité pour ce service instance.

    2. Sélectionnez un abonnement approprié.

    3. Sélectionnez le niveau tarifaire qui vous convient. Si c’est la première fois que vous créez un service De texte Translator Text, un niveau gratuit (nommé F0) doit être disponible.

    4. Choisissez un groupe de ressources ou créez-en un. Un groupe de ressources permet de surveiller, de contrôler l’accès, de provisionner et de gérer la facturation pour une collection de ressources Azure. Il est recommandé de conserver tous les services Azure associés à un seul projet (par exemple, ces labos) sous un groupe de ressources commun.

      Si vous souhaitez en savoir plus sur les groupes de ressources Azure, consultez l’article sur les groupes de ressources.

    5. Déterminez l’emplacement de votre groupe de ressources (si vous créez un groupe de ressources). L’emplacement est idéalement situé dans la région où l’application s’exécuterait. Certaines ressources Azure sont disponibles uniquement dans certaines régions.

    6. Vous devez également confirmer que vous avez bien compris les conditions générales appliquées à ce service.

    7. Sélectionnez Create (Créer).

      Sélectionnez le bouton Créer.

  5. Une fois que vous avez cliqué sur Créer, vous devrez attendre que le service soit créé, ce qui peut prendre une minute.

  6. Une notification s’affiche dans le portail une fois le service instance créé.

    Notification de création de service Azure

  7. Cliquez sur la notification pour explorer votre nouvelle instance de service.

    Accédez à la fenêtre contextuelle des ressources.

  8. Cliquez sur le bouton Accéder à la ressource dans la notification pour explorer votre nouvelle instance de service. Vous serez redirigé vers votre nouvelle instance du service d’API Translator Text.

    Page du service d’API Translator Text

  9. Dans ce tutoriel, votre application doit passer des appels à votre service, ce qui est effectué à l’aide de la clé d’abonnement de votre service.

  10. Dans la page Démarrage rapide de votre service de traduction de texte Translator Text , accédez à la première étape, Saisissez vos clés, puis cliquez sur Clés (vous pouvez également cliquer sur les clés de lien hypertexte bleues, situées dans le menu de navigation Services, indiqué par l’icône de clé). Cela révélera vos clés de service.

  11. Prenez une copie de l’une des clés affichées, car vous en aurez besoin plus loin dans votre projet.

Chapitre 2 : Configurer le projet Unity

Configurez et testez votre casque immersif de réalité mixte.

Notes

Vous n’aurez pas besoin de contrôleurs de mouvement pour ce cours. Si vous avez besoin de support pour configurer un casque immersif, suivez ces étapes.

Voici une configuration classique pour le développement avec la réalité mixte et, en tant que telle, est un bon modèle pour d’autres projets :

  1. Ouvrez Unity , puis cliquez sur Nouveau.

    Démarrez un nouveau projet Unity.

  2. Vous devez maintenant fournir un nom de projet Unity. Insérez MR_Translation. Vérifiez que le type de projet est défini sur 3D. Définissez l’emplacement sur un emplacement approprié pour vous (n’oubliez pas qu’il est préférable de se rapprocher des répertoires racine). Cliquez ensuite sur Créer un projet.

    Fournissez des détails pour le nouveau projet Unity.

  3. Une fois Unity ouvert, il est utile de vérifier que l’éditeur de script par défaut est défini sur Visual Studio. Accédez à Modifier les > préférences , puis, dans la nouvelle fenêtre, accédez à Outils externes. Remplacez Éditeur de script externe par Visual Studio 2017. Fermez la fenêtre Préférences.

    Mettre à jour la préférence de l’éditeur de script.

  4. Ensuite, accédez à Paramètres de génération de fichiers > et basculez la plateforme sur plateforme Windows universelle, en cliquant sur le bouton Changer de plateforme.

    Fenêtre Paramètres de build, basculer la plateforme vers UWP.

  5. Accédez à Paramètres > de génération de fichiers et assurez-vous que :

    1. L’appareil cible est défini sur N’importe quel appareil.

      Pour Microsoft HoloLens, définissez Appareil cible sur HoloLens.

    2. Le type de build est défini sur D3D

    3. Le KIT DE DÉVELOPPEMENT LOGICIEL (SDK) est défini sur Dernier installé

    4. La version de Visual Studio est définie sur Dernière installation

    5. Générer et exécuter est défini sur Ordinateur local

    6. Enregistrez la scène et ajoutez-la à la build.

      1. Pour ce faire, sélectionnez Ajouter des scènes ouvertes. Une fenêtre d’enregistrement s’affiche.

        Cliquez sur le bouton Ajouter des scènes ouvertes

      2. Créez un dossier pour cette scène et toute autre scène future, puis sélectionnez le bouton Nouveau dossier pour créer un dossier, nommez-le Scènes.

        Créer un dossier de scripts

      3. Ouvrez votre dossier Scenes nouvellement créé, puis dans le champ Nom de fichier : texte, tapez MR_TranslationScene, puis appuyez sur Enregistrer.

        Donnez un nom à la nouvelle scène.

        N’oubliez pas que vous devez enregistrer vos scènes Unity dans le dossier Assets , car elles doivent être associées au projet Unity. La création du dossier scenes (et d’autres dossiers similaires) est un moyen classique de structurer un projet Unity.

    7. Les paramètres restants, dans Paramètres de build, doivent être conservés par défaut pour l’instant.

  6. Dans la fenêtre Paramètres de build, cliquez sur le bouton Paramètres du lecteur pour ouvrir le panneau associé dans l’espace où se trouve l’inspecteur.

    Ouvrez les paramètres du lecteur.

  7. Dans ce panneau, quelques paramètres doivent être vérifiés :

    1. Sous l’onglet Autres paramètres :

      1. La version du runtime de script doit être stable (équivalent.NET 3.5).

      2. Le serveur principal de script doit être .NET

      3. Le niveau de compatibilité de l’API doit être .NET 4.6

        Mettez à jour d’autres paramètres.

    2. Sous l’onglet Paramètres de publication, sous Fonctionnalités, case activée :

      1. InternetClient

      2. Microphone

        Mise à jour des paramètres de publication.

    3. Plus bas dans le panneau, dans Paramètres XR (situé sous Paramètres de publication), cochez Réalité virtuelle prise en charge, assurez-vous que le Kit de développement logiciel (SDK) Windows Mixed Reality est ajouté.

      Mettez à jour les paramètres X R.

  8. De retour dans les paramètres de build, les projets Unity C# ne sont plus grisés ; cochez la case en regard de ceci.

  9. Fermez la fenêtre Build Settings.

  10. Enregistrez votre scène et votre projet (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Chapitre 3 : Configuration de l’appareil photo principal

Important

Si vous souhaitez ignorer le composant Unity Set up de ce cours et continuer directement dans le code, n’hésitez pas à télécharger ce fichier .unitypackage, à l’importer dans votre projet en tant que package personnalisé, puis à continuer à partir du chapitre 5. Vous devez toujours créer un projet Unity.

  1. Dans le panneau hiérarchie, vous trouverez un objet appelé Main Camera, cet objet représente votre point de vue « tête » une fois que vous êtes « à l’intérieur » de votre application.

  2. Avec le tableau de bord Unity devant vous, sélectionnez l’objet Main Camera GameObject. Vous remarquerez que le panneau d’inspecteur (généralement situé à droite, dans le tableau de bord) affiche les différents composants de ce GameObject, avec Transformer en haut, suivi de Caméra et d’autres composants. Vous devez réinitialiser la transformation de la caméra principale pour qu’elle soit correctement positionnée.

  3. Pour ce faire, sélectionnez l’icône Engrenage en regard du composant Transformation de l’appareil photo, puis sélectionnez Réinitialiser.

    Réinitialisez la transformation de l’appareil photo principal.

  4. Le composant Transform doit alors se présenter comme suit :

    1. La position est définie sur 0, 0, 0

    2. La rotation est définie sur 0, 0, 0

    3. Et l’échelle est définie sur 1, 1, 1

      Transformer les informations pour l’appareil photo

  5. Ensuite, avec l’objet Main Camera sélectionné, consultez le bouton Ajouter un composant situé tout en bas du panneau de l’inspecteur.

  6. Sélectionnez ce bouton, puis recherchez (en tapant Audio Source dans le champ de recherche ou en parcourant les sections) le composant appelé Source audio , comme indiqué ci-dessous, puis sélectionnez-le (appuyez sur Entrée sur celui-ci fonctionne également).

  7. Un composant Source audio sera ajouté à la caméra principale, comme illustré ci-dessous.

    Ajoutez un composant Audio Source.

    Notes

    Pour Microsoft HoloLens, vous devez également modifier les éléments suivants, qui font partie du composant Caméra de votre appareil photo principal :

    • Effacer les indicateurs : Couleur unie.
    • Fond 'Black, Alpha 0' – Hex color : #000000000.

Chapitre 4 : Configurer le canevas de débogage

Pour afficher l’entrée et la sortie de la traduction, une interface utilisateur de base doit être créée. Pour ce cours, vous allez créer un objet d’interface utilisateur Canvas, avec plusieurs objets « Texte » pour afficher les données.

  1. Cliquez avec le bouton droit dans une zone vide du panneau hiérarchie, sous Interface utilisateur, ajoutez un canevas.

    Ajoutez un nouvel objet d’interface utilisateur Canvas.

  2. Avec l’objet Canvas sélectionné, dans le panneau de l’inspecteur (dans le composant « Canevas », remplacez Mode de rendu parEspace mondial.

  3. Ensuite, modifiez les paramètres suivants dans la transformation rect du panneau d’inspecteur :

    1. POS - X 0 Y 0 Z 40

    2. Largeur - 500

    3. Hauteur - 300

    4. Échelle - X 0,13 Y 0,13 Z 0,13

      Mettez à jour la transformation rect pour le canevas.

  4. Cliquez avec le bouton droit sur le canevas dans le panneau hiérarchie, sous Interface utilisateur, puis ajoutez un panneau. Ce panneau fournit un arrière-plan au texte que vous allez afficher dans la scène.

  5. Cliquez avec le bouton droit sur le panneau dans le panneau hiérarchie, sous Interface utilisateur, puis ajoutez un objet Text. Répétez le même processus jusqu’à ce que vous ayez créé quatre objets Texte d’interface utilisateur au total (Conseil : si vous avez le premier objet « Texte » sélectionné, vous pouvez simplement appuyer sur « Ctrl » + « D », pour le dupliquer, jusqu’à ce que vous en ayez quatre au total).

  6. Pour chaque objet Text, sélectionnez-le et utilisez les tableaux ci-dessous pour définir les paramètres dans le panneau Inspector.

    1. Pour le composant Rect Transform :

      Nom Transformer - Position Largeur Hauteur
      MicrophoneStatusLabel X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      DictationLabel X -80 Y -30 Z 0 300 30
      TranslationResultLabel X -80 Y -90 Z 0 300 30
    2. Pour le composant Text (Script) :

      Nom Texte Taille de police
      MicrophoneStatusLabel État du microphone : 20
      AzureResponseLabel Azure Web Response 20
      DictationLabel Vous venez de dire : 20
      TranslationResultLabel Traduction : 20

      Entrez les valeurs correspondantes pour les étiquettes d’interface utilisateur.

    3. En outre, définissez le style de police en gras. Cela facilite la lecture du texte.

      Police en gras.

  7. Pour chaque objet Text de l’interface utilisateur créé dans le chapitre 5, créez un objet Texte d’interface utilisateurenfant. Ces enfants affichent la sortie de l’application. Créez des objets enfants en cliquant avec le bouton droit sur votre parent prévu (par exemple , MicrophoneStatusLabel), puis sélectionnez Interface utilisateur , puis Sélectionnez Texte.

  8. Pour chacun de ces enfants, sélectionnez-le et utilisez les tableaux ci-dessous pour définir les paramètres dans le panneau d’inspecteur.

    1. Pour le composant Rect Transform :

      Nom Transformer - Position Largeur Hauteur
      MicrophoneStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      DictationText X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. Pour le composant Text (Script) :

      Nom Texte Taille de police
      MicrophoneStatusText ?? 20
      AzureResponseText ?? 20
      DictationText ?? 20
      TranslationResultText ?? 20
  9. Ensuite, sélectionnez l’option d’alignement « au centre » pour chaque composant de texte :

    aligner le texte.

  10. Pour vous assurer que les objets Texte de l’interface utilisateur enfants sont facilement lisibles, modifiez leur couleur. Pour ce faire, cliquez sur la barre (actuellement « Noir ») en regard de Couleur.

    Entrez les valeurs correspondantes pour les sorties de texte de l’interface utilisateur.

  11. Ensuite, dans la nouvelle fenêtre Couleur , petite, remplacez la couleur hexadécimal par : 0032EAFF

    Mettez à jour la couleur en bleu.

  12. Voici à quoi doit ressembler l’interface utilisateur .

    1. Dans le panneau Hiérarchie :

      Avoir une hiérarchie dans la structure fournie.

    2. Dans les vues Scène et Jeu :

      Avoir les vues de scène et de jeu dans la même structure.

Chapitre 5 – Créer la classe Results

Le premier script que vous devez créer est la classe Results , qui est chargée de fournir un moyen de voir les résultats de la traduction. La classe stocke et affiche les éléments suivants :

  • Résultat de la réponse d’Azure.
  • Microphone status.
  • Résultat de la dictée (voix en texte).
  • Résultat de la traduction.

Pour créer cette classe :

  1. Cliquez avec le bouton droit dans le volet Projet, puis sur Créer un > dossier. Nommez le dossier Scripts.

    Créez le dossier scripts.

    Ouvrez le dossier scripts.

  2. Avec le dossier Scripts créé, double-cliquez dessus pour l’ouvrir. Ensuite, dans ce dossier, cliquez avec le bouton droit, puis sélectionnez Créer > , puis Script C#. Nommez le script Results.

    Créez le premier script.

  3. Double-cliquez sur le nouveau script Résultats pour l’ouvrir avec Visual Studio.

  4. Insérez les espaces de noms suivants :

        using UnityEngine;
        using UnityEngine.UI;
    
  5. À l’intérieur de la classe, insérez les variables suivantes :

        public static Results instance;
    
        [HideInInspector] 
        public string azureResponseCode;
    
        [HideInInspector] 
        public string translationResult;
    
        [HideInInspector] 
        public string dictationResult;
    
        [HideInInspector] 
        public string micStatus;
    
        public Text microphoneStatusText;
    
        public Text azureResponseText;
    
        public Text dictationText;
    
        public Text translationResultText;
    
  6. Ajoutez ensuite la méthode Awake(), qui sera appelée lors de l’initialisation de la classe.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Enfin, ajoutez les méthodes qui sont responsables de la sortie des différentes informations de résultats dans l’interface utilisateur.

        /// <summary>
        /// Stores the Azure response value in the static instance of Result class.
        /// </summary>
        public void SetAzureResponse(string result)
        {
            azureResponseCode = result;
            azureResponseText.text = azureResponseCode;
        }
    
        /// <summary>
        /// Stores the translated result from dictation in the static instance of Result class. 
        /// </summary>
        public void SetDictationResult(string result)
        {
            dictationResult = result;
            dictationText.text = dictationResult;
        }
    
        /// <summary>
        /// Stores the translated result from Azure Service in the static instance of Result class. 
        /// </summary>
        public void SetTranslatedResult(string result)
        {
            translationResult = result;
            translationResultText.text = translationResult;
        }
    
        /// <summary>
        /// Stores the status of the Microphone in the static instance of Result class. 
        /// </summary>
        public void SetMicrophoneStatus(string result)
        {
            micStatus = result;
            microphoneStatusText.text = micStatus;
        }
    
  8. Veillez à enregistrer vos modifications dans Visual Studio avant de revenir à Unity.

Chapitre 6 : Créer la classe MicrophoneManager

La deuxième classe que vous allez créer est le MicrophoneManager.

Cette classe est responsable des opérations suivantes :

  • Détection du périphérique d’enregistrement attaché au casque ou à l’ordinateur (selon la valeur par défaut).
  • Capturez l’audio (voix) et utilisez la dictée pour le stocker sous forme de chaîne.
  • Une fois la voix suspendue, envoyez la dictée à la classe Translator.
  • Hébergez une méthode qui peut arrêter la capture vocale si vous le souhaitez.

Pour créer cette classe :

  1. Double-cliquez sur le dossier Scripts pour l’ouvrir.

  2. Cliquez avec le bouton droit dans le dossier Scripts , puis cliquez sur Créer un > script C#. Nommez le script MicrophoneManager.

  3. Double-cliquez sur le nouveau script pour l’ouvrir avec Visual Studio.

  4. Mettez à jour les espaces de noms pour qu’ils soient identiques à ce qui suit, en haut de la classe MicrophoneManager :

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Ensuite, ajoutez les variables suivantes à l’intérieur de la classe MicrophoneManager :

        // Help to access instance of this object 
        public static MicrophoneManager instance; 
    
        // AudioSource component, provides access to mic 
        private AudioSource audioSource; 
    
        // Flag indicating mic detection 
        private bool microphoneDetected; 
    
        // Component converting speech to text 
        private DictationRecognizer dictationRecognizer; 
    
  6. Le code pour les méthodes Awake() et Start() doit maintenant être ajouté. Ceux-ci seront appelés lorsque la classe initialise :

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this; 
        } 
    
        void Start() 
        { 
            //Use Unity Microphone class to detect devices and setup AudioSource 
            if(Microphone.devices.Length > 0) 
            { 
                Results.instance.SetMicrophoneStatus("Initialising..."); 
                audioSource = GetComponent<AudioSource>(); 
                microphoneDetected = true; 
            } 
            else 
            { 
                Results.instance.SetMicrophoneStatus("No Microphone detected"); 
            } 
        } 
    
  7. Vous pouvez supprimer la méthode Update(), car cette classe ne l’utilisera pas.

  8. Vous avez maintenant besoin des méthodes utilisées par l’application pour démarrer et arrêter la capture vocale, et la passer à la classe Translator , que vous allez bientôt générer. Copiez le code suivant et collez-le sous la méthode Start().

        /// <summary> 
        /// Start microphone capture. Debugging message is delivered to the Results class. 
        /// </summary> 
        public void StartCapturingAudio() 
        { 
            if(microphoneDetected) 
            {               
                // Start dictation 
                dictationRecognizer = new DictationRecognizer(); 
                dictationRecognizer.DictationResult += DictationRecognizer_DictationResult; 
                dictationRecognizer.Start(); 
    
                // Update UI with mic status 
                Results.instance.SetMicrophoneStatus("Capturing..."); 
            }      
        } 
    
        /// <summary> 
        /// Stop microphone capture. Debugging message is delivered to the Results class. 
        /// </summary> 
        public void StopCapturingAudio() 
        { 
            Results.instance.SetMicrophoneStatus("Mic sleeping"); 
            Microphone.End(null); 
            dictationRecognizer.DictationResult -= DictationRecognizer_DictationResult; 
            dictationRecognizer.Dispose(); 
        }
    

    Conseil

    Bien que cette application ne l’utilise pas, la méthode StopCapturingAudio() a également été fournie ici, si vous souhaitez implémenter la possibilité d’arrêter la capture audio dans votre application.

  9. Vous devez maintenant ajouter un gestionnaire de dictée qui sera appelé lorsque la voix s’arrête. Cette méthode transmet ensuite le texte dicté à la classe Translator .

        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// Debugging message is delivered to the Results class.
        /// </summary>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // Update UI with dictation captured
            Results.instance.SetDictationResult(text);
    
            // Start the coroutine that process the dictation through Azure 
            StartCoroutine(Translator.instance.TranslateWithUnityNetworking(text));   
        }
    
  10. Veillez à enregistrer vos modifications dans Visual Studio avant de revenir à Unity.

Avertissement

À ce stade, vous remarquerez qu’une erreur s’affiche dans le panneau console de l’éditeur Unity (« Le nom 'Translator' n’existe pas... »). En effet, le code fait référence à la classe Translator , que vous allez créer dans le chapitre suivant.

Chapitre 7 : Appeler vers Azure et le service de traduction

Le dernier script que vous devez créer est la classe Translator .

Cette classe est responsable des opérations suivantes :

  • Authentification de l’application auprès d’Azure, en échange d’un jeton d’authentification.
  • Utilisez le jeton d’authentification pour envoyer du texte (reçu de la classe MicrophoneManager ) à traduire.
  • Recevez le résultat traduit et passez-le à la classe Results à visualiser dans l’interface utilisateur.

Pour créer cette classe :

  1. Accédez au dossier Scripts que vous avez créé précédemment.

  2. Cliquez avec le bouton droit dans le volet Projet, Créer un > script C#. Appelez le script Translator.

  3. Double-cliquez sur le nouveau script Translator pour l’ouvrir avec Visual Studio.

  4. Ajoutez les espaces de noms suivants en haut du fichier :

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Ajoutez ensuite les variables suivantes à l’intérieur de la classe Translator :

        public static Translator instance; 
        private string translationTokenEndpoint = "https://api.cognitive.microsoft.com/sts/v1.0/issueToken"; 
        private string translationTextEndpoint = "https://api.microsofttranslator.com/v2/http.svc/Translate?"; 
        private const string ocpApimSubscriptionKeyHeader = "Ocp-Apim-Subscription-Key"; 
    
        //Substitute the value of authorizationKey with your own Key 
        private const string authorizationKey = "-InsertYourAuthKeyHere-"; 
        private string authorizationToken; 
    
        // languages set below are: 
        // English 
        // French 
        // Italian 
        // Japanese 
        // Korean 
        public enum Languages { en, fr, it, ja, ko }; 
        public Languages from = Languages.en; 
        public Languages to = Languages.it; 
    

    Notes

    • Les langues insérées dans l’énumération des langues ne sont que des exemples. N’hésitez pas à en ajouter d’autres si vous le souhaitez ; l’API prend en charge plus de 60 langues (y compris Klingon) !
    • Il existe une page plus interactive couvrant les langues disponibles, mais sachez que la page ne semble fonctionner que lorsque la langue du site est définie sur « » (et le site Microsoft sera probablement redirigé vers votre langue native). Vous pouvez modifier la langue du site en bas de la page ou en modifiant l’URL.
    • La valeur authorizationKey , dans l’extrait de code ci-dessus, doit être la clé que vous avez reçue lorsque vous vous êtes abonné à l’API Azure Translator Text. Cela a été abordé dans le chapitre 1.
  6. Le code pour les méthodes Awake() et Start() doit maintenant être ajouté.

  7. Dans ce cas, le code effectue un appel à Azure à l’aide de la clé d’autorisation pour obtenir un jeton.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton  
            instance = this; 
        } 
    
        // Use this for initialization  
        void Start() 
        { 
            // When the application starts, request an auth token 
            StartCoroutine("GetTokenCoroutine", authorizationKey); 
        }
    

    Notes

    Le jeton expire au bout de 10 minutes. Selon le scénario de votre application, vous devrez peut-être effectuer le même appel de coroutine plusieurs fois.

  8. La coroutine permettant d’obtenir le jeton est la suivante :

        /// <summary> 
        /// Request a Token from Azure Translation Service by providing the access key. 
        /// Debugging result is delivered to the Results class. 
        /// </summary> 
        private IEnumerator GetTokenCoroutine(string key)
        {
            if (string.IsNullOrEmpty(key))
            {
                throw new InvalidOperationException("Authorization key not set.");
            }
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Post(translationTokenEndpoint, string.Empty))
            {
                unityWebRequest.SetRequestHeader("Ocp-Apim-Subscription-Key", key);
                yield return unityWebRequest.SendWebRequest();
    
                long responseCode = unityWebRequest.responseCode;
    
                // Update the UI with the response code 
                Results.instance.SetAzureResponse(responseCode.ToString());
    
                if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
                {
                    Results.instance.azureResponseText.text = unityWebRequest.error;
                    yield return null;
                }
                else
                {
                    authorizationToken = unityWebRequest.downloadHandler.text;
                }
            }
    
            // After receiving the token, begin capturing Audio with the MicrophoneManager Class 
            MicrophoneManager.instance.StartCapturingAudio();
        }
    

    Avertissement

    Si vous modifiez le nom de la méthode IEnumerator GetTokenCoroutine(), vous devez mettre à jour les valeurs de chaîne d’appel StartCoroutine et StopCoroutine dans le code ci-dessus. Conformément à la documentation Unity, pour arrêter une Coroutine spécifique, vous devez utiliser la méthode string value.

  9. Ensuite, ajoutez la coroutine (avec une méthode de flux de support juste en dessous) pour obtenir la traduction du texte reçu par la classe MicrophoneManager . Ce code crée une chaîne de requête à envoyer à l’API Azure Translator Text, puis utilise la classe Unity UnityWebRequest interne pour effectuer un appel « Get » au point de terminaison avec la chaîne de requête. Le résultat est ensuite utilisé pour définir la traduction dans votre objet Results. Le code ci-dessous montre l’implémentation :

        /// <summary> 
        /// Request a translation from Azure Translation Service by providing a string.  
        /// Debugging result is delivered to the Results class. 
        /// </summary> 
        public IEnumerator TranslateWithUnityNetworking(string text)
        {
            // This query string will contain the parameters for the translation 
            string queryString = string.Concat("text=", Uri.EscapeDataString(text), "&from=", from, "&to=", to);
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Get(translationTextEndpoint + queryString))
            {
                unityWebRequest.SetRequestHeader("Authorization", "Bearer " + authorizationToken);
                unityWebRequest.SetRequestHeader("Accept", "application/xml");
                yield return unityWebRequest.SendWebRequest();
    
                if (unityWebRequest.isNetworkError || unityWebRequest.isHttpError)
                {
                    Debug.Log(unityWebRequest.error);
                    yield return null;
                }
    
                // Parse out the response text from the returned Xml
                string result = XElement.Parse(unityWebRequest.downloadHandler.text).Value;
                Results.instance.SetTranslatedResult(result);
            }
        }
    
  10. Veillez à enregistrer vos modifications dans Visual Studio avant de revenir à Unity.

Chapitre 8 : Configurer la scène Unity

  1. De retour dans l’éditeur Unity, cliquez et faites glisser la classe Resultsdu dossier Scripts vers l’objet Main Camera dans le panneau Hierarchy.

  2. Cliquez sur la caméra principale et examinez le panneau d’inspecteur. Vous remarquerez que dans le composant Script nouvellement ajouté, il existe quatre champs avec des valeurs vides. Il s’agit des références de sortie aux propriétés dans le code.

  3. Faites glisser les objets Textappropriés du panneau Hiérarchie vers ces quatre emplacements, comme illustré dans l’image ci-dessous.

    Mettre à jour les références cibles avec les valeurs spécifiées.

  4. Ensuite, cliquez et faites glisser la classe Translator du dossier Scripts vers l’objet Main Camera dans le panneau Hiérarchie.

  5. Ensuite, cliquez et faites glisser la classe MicrophoneManager du dossier Scripts vers l’objet Main Camera dans le panneau Hierarchy.

  6. Enfin, cliquez sur la caméra principale et examinez le panneau d’inspecteur. Vous remarquerez que dans le script que vous avez fait glisser, il existe deux zones de liste déroulante qui vous permettent de définir les langues.

    Vérifiez que les langues de traduction prévues sont entrées.

Chapitre 9 : Tester en réalité mixte

À ce stade, vous devez tester que la scène a été correctement implémentée.

Assurez-vous que :

  • Tous les paramètres mentionnés dans le chapitre 1 sont correctement définis.
  • Les scripts Results, Translator et MicrophoneManager sont attachés à l’objet Main Camera .
  • Vous avez placé votre clé de service de l’API Azure Translator Text dans la variable authorizationKey dans le script Translator.
  • Tous les champs du panneau principal de l’inspecteur de la caméra sont attribués correctement.
  • Votre microphone fonctionne lors de l’exécution de votre scène (si ce n’est pas le cas, case activée que votre microphone attaché est l’appareil par défaut et que vous l’avez configuré correctement dans Windows).

Vous pouvez tester le casque immersif en appuyant sur le bouton Lecture dans l’éditeur Unity. L’application doit fonctionner via le casque immersif attaché.

Avertissement

Si vous voyez une erreur dans la console Unity concernant la modification du périphérique audio par défaut, la scène peut ne pas fonctionner comme prévu. Cela est dû à la façon dont le portail de réalité mixte traite des microphones intégrés pour les casques qui en ont. Si vous voyez cette erreur, il vous suffit d’arrêter la scène et de la redémarrer pour que les choses fonctionnent comme prévu.

Chapitre 10 : Générer la solution UWP et charger de manière indépendante sur l’ordinateur local

Tout ce dont vous avez besoin pour la section Unity de ce projet étant maintenant terminé, il est temps de le générer à partir d’Unity.

  1. Accédez à Paramètres de build : Paramètres de génération de > fichiers...

  2. Dans la fenêtre Paramètres de build, cliquez sur Générer.

    Générez la scène Unity.

  3. Si ce n’est pas déjà le cas, cochez Projets Unity C#.

  4. Cliquez sur Générer. Unity lance une fenêtre Explorateur de fichiers, dans laquelle vous devez créer, puis sélectionner un dossier dans lequel générer l’application. Créez ce dossier maintenant et nommez-le Application. Ensuite, avec le dossier Application sélectionné, appuyez sur Sélectionner un dossier.

  5. Unity commence à générer votre projet dans le dossier Application .

  6. Une fois la génération terminée (cela peut prendre un certain temps), Unity ouvre une fenêtre Explorateur de fichiers à l’emplacement de votre build (case activée votre barre des tâches, car elle n’apparaît peut-être pas toujours au-dessus de vos fenêtres, mais vous informe de l’ajout d’une nouvelle fenêtre).

Chapitre 11 : Déployer votre application

Pour déployer votre application :

  1. Accédez à votre nouvelle build Unity (le dossier App ) et ouvrez le fichier solution avec Visual Studio.

  2. Dans configuration de la solution, sélectionnez Déboguer.

  3. Dans Plateforme de solution, sélectionnez x86, Ordinateur local.

    Pour le Microsoft HoloLens, il peut être plus facile de définir cette option sur Ordinateur distant, afin de ne pas être attaché à votre ordinateur. Toutefois, vous devez également effectuer les opérations suivantes :

    • Connaissez l’adresse IP de votre HoloLens, qui se trouve dans les paramètres > réseau & Internet > Wi-Fi > options avancées ; IPv4 est l’adresse que vous devez utiliser.
    • Vérifiez que le mode développeur est activé ; disponible dans Paramètres > Mise à jour & Sécurité > pour les développeurs.

    Déployez la solution à partir de Visual Studio.

  4. Accédez au menu Générer et cliquez sur Déployer la solution pour charger une version test de l’application sur votre PC.

  5. Votre application doit maintenant apparaître dans la liste des applications installées, prêtes à être lancées.

  6. Une fois lancée, l’application vous invite à autoriser l’accès au microphone. Veillez à cliquer sur le bouton OUI .

  7. Vous êtes maintenant prêt à commencer à traduire !

Votre application API de traduction de texte terminée

Félicitations, vous avez créé une application de réalité mixte qui tire parti de l’API De traduction de texte Azure pour convertir la parole en texte traduit.

Produit final.

Exercices bonus

Exercice 1

Pouvez-vous ajouter la fonctionnalité de synthèse vocale à l’application afin que le texte retourné soit parlé ?

Exercice 2

Permettre à l’utilisateur de modifier la langue source et la langue de sortie ( « from » et « to ») au sein de l’application elle-même, de sorte que l’application n’a pas besoin d’être reconstruite chaque fois que vous souhaitez changer de langue.