Поделиться через


HoloLens (1-го поколения) и Azure 301: перевод на язык


Примечание.

Руководства Mixed Reality Academy были разработаны для иммерсивных гарнитур HoloLens (1-го поколения) и иммерсивных гарнитур Mixed Reality. Поэтому мы считаем, что важно оставить эти руководства для разработчиков, которые ищут рекомендации по разработке для этих устройств. Данные руководства не будут обновляться с учетом последних наборов инструментов или возможностей взаимодействия для HoloLens 2. Они будут сохранены для работы на поддерживаемых устройствах. В будущем будет появиться новая серия учебников, которые будут размещены в будущем, которые продемонстрировали, как разрабатывать для HoloLens 2. Это уведомление будет обновлено со ссылкой на эти учебники при публикации.


В этом курсе вы узнаете, как добавить возможности перевода в приложение смешанной реальности с помощью Azure Cognitive Services с API перевода текстов.

Окончательный продукт

API перевода текстов — это служба перевода, которая работает практически в режиме реального времени. Служба основана на облаке и, используя вызов REST API, приложение может использовать технологию нейронного машинного перевода для перевода текста на другой язык. Дополнительные сведения см. на странице API перевода текстов Azure.

После завершения этого курса у вас будет приложение смешанной реальности, которое сможет выполнить следующие действия:

  1. Пользователь будет говорить с микрофоном, подключенным к иммерсивной гарнитуре (VR) (или встроенному микрофону HoloLens).
  2. Приложение захватит диктовку и отправит его в API перевода текстов Azure.
  3. Результат перевода будет отображаться в простой группе пользовательского интерфейса в сцене Unity.

В этом курсе вы узнаете, как получить результаты из службы переводчика в пример приложения на основе Unity. Это будет до вас, чтобы применить эти понятия к пользовательскому приложению, которое вы можете создать.

Поддержка устройств

Курс HoloLens Иммерсивные гарнитуры
MR и Azure 301: перевод на язык ✔️ ✔️

Примечание.

Хотя этот курс в основном ориентирован на гарнитуры Windows Смешанная реальность иммерсивные (VR), вы также можете применить то, что вы узнаете в этом курсе к Microsoft HoloLens. При выполнении курса вы увидите заметки о любых изменениях, которые могут потребоваться для поддержки HoloLens. При использовании HoloLens вы можете заметить некоторое эхо во время записи голоса.

Предварительные требования

Примечание.

Это руководство предназначено для разработчиков, имеющих базовый опыт работы с Unity и C#. Также помните, что предварительные требования и письменные инструкции в этом документе представляют тестируемые и проверенные на момент написания статьи (май 2018 г.). Вы можете использовать последнее программное обеспечение, как указано в статье об установке инструментов , хотя не следует предполагать, что информация в этом курсе будет идеально соответствовать тому, что вы найдете в новом программном обеспечении, чем указано ниже.

Для этого курса рекомендуется использовать следующее оборудование и программное обеспечение:

Перед началом работы

  • Чтобы избежать проблем с сборкой этого проекта, настоятельно рекомендуется создать проект, упомянутый в этом руководстве, в корневой или почти корневой папке (длинные пути к папкам могут вызвать проблемы во время сборки).

  • Код, приведенный в этом руководстве, позволяет записывать данные с устройства микрофона по умолчанию, подключенного к компьютеру. Убедитесь, что устройство микрофона по умолчанию установлено на устройство, которое вы планируете использовать для записи голоса.

  • Чтобы разрешить компьютеру включить диктовку, перейдите в раздел "Параметры > конфиденциальности > речи", введите рукописный ввод и выберите кнопку Включить службы речи и ввести предложения.

  • Если вы используете микрофон и наушники, подключенные к гарнитуре (или встроенные), убедитесь, что параметр "Когда я носить гарнитуру, переключитесь на микрофон гарнитуры" включен в разделе "Параметры > смешанной реальности > Аудио и речь".

    Параметры смешанной реальности

    Параметр микрофона

Предупреждение

Помните, что при разработке для иммерсивной гарнитуры для этой лаборатории могут возникнуть проблемы с выходным звуком. Это связано с проблемой с Unity, которая исправлена в более поздних версиях Unity (Unity 2018.2). Проблема не позволяет Unity изменять звуковое устройство по умолчанию во время выполнения. В ходе работы убедитесь, что вы выполнили описанные выше действия и закройте и повторно откройте редактор, когда эта проблема возникает.

