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


HoloLens (1-го поколения) и Azure 307: машинное обучение


Примечание.

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


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

В этом курсе вы узнаете, как добавить возможности Машинное обучение (ML) в приложение смешанной реальности с помощью Машинное обучение Azure Studio (классическая модель).

Машинное обучение Azure Studio (классическая) — это служба Майкрософт, которая предоставляет разработчикам большое количество алгоритмов машинного обучения, которые могут помочь с вводом данных, выводом, подготовкой и визуализацией. Из этих компонентов можно затем разработать эксперимент прогнозной аналитики, выполнить итерацию и использовать его для обучения модели. После обучения вы можете сделать модель операционной в облаке Azure, чтобы затем оценить новые данные. Дополнительные сведения см. на странице Машинное обучение Azure Studio (классическая версия).

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

  1. Предоставьте таблицу данных о продажах на портале Машинное обучение Azure Studio (классической) и спроектируйте алгоритм прогнозирования будущих продаж популярных элементов.
  2. Создайте проект Unity, который может получать и интерпретировать данные прогнозирования из службы машинного обучения.
  3. Отображение данных предикаций визуально в проекте Unity с помощью предоставления наиболее популярных элементов продаж на полке.

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

Этот курс является автономным учебником, который не напрямую включает другие Смешанная реальность Лаборатории.

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

Курс HoloLens Иммерсивные гарнитуры
MR и Azure 307: машинное обучение ✔️ ✔️

Примечание.

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

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

Примечание.

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

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

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

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

Глава 1. Настройка учетной записи служба хранилища Azure

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

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

    Примечание.

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

  2. После входа щелкните учетные записи хранения в меню слева.

    Снимок экрана: окно Microsoft Azure, в котором показан элемент учетных записей хранения в меню навигации слева.

    Примечание.

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

  3. На вкладке "Учетные записи хранения" нажмите кнопку "Добавить".

    Снимок экрана: окно Microsoft Azure, на котором показан экран учетных записей хранения и выделенная кнопка

  4. На панели "Создание учетной записи хранения":

    1. Вставьте имя учетной записи, учитывайте, что это поле принимает только цифры и строчные буквы.

    2. Для модели развертывания выберите Resource Manager.

    3. Для типа учетной записи выберите хранилище (общего назначения версии 1).

    4. В разделе Производительность выберите Стандартная.

    5. Для репликации выберите геоизбыточное хранилище с доступом для чтения (RA-GRS).

    6. Оставьте безопасную передачу необходимой в качестве отключенной.

    7. Выберите подписку.

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

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

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

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

    Снимок экрана: диалоговое окно

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

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

    Снимок экрана: уведомление об успешном развертывании, которое сообщает пользователю, что развертывание в группе ресурсов выполнено успешно.

Глава 2. Студия Машинное обучение Azure (классическая версия)

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

  1. На портале Azure щелкните "Создать" в левом верхнем углу и найдите Машинное обучение Studio Workspace, нажмите клавишу ВВОД.

    Снимок экрана: окно Microsoft Azure, в котором показана рабочая область Машинное обучение Studio в области содержимого.

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

  3. После нажатия кнопки "Создать" появится панель, в которой необходимо указать некоторые сведения о новой службе Машинное обучение Studio:

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

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

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

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

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

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

    6. Выберите соответствующую ценовую категорию рабочей области в раскрывающемся меню.

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

    8. В разделе ценовой категории "План веб-служб" выберите ценовую категорию . Уровень тестирования разработки с именем DEVTEST Standard должен быть доступен вам без платы.

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

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

      Снимок экрана: диалоговое окно Машинное обучение Azure Studio, в котором отображаются сведения, введенные пользователем в текстовые поля.

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

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

    Снимок экрана: окно Microsoft Azure, в котором отображается непрочитанное уведомление в меню навигации.

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

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

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

  8. На странице, отображаемой в разделе "Дополнительные ссылки", нажмите кнопку "Запустить Машинное обучение Studio", которая будет направлять браузер на портал Машинное обучение Studio.

    Снимок экрана: окно Microsoft Azure, в котором показана выделенная ссылка

  9. Нажмите кнопку "Войти" в правом верхнем углу или в центре, чтобы войти в Машинное обучение Studio (классическая версия).

    Снимок экрана: окно Машинное обучение Studio, на котором показана выделенная кнопка

Глава 3. Машинное обучение Studio (классическая версия): настройка набора данных

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

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