Глава 1. Портал Azure

Чтобы использовать API Переводчика Azure, необходимо настроить экземпляр службы, который будет доступен приложению.

  1. Войдите на портал Azure.

    Примечание.

    Если у вас еще нет учетной записи Azure, необходимо создать ее. Если вы используете это руководство в классе или лаборатории, попросите преподавателя или одного из прокторов, чтобы помочь настроить новую учетную запись.

  2. После входа нажмите кнопку "Создать " в левом верхнем углу и найдите "API перевода текстов". Нажмите клавишу ВВОД.

    Новый ресурс

    Примечание.

    Возможно, слово New было заменено на создание ресурса на более новых порталах.

  3. На новой странице будет представлено описание службы API перевода текстов. В нижней левой части этой страницы нажмите кнопку "Создать ", чтобы создать связь с этой службой.

    Создание службы API перевода текстов

  4. После нажатия кнопки "Создать":

    1. Вставьте требуемое имя для этого экземпляра службы.

    2. Выберите соответствующую подписку.

    3. Выберите ценовую категорию, соответствующую вам, если это первый раз, когда вы создаете службу перевода текстов, вам должна быть доступна бесплатная категория (с именем F0).

    4. Выберите группу ресурсов или создайте новую. Группа ресурсов предоставляет способ мониторинга, контроля доступа, подготовки и управления выставлением счетов для коллекции ресурсов Azure. Рекомендуется сохранить все службы Azure, связанные с одним проектом (например, такими, как эти лаборатории) в общей группе ресурсов.

      Если вы хотите узнать больше о группах ресурсов Azure, посетите статью группы ресурсов.

    5. Определите расположение группы ресурсов (если вы создаете новую группу ресурсов). Расположение в идеале будет находиться в регионе, где будет выполняться приложение. Некоторые ресурсы Azure доступны только в определенных регионах.

    6. Вам также потребуется подтвердить, что вы поняли условия, примененные к этой службе.

    7. Нажмите кнопку создания.

      Нажмите кнопку Создать.

  5. После нажатия кнопки "Создать" вам придется ждать создания службы, это может занять минуту.

  6. Уведомление появится на портале после создания экземпляра службы.

    Уведомление о создании службы Azure

  7. Щелкните уведомление, чтобы изучить новый экземпляр службы.

    Откройте всплывающее окно ресурса.

  8. Нажмите кнопку "Перейти к ресурсу " в уведомлении, чтобы изучить новый экземпляр службы. Вы перейдете в новый экземпляр службы API перевода текстов.

    Страница службы API перевода текстов

  9. В этом руководстве приложению потребуется выполнить вызовы к службе, которая выполняется с помощью ключа подписки службы.

  10. На начальной странице службы перевода текстов перейдите к первому шагу, захватите ключи и нажмите кнопку "Ключи" (вы также можете добиться этого, щелкнув ключи синей гиперссылки, расположенные в меню навигации служб, обозначаемый значком ключа). Откроется ключи службы.

  11. Скопируйте один из отображаемых ключей, так как вам потребуется позже в проекте.

Глава 2. Настройка проекта Unity

Настройте и проверьте иммерсивную гарнитуру смешанной реальности.

Примечание.

Для этого курса вам не потребуются контроллеры движения. Если вам нужна поддержка настройки иммерсивной гарнитуры, выполните следующие действия.

Ниже приведена типичная настройка для разработки с смешанной реальностью и, как это, например, хороший шаблон для других проектов:

  1. Откройте Unity и нажмите кнопку "Создать".

    Запустите новый проект Unity.

  2. Теперь необходимо указать имя проекта Unity. Вставьте MR_Translation. Убедитесь, что для типа проекта задано значение 3D. Задайте расположение в нужном месте (помните, что ближе к корневым каталогам лучше). Затем нажмите кнопку "Создать проект".

    Укажите сведения о новом проекте Unity.

  3. При открытии Unity стоит проверить, установлен ли редактор скриптов по умолчанию в Visual Studio. Перейдите к разделу "Изменить > параметры", а затем в новом окне перейдите к внешним средствам. Измените внешний редактор скриптов на Visual Studio 2017. Закройте окно параметров.

    Обновление предпочтений редактора скриптов.

  4. Затем перейдите к параметрам сборки файлов > и переключите платформу на универсальная платформа Windows, нажав кнопку "Переключить платформу".

    Окно параметров сборки, переключение платформы на UWP.

  5. Перейдите к параметрам сборки файлов > и убедитесь, что:

    1. Целевое устройство имеет значение Any Device.

      Для Microsoft HoloLens задайте для целевого устройства значение HoloLens.

    2. Тип сборки имеет значение D3D

    3. Для пакета SDK установлено значение "Последняя версия"

    4. Версия Visual Studio установлена в качестве последней версии

    5. Для сборки и запуска задано значение Local Machine

    6. Сохраните сцену и добавьте ее в сборку.

      1. Для этого выберите "Добавить открытые сцены". Откроется окно сохранения.

        Нажмите кнопку

      2. Создайте новую папку для этого, а также любую будущую сцену, а затем нажмите кнопку "Создать папку", чтобы создать новую папку, присвойте ей имя "Сцены".

        Создание папки сценариев

      3. Откройте только что созданную папку "Сцены" , а затем в поле "Файл": текстовое поле, введите MR_TranslationScene, а затем нажмите кнопку "Сохранить".

        Присвойте новому сцене имя.

        Помните, что сцены Unity должны сохраняться в папке "Активы ", так как они должны быть связаны с проектом Unity. Создание папки сцен (и других аналогичных папок) — это типичный способ структурирования проекта Unity.

    7. Остальные параметры в параметрах сборки должны оставаться по умолчанию.

  6. В окне "Параметры сборки" нажмите кнопку "Параметры проигрывателя", откроется связанная панель в пространстве, где находится инспектор.

    Откройте параметры проигрывателя.

  7. На этой панели необходимо проверить несколько параметров:

    1. На вкладке "Другие параметры" :

      1. Версия среды выполнения сценариев должна быть стабильной (эквивалентная .NET 3.5).

      2. Серверная часть скриптов должна быть .NET

      3. Уровень совместимости API должен быть .NET 4.6

        Обновите другие параметры.

    2. На вкладке "Параметры публикации" в разделе "Возможности" проверьте:

      1. InternetClient;

      2. Микрофон

        Обновление параметров публикации.

    3. Далее вниз по панели в параметрах XR (приведенных ниже параметров публикации), установите флажок "Поддерживаемая виртуальная реальность", убедитесь, что пакет SDK для Windows Смешанная реальность добавлен.

      Обновите параметры X R.

  8. Вернувшись в параметры сборки, проекты C# Unity больше не будут серыми. Установите флажок рядом с этим.

  9. Закройте окно Build Settings (Параметры сборки).

  10. Сохраните сцену и проект (ФАЙЛ > СОХРАНИТЬ СЦЕНУ или ФАЙЛ > СОХРАНИТЬ ПРОЕКТ).

Глава 3. Настройка основной камеры

Внимание

Если вы хотите пропустить компонент настройки Unity этого курса и перейти прямо в код, вы можете скачать этот пакет unitypackage, импортировать его в проект в качестве пользовательского пакета, а затем продолжить с главы 5. Вам по-прежнему потребуется создать проект Unity.

  1. На панели иерархии вы найдете объект с именем Main Camera, этот объект представляет вашу "головную" точку зрения после того, как вы "внутри" приложения.

  2. На панели мониторинга Unity перед вами выберите главную камеру GameObject. Вы заметите, что панель инспектора (обычно найдена справа, в панели мониторинга) отобразит различные компоненты этого GameObject, с преобразованием вверху, а затем камерой и некоторыми другими компонентами. Вам потребуется сбросить преобразование основной камеры, поэтому он правильно расположен.

  3. Для этого выберите значок Шестеренки рядом с компонентом преобразования камеры и нажмите кнопку "Сброс".

    Сброс преобразования основной камеры.

  4. Затем компонент преобразования должен выглядеть следующим образом:

    1. Положение имеет значение 0, 0, 0

    2. Поворот имеет значение 0, 0, 0

    3. И масштаб имеет значение 1, 1, 1

      Преобразование сведений для камеры

  5. Затем с выбранным объектом основной камеры см . кнопку "Добавить компонент ", расположенную в нижней части панели инспектора.

  6. Нажмите кнопку и выполните поиск (введите источник звука в поле поиска или перейдите по разделам) для компонента с именем "Источник звука", как показано ниже, и выберите его (нажмите клавишу ВВОД на нем также).

  7. Компонент источника звука будет добавлен в основную камеру, как показано ниже.

    Добавьте компонент источника звука.

    Примечание.

    Для Microsoft HoloLens также потребуется изменить следующие компоненты, которые входят в компонент камеры на главной камере:

    • Очистить флаги: сплошной цвет.
    • Фон "Черный, Альфа 0" — шестнадцатеричный цвет: #00000000.