Внимание

Приведенный выше файл .zip содержит как ProductsTableCSV, так и пакет unitypackage, который потребуется в главе 6. Этот пакет также предоставляется в этой главе, хотя и отдельно от CSV-файла.

Этот пример набора данных содержит запись самых продаваемых объектов каждый час каждого дня года 2017 года.

Снимок экрана: окно Microsoft Excel, в котором показан пример набора данных для наиболее продаваемых объектов каждый час в год 2017 года.

Например, на 1-й день 2017 года в 1 вечера (час 13), самый продаваемый элемент был солью и перцем.

Эта примерная таблица содержит записи 9998.

  1. Вернитесь на портал Машинное обучение Studio (классическая версия) и добавьте эту таблицу в качестве набора данных для машинного обучения. Для этого нажмите кнопку +Создать в левом нижнем углу экрана.

    Снимок экрана: классический портал Машинное обучение Microsoft Azure Studio, на котором показана выделенная кнопка

  2. Раздел появится снизу и в пределах панели навигации слева. Щелкните набор данных справа от этого, из локального файла.

    Снимок экрана: диалоговое окно

  3. Передайте новый набор данных, выполнив следующие действия.

    1. Откроется окно отправки, где можно просмотреть жесткий диск для нового набора данных.

      Снимок экрана: диалоговое окно

    2. После выбора и обратно в окне отправки оставьте флажок незамеченным.

    3. В текстовом поле ниже введите ProductsTableCSV.csv в качестве имени набора данных (хотя следует автоматически добавить).

    4. В раскрывающемся меню типа выберите универсальный CSV-файл с заголовком (.csv).

    5. Нажмите галочку в правом нижнем углу окна отправки, и ваш набор данных будет отправлен.

Глава 4. Студия Машинное обучение (классическая): Эксперимент

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

Чтобы начать создание эксперимента, выполните следующее:

  1. Снова нажмите кнопку +Создать в левом нижнем углу страницы, а затем щелкните "Эксперимент>пустой эксперимент".

    Снимок экрана: окно Машинное обучение Microsoft Azure Studio, в котором выбран пункт меню

  2. Откроется новая страница с пустым экспериментом:

  3. На панели слева разверните сохраненные наборы данных Мои наборы> данных и перетащите ProductsTableCSV на холст эксперимента.

    Снимок экрана: окно

  4. На панели слева разверните пример преобразования>данных и разделите их. Затем перетащите элемент разделенных данных в холст эксперимента. Элемент разделенных данных разделит набор данных на две части. Одна часть, используемая для обучения алгоритма машинного обучения. Вторая часть будет использоваться для оценки точности созданного алгоритма.

    Снимок экрана: окно

  5. На правой панели (при выборе элемента разделенных данных на холсте) измените долю строк в первом выходном наборе данных на 0,7. Это разделит данные на две части, первая часть будет составлять 70 % данных, а вторая — оставшиеся 30 %. Чтобы убедиться, что данные разделены случайным образом, убедитесь , что флажок "Случайный разбиение " остается установлен.

    Снимок экрана: панель

  6. Перетащите соединение из базы элемента ProductsTableCSV на холсте в начало элемента Split Data. Это приведет к подключению элементов и отправке выходных данных набора данных ProductsTableCSV (данных) в входные данные разделения данных.

    Снимок экрана: холст эксперимента, на котором показано соединение между таблицами products C V dot c v и разделением данных.

  7. На панели "Эксперименты" слева разверните узел Машинное обучение> Train. Перетащите элемент "Обучение модели " в холст эксперимента. Холст должен выглядеть так же, как показано ниже.

    Снимок экрана: холст эксперимента, на котором показано соединение между таблицами продуктов C V dot c v и разделением данных с помощью модели обучения ниже.

  8. В левом нижнем углу элемента разделенных данных перетащите подключение вправо от элемента "Обучение модели". Первый 70 % от набора данных будет использоваться моделью обучения для обучения алгоритма.

    Снимок экрана: холст эксперимента, на котором показано соединение между таблицами продуктов C V точками c v, разделением данных и обучением модели.

  9. Выберите элемент "Обучение модели" на холсте и на панели "Свойства" (в правой части окна браузера) нажмите кнопку "Запустить селектор столбца".

  10. В текстовом поле введите продукт , а затем нажмите клавишу ВВОД, продукт будет задан как столбец для обучения прогнозов. После этого щелкните галочку в правом нижнем углу, чтобы закрыть диалоговое окно выбора.

    Снимок экрана: диалоговое окно

  11. Вы собираетесь обучить алгоритм многоклассовой логистической регрессии , чтобы предсказать наиболее проданный продукт на основе часа дня и даты. Это выходит за рамки этого документа, чтобы объяснить подробные сведения о различных алгоритмах, предоставляемых Студия машинного обучения Azure, однако вы можете узнать больше из Машинное обучение листа алгоритмов

  12. На панели элементов эксперимента слева разверните Машинное обучение> Initialize Model>Classification и перетащите элемент многоклассовой логистической регрессии на холст эксперимента.

  13. Подключите выходные данные, начиная с нижней части многоклассовой логистической регрессии, к левому верхнему входу элемента модели обучения.

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

  14. В списке элементов эксперимента на панели слева разверните Машинное обучение> Score и перетащите элемент "Оценка модели" на холст.

  15. Подключите выходные данные из нижней части модели обучения к левому верхнему входному значению модели оценки.

  16. Подключите выходные данные в правом нижнем углу из разделения данных к правому верхнему краю элемента модели оценки.

    Снимок экрана: холст эксперимента, на котором показана модель оценки, подключенная к модели обучения и разделение данных.

  17. В списке элементов эксперимента на панели слева разверните узел Машинное обучение> Evaluate и перетащите элемент "Оценка модели" на холст.

  18. Подключите выходные данные из модели оценки к левому верхнему входу модели оценки.

    Снимок экрана: холст эксперимента, на котором показана модель оценки, подключенная к модели оценки.

  19. Вы создали свой первый Машинное обучение эксперимент. Теперь вы можете сохранить и запустить эксперимент. В меню в нижней части страницы нажмите кнопку "Сохранить", чтобы сохранить эксперимент, а затем нажмите кнопку "Запустить ", чтобы запустить эксперимент.

    Снимок экрана: меню

  20. Состояние эксперимента можно увидеть в правом верхнем углу холста. Подождите несколько минут, пока эксперимент завершится.

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

    Снимок экрана: окно

  21. Щелкните правой кнопкой мыши элемент "Оценка модели" на холсте и в контекстном меню наведите указатель мыши на результаты оценки, а затем выберите "Визуализировать".

    Снимок экрана: меню правой кнопкой мыши элемента оценки модели, в котором показаны выделенные результаты оценки и элементы меню визуализации.

  22. Результаты оценки отображаются с прогнозируемыми результатами и фактическими результатами. Для оценки модели используется 30 % исходного набора данных, разделенного ранее. Вы увидите, что результаты не велики, в идеале у вас будет наибольшее число в каждой строке в столбцах.

    Снимок экрана: диаграмма результатов, в которой показаны результаты эксперимента в графе полей с процентными значениями.

  23. Закройте результаты.

  24. Чтобы использовать новую обученную Машинное обучение модель, необходимо предоставить ее как веб-службу. Для этого щелкните пункт меню "Настройка веб-службы " в меню в нижней части страницы и щелкните "Прогнозная веб-служба".

    Снимок экрана: меню

  25. Будет создана новая вкладка, а модель обучения объединена для создания новой веб-службы.

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

    Снимок экрана: меню

  27. После завершения работы кнопка "Развернуть веб-службу " появится в нижней части страницы. Вы готовы развернуть веб-службу. В меню в нижней части страницы щелкните " Развернуть веб-службу (классическая модель").

    Снимок экрана: меню

    В браузере может потребоваться разрешить всплывающее окно, которое необходимо разрешить, хотя вам может потребоваться снова нажать клавишу Deploy Web Service , если страница развертывания не отображается.

  28. После создания эксперимента вы будете перенаправлены на страницу панели мониторинга, где будет отображаться ключ API. Скопируйте его в блокнот на данный момент, вам потребуется в коде в ближайшее время. После того как вы заметите ключ API, нажмите кнопку REQUEST/RESPONSE в разделе "Конечная точка по умолчанию" в разделе "Ключ".

    Снимок экрана: окно Машинное обучение Microsoft Azure Studio, в котором показан ключ P I и выделенная ссылка

    Примечание.

    При нажатии кнопки "Тест" на этой странице вы сможете ввести входные данные и просмотреть выходные данные. Введите день и час. Оставьте запись продукта пустой. Затем нажмите кнопку "Подтвердить ". Выходные данные на нижней части страницы будут отображать JSON, представляющие вероятность выбора каждого продукта.

  29. Откроется новая веб-страница, отображающая инструкции и некоторые примеры структуры запроса, требуемой Машинное обучение Studio (классическая модель). Скопируйте URI запроса, отображаемый на этой странице, в блокнот.

    Снимок экрана: страница документации по ответу на запрос P I, на которой показан выделенный запрос U R I.

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