Глава 4. Настройка холста отладки

Чтобы отобразить входные и выходные данные перевода, необходимо создать базовый пользовательский интерфейс. Для этого курса вы создадите объект пользовательского интерфейса Canvas с несколькими объектами Text для отображения данных.

  1. Щелкните правой кнопкой мыши пустую область панели иерархии в пользовательском интерфейсе, добавьте холст.

    Добавьте новый объект пользовательского интерфейса Canvas.

  2. Выбрав объект Canvas, на панели инспектора (в компоненте Canvas) измените режим отрисовки на World Space.

  3. Затем измените следующие параметры в преобразовании Rect панели инспектора:

    1. POS - X 0 Y 0 Z 40

    2. Ширина — 500

    3. Высота — 300

    4. Масштабирование - X 0.13 Y 0.13 Z 0.13

      Обновите преобразование прямоугольника для холста.

  4. Щелкните правой кнопкой мыши холст на панели иерархии в разделе пользовательского интерфейса и добавьте панель. Эта панель предоставит фон тексту, который будет отображаться в сцене.

  5. Щелкните правой кнопкой мыши панель на панели иерархии в пользовательском интерфейсе и добавьте объект Text. Повторите тот же процесс, пока не создадим четыре объекта текста пользовательского интерфейса в общей сложности (указание: если выбран первый объект Text, можно просто нажать клавиши CTRL + D, чтобы дублировать его, пока не будет четыре в общей сложности).

  6. Для каждого текстового объекта выберите его и используйте приведенные ниже таблицы, чтобы задать параметры на панели инспектора.

    1. Для компонента преобразования Rect:

      Имя. Преобразование — положение Ширина Высота
      МикрофонStatusLabel X -80 Y 90 Z 0 300 30
      AzureResponseLabel X -80 Y 30 Z 0 300 30
      ДиктовкаLabel X -80 Y -30 Z 0 300 30
      TranslationResultLabel X -80 Y -90 Z 0 300 30
    2. Для компонента Text (Script) выполните следующие действия:

      Имя. Текст Размер шрифта
      МикрофонStatusLabel Состояние микрофона: 20
      AzureResponseLabel Веб-ответ Azure 20
      ДиктовкаLabel Вы только что сказали: 20
      TranslationResultLabel Перевод. 20

      Введите соответствующие значения меток пользовательского интерфейса.

    3. Кроме того, сделайте шрифт полужирным шрифтом. Это упрощает чтение текста.

      Полужирный шрифт.

  7. Для каждого объекта ui Text, созданного в главе 5, создайте новый дочерний объект пользовательского интерфейса Text. Эти дочерние элементы будут отображать выходные данные приложения. Создайте дочерние объекты, щелкнув правой кнопкой мыши нужный родительский элемент (например , МикрофонStatusLabel), а затем выберите пользовательский интерфейс и выберите текст.

  8. Для каждого из этих дочерних элементов выберите его и используйте приведенные ниже таблицы, чтобы задать параметры в панели инспекторов.

    1. Для компонента преобразования Rect:

      Имя. Преобразование — положение Ширина Высота
      МикрофонStatusText X 0 Y -30 Z 0 300 30
      AzureResponseText X 0 Y -30 Z 0 300 30
      Диктовка X 0 Y -30 Z 0 300 30
      TranslationResultText X 0 Y -30 Z 0 300 30
    2. Для компонента Text (Script) выполните следующие действия:

      Имя. Текст Размер шрифта
      МикрофонStatusText ?? 20
      AzureResponseText ?? 20
      Диктовка ?? 20
      TranslationResultText ?? 20
  9. Затем выберите параметр выравнивания "центр" для каждого текстового компонента:

    выровнять текст.

  10. Чтобы дочерние объекты текста пользовательского интерфейса легко удобочитались, измените цвет. Для этого щелкните панель (в настоящее время "Черный") рядом с цветом.

    Введите соответствующие значения для выходных данных текста пользовательского интерфейса.

  11. Затем, в новом, маленьком окне цвета , измените шестнадцатеричный цвет на: 0032EAFF

    Обновите цвет до синего.

  12. Ниже показано, как должен выглядеть пользовательский интерфейс .

    1. На панели иерархии:

      Укажите иерархию в предоставленной структуре.

    2. В представлениях сцены и игры:

      У вас есть представления сцены и игры в той же структуре.