Чтобы вызвать веб-службу, потребуется URL-адрес конечной точки службы и ключа API для службы. Щелкните вкладку "Использование " в верхнем меню.

На странице сведений о потреблении отображаются сведения, необходимые для вызова веб-службы из кода. Скопируйте первичный ключ и URL-адрес ответа запроса. Эти действия потребуются в следующей главе.

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

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

Примечание.

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

  1. Откройте Unity и создайте проект Unity с именем MR_MachineLearning. Убедитесь, что для типа проекта задано значение 3D.

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

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

  4. Кроме того, убедитесь, что:

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

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

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

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

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

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

    6. Не беспокойтесь о настройке сцен прямо сейчас, так как они предоставляются позже.

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

      Снимок экрана: диалоговое окно

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

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

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

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

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

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

        Снимок экрана: вкладка

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

      • InternetClient;

        Снимок экрана: вкладка

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

      Снимок экрана: вкладка

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

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

  9. Сохраните проект (ФАЙЛ > SAVE PROJECT).

Глава 6. Импорт пакета MLProducts Unity

Для этого курса необходимо скачать пакет активов Unity с именем Azure-MR-307.unitypackage. Этот пакет поставляется в комплекте с сценой, со всеми объектами в этой предварительно созданной среде, чтобы сосредоточиться на получении всего рабочего. Скрипт ShelfKeeper предоставляется, хотя содержит только общедоступные переменные для целей настройки сцены. Вам потребуется выполнить все остальные разделы.

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

  1. На панели мониторинга Unity перед вами щелкните "Ресурсы " в меню в верхней части экрана, а затем выберите пункт "Импорт пакета", "Пользовательский пакет".

    Снимок экрана: панель мониторинга Unity, в которой показаны выделенные пункты меню

  2. Выберите пакет Azure-MR-307.unitypackage и нажмите кнопку "Открыть".

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

    Снимок экрана: диалоговое окно импорта пакета Unity, в котором показан импортируемый пакет Машинное обучение Azure.

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

    Снимок экрана: панель проекта Unity, в которой показаны только что импортированные папки в папке

  5. В папке "Панель проекта" щелкните папку "Сцены" и дважды щелкните сцену внутри (называется MR_MachineLearningScene). Сцена откроется (см. изображение ниже). Если красные бриллианты отсутствуют, просто нажмите кнопку Gizmos в правом верхнем углу игровой панели.

    Снимок экрана: окно сцены Unity, в котором показан выделенный пункт меню Gizmos в верхней области навигации.

Глава 7. Проверка библиотек DLL в Unity

Чтобы использовать использование библиотек JSON (используемых для сериализации и десериализации), библиотека DLL Newtonsoft была реализована с пакетом, который вы ввели. Библиотека должна иметь правильную конфигурацию, хотя стоит проверить (особенно если у вас возникли проблемы с кодом не работает).

Для этого:

  • Щелкните левой кнопкой мыши файл Newtonsoft в папке "Подключаемые модули" и просмотрите панель инспектора. Убедитесь, что любая платформа тикает. Перейдите на вкладку UWP и убедитесь, что не обрабатывается.

    Импорт библиотек DLL в Unity

Глава 8. Создание класса ShelfKeeper

Класс ShelfKeeper размещает методы, управляющие пользовательским интерфейсом и продуктами, которые рождены в сцене.

В рамках импортированного пакета вы получите этот класс, хотя он не является неполным. Теперь пришло время завершить этот класс:

  1. Дважды щелкните скрипт ShelfKeeper в папке "Скрипты ", чтобы открыть его с помощью Visual Studio 2017.

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

    using UnityEngine;
    
    public class ShelfKeeper : MonoBehaviour
    {
        /// <summary>
        /// Provides this class Singleton-like behavior
        /// </summary>
        public static ShelfKeeper instance;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for data
        /// </summary>
        public TextMesh dateText;
    
        /// <summary>
        /// Unity Inspector accessible Reference to the Text Mesh object needed for time
        /// </summary>
        public TextMesh timeText;
    
        /// <summary>
        /// Provides references to the spawn locations for the products prefabs
        /// </summary>
        public Transform[] spawnPoint;
    
        private void Awake()
        {
            instance = this;
        }
    
        /// <summary>
        /// Set the text of the date in the scene
        /// </summary>
        public void SetDate(string day, string month)
        {
            dateText.text = day + " " + month;
        }
    
        /// <summary>
        /// Set the text of the time in the scene
        /// </summary>
        public void SetTime(string hour)
        {
            timeText.text = hour + ":00";
        }
    
        /// <summary>
        /// Spawn a product on the shelf by providing the name and selling grade
        /// </summary>
        /// <param name="name"></param>
        /// <param name="sellingGrade">0 being the best seller</param>
        public void SpawnProduct(string name, int sellingGrade)
        {
            Instantiate(Resources.Load(name),
                spawnPoint[sellingGrade].transform.position, spawnPoint[sellingGrade].transform.rotation);
        }
    }
    
  3. Не забудьте сохранить изменения в Visual Studio , прежде чем вернуться в Unity.

  4. Вернитесь в редактор Unity, убедитесь, что класс ShelfKeeper выглядит следующим образом:

    Снимок экрана: класс

    Внимание

    Если скрипт не имеет ссылочных целевых объектов (т. е. Date (Text Mesh)), просто перетащите соответствующие объекты из панели иерархии в целевые поля. См. ниже описание, если требуется:

    1. Откройте массив Spawn Point в скрипте компонента ShelfKeeper, щелкнув его левой кнопкой мыши. В подразделе появится имя Size, указывающее размер массива. Введите 3 в текстовое поле рядом с размером и нажмите клавишу ВВОД, и под ним будут созданы три слота.

    2. В иерархии разверните объект отображения времени (щелкнув стрелку рядом с ней). Затем щелкните основную камеру из иерархии, чтобы инспектор отображал свои сведения.

    3. Выберите основную камеру на панели иерархии. Перетащите объекты даты и времени из панели иерархии в слоты текста даты и времени в инспекторе основной камеры в компоненте ShelfKeeper.

    4. Перетащите точки Spawn из панели иерархии (под объектом "Полка ") в целевые объекты ссылки на 3 элемента под массивом Spawn Point , как показано на изображении.

      Снимок экрана: панель иерархии, на которой показано, что пункты меню

Глава 9. Создание класса ProductPrediction