Глава 5. Создание класса Results

Первый скрипт, который необходимо создать, — это класс Results , который отвечает за предоставление способа просмотра результатов перевода. Класс хранит и отображает следующее:

  • Результат ответа из Azure.
  • Состояние микрофона.
  • Результат диктовки (голос в текст).
  • Результат перевода.

Чтобы создать этот класс, выполните указанные ниже действия.

  1. Щелкните правой кнопкой мыши панель проекта и создайте > папку. Назовите скрипты папок.

    Создайте папку скриптов.

    Откройте папку скриптов.

  2. Создав папку "Скрипты" , дважды щелкните ее, чтобы открыть ее. Затем в этой папке щелкните правой кнопкой мыши и выберите команду "Создать>" и "Скрипт C#". Присвойте результаты скрипта.

    Создайте первый скрипт.

  3. Дважды щелкните новый скрипт результатов , чтобы открыть его с помощью Visual Studio.

  4. Вставьте следующие пространства имен:

        using UnityEngine;
        using UnityEngine.UI;
    
  5. Внутри класса вставляются следующие переменные:

        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. Затем добавьте метод Awake(), который будет вызываться при инициализации класса.

        private void Awake() 
        { 
            // Set this class to behave similar to singleton 
            instance = this;           
        } 
    
  7. Наконец, добавьте методы, которые отвечают за вывод различных сведений о результатах в пользовательский интерфейс.

        /// <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. Не забудьте сохранить изменения в Visual Studio , прежде чем вернуться в Unity.

Глава 6. Создание класса МикрофонManager

Второй класс, который вы собираетесь создать, — Это МикрофонManager.

Этот класс отвечает за:

  • Обнаружение устройства записи, подключенного к гарнитуре или компьютеру (в зависимости от используемого по умолчанию).
  • Захватить звук (голос) и использовать диктовку для хранения его в виде строки.
  • После приостановки голоса отправьте диктовку в класс Переводчика.
  • Разместите метод, который может остановить запись голоса при необходимости.

Чтобы создать этот класс, выполните указанные ниже действия.

  1. Дважды щелкните папку "Скрипты" , чтобы открыть ее.

  2. Щелкните правой кнопкой мыши в папке "Скрипты" , нажмите кнопку "Создать > скрипт C#". Присвойте скрипту МикрофонManager.

  3. Дважды щелкните новый скрипт, чтобы открыть его с помощью Visual Studio.

  4. Обновите пространства имен так же, как и в следующем, в верхней части класса МикрофонManager :

        using UnityEngine; 
        using UnityEngine.Windows.Speech;
    
  5. Затем добавьте следующие переменные в класс МикрофонManager :

        // 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. Теперь необходимо добавить код для методов Awake() и Start( ). Они будут вызываться при инициализации класса:

        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. Метод Update() можно удалить, так как этот класс не будет использовать его.

  8. Теперь вам нужны методы, которые приложение использует для запуска и остановки записи голоса и передачи его в класс Переводчика , который будет построен в ближайшее время. Скопируйте следующий код и вставьте его под методом 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(); 
        }
    

    Совет

    Хотя это приложение не будет использовать его, метод StopCapturingAudio() также был предоставлен здесь, если вы хотите реализовать возможность прекращения записи звука в приложении.

  9. Теперь необходимо добавить обработчик диктовки, который будет вызываться при остановке голоса. Затем этот метод передает диктованный текст классу 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. Не забудьте сохранить изменения в Visual Studio, прежде чем вернуться в Unity.