Следующий класс, который вы собираетесь создать, — это класс ProductPrediction .

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

  • Запрос экземпляра службы Машинное обучение, указав текущую дату и время.

  • Десериализация ответа JSON в полезные данные.

  • Интерпретация данных, получение 3 рекомендуемых продуктов.

  • Вызов методов класса ShelfKeeper для отображения данных в сцене.

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

  1. Перейдите в папку "Скрипты" на панели проекта.

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

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

  4. Если появится диалоговое окно "Обнаруженное изменение файла", нажмите кнопку *Перезагрузить решение.

  5. Добавьте следующие пространства имен в начало класса ProductPrediction:

    using System;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Linq;
    using Newtonsoft.Json;
    using UnityEngine.Networking;
    using System.Runtime.Serialization;
    using System.Collections;
    
  6. Внутри класса ProductPrediction вставьте следующие два объекта, состоящие из ряда вложенных классов. Эти классы используются для сериализации и десериализации JSON для службы Машинное обучение.

        /// <summary>
        /// This object represents the Prediction request
        /// It host the day of the year and hour of the day
        /// The product must be left blank when serialising
        /// </summary>
        public class RootObject
        {
            public Inputs Inputs { get; set; }
        }
    
        public class Inputs
        {
            public Input1 input1 { get; set; }
        }
    
        public class Input1
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
        /// <summary>
        /// This object containing the deserialised Prediction result
        /// It host the list of the products
        /// and the likelihood of them being sold at current date and time
        /// </summary>
        public class Prediction
        {
            public Results Results { get; set; }
        }
    
        public class Results
        {
            public Output1 output1;
        }
    
        public class Output1
        {
            public string type;
            public Value value;
        }
    
        public class Value
        {
            public List<string> ColumnNames { get; set; }
            public List<List<string>> Values { get; set; }
        }
    
  7. Затем добавьте следующие переменные над предыдущим кодом (чтобы связанный код JSON был в нижней части скрипта, ниже всего остального кода и выходит из пути):

        /// <summary>
        /// The 'Primary Key' from your Machine Learning Portal
        /// </summary>
        private string authKey = "-- Insert your service authentication key here --";
    
        /// <summary>
        /// The 'Request-Response' Service Endpoint from your Machine Learning Portal
        /// </summary>
        private string serviceEndpoint = "-- Insert your service endpoint here --";
    
        /// <summary>
        /// The Hour as set in Windows
        /// </summary>
        private string thisHour;
    
        /// <summary>
        /// The Day, as set in Windows
        /// </summary>
        private string thisDay;
    
        /// <summary>
        /// The Month, as set in Windows
        /// </summary>
        private string thisMonth;
    
        /// <summary>
        /// The Numeric Day from current Date Conversion
        /// </summary>
        private string dayOfTheYear;
    
        /// <summary>
        /// Dictionary for holding the first (or default) provided prediction 
        /// from the Machine Learning Experiment
        /// </summary>    
        private Dictionary<string, string> predictionDictionary;
    
        /// <summary>
        /// List for holding product prediction with name and scores
        /// </summary>
        private List<KeyValuePair<string, double>> keyValueList;
    

    Внимание

    Обязательно вставьте первичный ключ и конечную точку ответа запроса на портале Машинное обучение в переменные. На приведенных ниже изображениях показано, откуда вы взяли ключ и конечную точку.

    Снимок экрана: Машинное обучение Microsoft Azure Studio, на котором показана ссылка

    Снимок экрана: страница документации по ответу на запрос P I, в которой показан выделенный запрос POST Request U R I.

  8. Вставьте этот код в метод Start(). Метод Start() вызывается при инициализации класса:

        void Start()
        {
            // Call to get the current date and time as set in Windows
            GetTodayDateAndTime();
    
            // Call to set the HOUR in the UI
            ShelfKeeper.instance.SetTime(thisHour);
    
            // Call to set the DATE in the UI
            ShelfKeeper.instance.SetDate(thisDay, thisMonth);
    
            // Run the method to Get Predication from Azure Machine Learning
            StartCoroutine(GetPrediction(thisHour, dayOfTheYear));
        }
    
  9. Ниже приведен метод, который собирает дату и время из Windows и преобразует его в формат, который наш Машинное обучение Эксперимент может использовать для сравнения с данными, хранящимися в таблице.

        /// <summary>
        /// Get current date and hour
        /// </summary>
        private void GetTodayDateAndTime()
        {
            // Get today date and time
            DateTime todayDate = DateTime.Now;
    
            // Extrapolate the HOUR
            thisHour = todayDate.Hour.ToString();
    
            // Extrapolate the DATE
            thisDay = todayDate.Day.ToString();
            thisMonth = todayDate.ToString("MMM");
    
            // Extrapolate the day of the year
            dayOfTheYear = todayDate.DayOfYear.ToString();
        }
    
  10. Метод Update() можно удалить, так как этот класс не будет использовать его.

  11. Добавьте следующий метод, который будет передавать текущую дату и время в конечную точку Машинное обучение и получать ответ в формате JSON.

        private IEnumerator GetPrediction(string timeOfDay, string dayOfYear)
        {
            // Populate the request object 
            // Using current day of the year and hour of the day
            RootObject ro = new RootObject
            {
                Inputs = new Inputs
                {
                    input1 = new Input1
                    {
                        ColumnNames = new List<string>
                        {
                            "day",
                            "hour",
                        "product"
                        },
                        Values = new List<List<string>>()
                    }
                }
            };
    
            List<string> l = new List<string>
            {
                dayOfYear,
                timeOfDay,
                ""
            };
    
            ro.Inputs.input1.Values.Add(l);
    
            Debug.LogFormat("Score request built");
    
            // Serialize the request
            string json = JsonConvert.SerializeObject(ro);
    
            using (UnityWebRequest www = UnityWebRequest.Post(serviceEndpoint, "POST"))
            {
                byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(json);
                www.uploadHandler = new UploadHandlerRaw(jsonToSend);
    
                www.downloadHandler = new DownloadHandlerBuffer();
                www.SetRequestHeader("Authorization", "Bearer " + authKey);
                www.SetRequestHeader("Content-Type", "application/json");
                www.SetRequestHeader("Accept", "application/json");
    
                yield return www.SendWebRequest();
                string response = www.downloadHandler.text;
    
                // Deserialize the response
                DataContractSerializer serializer;
                serializer = new DataContractSerializer(typeof(string));
                DeserialiseJsonResponse(response);
            }
        }
    
  12. Добавьте следующий метод, который отвечает за десериализацию ответа JSON и передачу результата десериализации классу ShelfKeeper . Этот результат будет имена трех элементов, прогнозируемых для продажи наиболее в текущий момент даты и времени. Вставьте приведенный ниже код в класс ProductPrediction под предыдущим методом.

        /// <summary>
        /// Deserialize the response received from the Machine Learning portal
        /// </summary>
        public void DeserialiseJsonResponse(string jsonResponse)
        {
            // Deserialize JSON
            Prediction prediction = JsonConvert.DeserializeObject<Prediction>(jsonResponse);
            predictionDictionary = new Dictionary<string, string>();
    
            for (int i = 0; i < prediction.Results.output1.value.ColumnNames.Count; i++)
            {
                if (prediction.Results.output1.value.Values[0][i] != null)
                {
                    predictionDictionary.Add(prediction.Results.output1.value.ColumnNames[i], prediction.Results.output1.value.Values[0][i]);
                }
            }
    
            keyValueList = new List<KeyValuePair<string, double>>();
    
            // Strip all non-results, by adding only items of interest to the scoreList
            for (int i = 0; i < predictionDictionary.Count; i++)
            {
                KeyValuePair<string, string> pair = predictionDictionary.ElementAt(i);
                if (pair.Key.StartsWith("Scored Probabilities"))
                {
                    // Parse string as double then simplify the string key so to only have the item name
                    double scorefloat = 0f;
                    double.TryParse(pair.Value, out scorefloat);
                    string simplifiedName =
                        pair.Key.Replace("\"", "").Replace("Scored Probabilities for Class", "").Trim();
                    keyValueList.Add(new KeyValuePair<string, double>(simplifiedName, scorefloat));
                }
            }
    
            // Sort Predictions (results will be lowest to highest)
            keyValueList.Sort((x, y) => y.Value.CompareTo(x.Value));
    
            // Spawn the top three items, from the keyValueList, which we have sorted
            for (int i = 0; i < 3; i++)
            {
                ShelfKeeper.instance.SpawnProduct(keyValueList[i].Key, i);
            }
    
            // Clear lists in case of reuse
            keyValueList.Clear();
            predictionDictionary.Clear();
        }
    
  13. Сохраните Visual Studio и вернитесь в Unity.

  14. Перетащите скрипт класса ProductPrediction из папки Script в объект Main Camera .

  15. Сохраните сцену и файл проекта>, сохраните сцену или проект сохранения файла.>