Предупреждение

На этом этапе в области консоли редактора Unity появится сообщение об ошибке ("Имя "Переводчик" не существует..."). Это связано с тем, что код ссылается на класс Translator , который вы создадите в следующей главе.

Глава 7. Вызов службы Azure и переводчика

Последний скрипт, который необходимо создать, — это класс Translator .

Этот класс отвечает за:

  • Проверка подлинности приложения с помощью Azure в обмен на маркер проверки подлинности.
  • Используйте маркер проверки подлинности для отправки текста (полученного из класса МикрофонManager) для перевода.
  • Получите преобразованный результат и передайте его в класс результатов для визуализации в пользовательском интерфейсе.

Чтобы создать этот класс, выполните указанные ниже действия.

  1. Перейдите в папку "Скрипты", созданную ранее.

  2. Щелкните правой кнопкой мыши панель проекта и создайте > скрипт C#. Вызов переводчика скриптов.

  3. Дважды щелкните новый скрипт Переводчика , чтобы открыть его с помощью Visual Studio.

  4. Добавьте следующие пространства имен в начало файла :

        using System;
        using System.Collections;
        using System.Xml.Linq;
        using UnityEngine;
        using UnityEngine.Networking;
    
  5. Затем добавьте следующие переменные в класс 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; 
    

    Примечание.

    • Языки, вставленные в перечисление языков, являются лишь примерами. Вы можете добавить дополнительные сведения, если вы хотите; API поддерживает более 60 языков (включая Klingon)!
    • Существует более интерактивная страница, охватывающая доступные языки, хотя помните, что страница работает только тогда, когда язык сайта имеет значение "" (и сайт Майкрософт, скорее всего, перенаправится на свой собственный язык). Вы можете изменить язык сайта в нижней части страницы или изменить URL-адрес.
    • Значение authorizationKey в приведенном выше фрагменте кода должно быть ключом, полученным при подписке на API перевода текстов Azure. Это было описано в главе 1.
  6. Теперь необходимо добавить код для методов Awake() и Start( ).

  7. В этом случае код вызовет Azure с помощью ключа авторизации, чтобы получить маркер.

        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); 
        }
    

    Примечание.

    Срок действия маркера истекает через 10 минут. В зависимости от сценария для приложения может потребоваться несколько раз вызвать один и тот же корутин.

  8. Корутин для получения маркера является следующим:

        /// <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();
        }
    

    Предупреждение

    Если изменить имя метода IEnumerator GetTokenCoroutine(),необходимо обновить значения строк вызова StartCoroutine и StopCoroutine в приведенном выше коде. Согласно документации по Unity, чтобы остановить конкретный Корутин, необходимо использовать метод строкового значения.

  9. Затем добавьте корутин (с методом потока поддержки прямо под ним), чтобы получить перевод текста, полученного классом МикрофонManager . Этот код создает строку запроса для отправки в API перевода текстов Azure, а затем использует внутренний класс Unity UnityWebRequest для вызова конечной точки с помощью строки запроса. Затем результат используется для задания перевода в объекте Results. В приведенном ниже коде показана реализация:

        /// <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. Не забудьте сохранить изменения в Visual Studio , прежде чем вернуться в Unity.

Глава 8. Настройка сцены Unity

  1. Вернитесь в редактор Unity, щелкните и перетащите класс "Результаты" из папки "Скрипты" в объект Main Camera на панели иерархии.

  2. Щелкните главную камеру и просмотрите панель инспектора. Вы заметите, что в недавно добавленном компоненте скрипта есть четыре поля с пустыми значениями. Это выходные ссылки на свойства в коде.

  3. Перетащите соответствующие текстовые объекты из панели иерархии в эти четыре слота, как показано на рисунке ниже.

    Обновите целевые ссылки с указанными значениями.

  4. Затем щелкните и перетащите класс Translator из папки "Скрипты " в объект Main Camera на панели иерархии.

  5. Затем щелкните и перетащите класс MicrophoneManager из папки "Скрипты " в объект Main Camera на панели иерархии.

  6. Наконец, щелкните главную камеру и посмотрите на панель инспектора. Вы заметите, что в перетаскиваемом скрипте есть два раскрывающихся списка, которые позволят задать языки.

    Убедитесь, что предполагаемые языки перевода являются входным.