Глава 10. Создание решения UWP

Теперь пришло время создать проект в качестве решения UWP, чтобы он может работать в качестве автономного приложения.

Чтобы создать:

  1. Сохраните текущую сцену, щелкнув сцены сохранения файлов>.

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

  3. Установите флажок "Проекты Unity C#" (это важно, так как это позволит изменять классы после завершения сборки).

  4. Нажмите кнопку "Добавить открытые сцены",

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

    Снимок экрана: диалоговое окно

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

  7. Создайте папку BUILDS и в ней создайте другую папку с соответствующим именем.

  8. Щелкните новую папку и нажмите кнопку "Выбрать папку", чтобы начать сборку в этом расположении.

    Снимок экрана: окно проводник, в котором показана выделенная папка

    Снимок экрана: окно проводник, в котором отображается содержимое папки

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

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

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

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

  2. При открытии Visual Studio необходимо восстановить пакеты NuGet, которые можно выполнить, щелкнув правой кнопкой мыши решение MachineLearningLab_Build, из Обозреватель решений (находится справа от Visual Studio), а затем щелкните "Восстановить пакеты NuGet":

    Снимок экрана: окно Visual Studio, в котором показан выделенный пункт меню

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

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

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

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

    Снимок экрана: меню Microsoft Visual Studio, в котором показано, что локальный компьютер выбран на платформе решения.

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

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

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

Готовое приложение Машинное обучение

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

Снимок экрана: окно Microsoft Visual Studio, на котором показана полка с тремя объектами и карточкой с текстом 15 часов 23 февраля.

Упражнения

Упражнение 1

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

Упражнение 2

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