Глава 9. Тестирование в смешанной реальности

На этом этапе необходимо проверить, правильно ли реализована сцена.

Убедитесь в следующем:

  • Все параметры, упомянутые в главе 1 , задаются правильно.
  • Результаты, Переводчик и МикрофонManager, скрипты присоединяются к объекту Main Camera.
  • Ключ службы API перевода текстов Azure помещается в переменную authorizationKey в скрипт переводчика.
  • Все поля в панели инспектора основной камеры назначены должным образом.
  • Микрофон работает при запуске сцены (если нет, убедитесь, что подключенный микрофон является устройством по умолчанию и правильно настроено в Windows).

Вы можете протестировать иммерсивную гарнитуру, нажав кнопку воспроизведения в редакторе Unity. Приложение должно функционировать через подключенную иммерсивную гарнитуру.

Предупреждение

Если вы видите ошибку в консоли Unity об изменении звукового устройства по умолчанию, сцена может не функционировать должным образом. Это связано с тем, как портал смешанной реальности работает со встроенными микрофонами для гарнитур, имеющих их. Если вы видите эту ошибку, просто остановите сцену и запустите ее снова, и все должно работать должным образом.

Глава 10. Создание решения UWP и загрузка неопубликованных данных на локальном компьютере

Все необходимое для раздела Unity этого проекта завершено, поэтому пришло время создать его из Unity.

  1. Перейдите к параметрам сборки: параметры сборки файлов>...

  2. В окне "Параметры сборки" нажмите кнопку "Сборка".

    Создайте сцену Unity.

  3. Если это еще не так, обратитесь к проектам C# Unity.

  4. Нажмите кнопку " Создать". Unity запустит окно проводник, в котором необходимо создать, а затем выбрать папку для сборки приложения. Создайте папку и присвойте ей имя приложения. Затем с выбранной папкой приложения нажмите клавишу SELECT FOLDER.

  5. Unity начнет создание проекта в папку приложения .

  6. После завершения сборки Unity (может потребоваться некоторое время), откроется окно проводник в расположении сборки (проверьте панель задач, так как она может не всегда отображаться над окнами, но уведомит вас о добавлении нового окна).

Глава 11. Развертывание приложения

Чтобы развернуть приложение, выполните приведенные действия.

  1. Перейдите к новой сборке Unity (папке приложения) и откройте файл решения с помощью Visual Studio.

  2. В разделе "Конфигурация решения" выберите "Отладка".

  3. На платформе решения выберите x86, Локальный компьютер.

    Для Microsoft HoloLens это может быть проще установить на удаленный компьютер, чтобы вы не были подключены к компьютеру. Однако вам также потребуется выполнить следующие действия:

    • Ознакомься с IP-адресом HoloLens, который можно найти в > разделе "Параметры сети" и "Расширенные параметры Интернета > Wi-Fi>".IPv4 — это адрес, который следует использовать.
    • Убедитесь, что режим разработчика включен; в разделе "Параметры > обновления" и "Безопасность > для разработчиков".

    Разверните решение из Visual Studio.

  4. Перейдите в меню "Сборка" и щелкните "Развернуть решение ", чтобы загрузить неопубликованное приложение на компьютер.

  5. Теперь приложение должно отображаться в списке установленных приложений, готовых к запуску.

  6. После запуска приложение предложит авторизовать доступ к микрофону. Обязательно нажмите кнопку "ДА ".

  7. Теперь вы готовы начать перевод!

Готовое приложение API перевода текста

Поздравляем, вы создали приложение смешанной реальности, которое использует API перевода текста Azure для преобразования речи в переведенный текст.

Окончательный продукт.

Дополнительные упражнения

Упражнение 1

Можно ли добавить функции преобразования текста в речь в приложение, чтобы возвращаемый текст говорился?

Упражнение 2

Это позволяет пользователю изменять исходные и выходные языки (от"от" и "до") в самом приложении, поэтому приложение не должно быть перестроено каждый раз, когда вы хотите изменить языки.