HoloLens (1-го поколения) и Azure 307: машинное обучение
Примечание.
Руководства Mixed Reality Academy были разработаны для иммерсивных гарнитур HoloLens (1-го поколения) и иммерсивных гарнитур Mixed Reality. Поэтому мы считаем, что важно оставить эти руководства для разработчиков, которые ищут рекомендации по разработке для этих устройств. Данные руководства не будут обновляться с учетом последних наборов инструментов или возможностей взаимодействия для HoloLens 2. Они будут сохранены для работы на поддерживаемых устройствах. В будущем будет появиться новая серия учебников, которые будут размещены в будущем, которые продемонстрировали, как разрабатывать для HoloLens 2. Это уведомление будет обновлено со ссылкой на эти учебники при публикации.
В этом курсе вы узнаете, как добавить возможности Машинное обучение (ML) в приложение смешанной реальности с помощью Машинное обучение Azure Studio (классическая модель).
Машинное обучение Azure Studio (классическая) — это служба Майкрософт, которая предоставляет разработчикам большое количество алгоритмов машинного обучения, которые могут помочь с вводом данных, выводом, подготовкой и визуализацией. Из этих компонентов можно затем разработать эксперимент прогнозной аналитики, выполнить итерацию и использовать его для обучения модели. После обучения вы можете сделать модель операционной в облаке Azure, чтобы затем оценить новые данные. Дополнительные сведения см. на странице Машинное обучение Azure Studio (классическая версия).
Завершив этот курс, вы получите иммерсивное приложение гарнитуры смешанной реальности и узнали, как сделать следующее:
- Предоставьте таблицу данных о продажах на портале Машинное обучение Azure Studio (классической) и спроектируйте алгоритм прогнозирования будущих продаж популярных элементов.
- Создайте проект Unity, который может получать и интерпретировать данные прогнозирования из службы машинного обучения.
- Отображение данных предикаций визуально в проекте Unity с помощью предоставления наиболее популярных элементов продаж на полке.
В приложении вы узнаете, как интегрировать результаты с проектом. Этот курс предназначен для обучения интеграции службы Azure с проектом Unity. Это ваша задача использовать знания, полученные от этого курса, чтобы улучшить ваше приложение смешанной реальности.
Этот курс является автономным учебником, который не напрямую включает другие Смешанная реальность Лаборатории.
Поддержка устройств
Курс | HoloLens | Иммерсивные гарнитуры |
---|---|---|
MR и Azure 307: машинное обучение | ✔️ | ✔️ |
Примечание.
Хотя этот курс в основном ориентирован на гарнитуры Windows Смешанная реальность иммерсивные (VR), вы также можете применить то, что вы узнаете в этом курсе к Microsoft HoloLens. При выполнении курса вы увидите заметки о любых изменениях, которые могут потребоваться для поддержки HoloLens. При использовании HoloLens вы можете заметить некоторое эхо во время записи голоса.
Предварительные требования
Примечание.
Это руководство предназначено для разработчиков, имеющих базовый опыт работы с Unity и C#. Также помните, что предварительные требования и письменные инструкции в этом документе представляют тестируемые и проверенные на момент написания статьи (май 2018 г.). Вы можете использовать последнее программное обеспечение, как указано в статье об установке инструментов, хотя не следует предполагать, что информация в этом курсе будет идеально соответствовать тому, что вы найдете в новом программном обеспечении, чем указано ниже.
Для этого курса рекомендуется использовать следующее оборудование и программное обеспечение:
- Компьютер разработки, совместимый с Windows Смешанная реальность для разработки иммерсивной гарнитуры (VR)
- Windows 10 Fall Creators Update (или более поздней версии) с включенным режимом разработчика
- Последний пакет SDK для Windows 10
- Unity 2017.4
- Visual Studio 2017
- Гарнитура Windows Смешанная реальность иммерсивной (VR) или Microsoft HoloLens с включенным режимом разработчика
- Доступ к Интернету для установки Azure и извлечения данных машинного обучения
Перед началом работы
Чтобы избежать проблем с сборкой этого проекта, настоятельно рекомендуется создать проект, упомянутый в этом руководстве, в корневой или почти корневой папке (длинные пути к папкам могут вызвать проблемы во время сборки).
Глава 1. Настройка учетной записи служба хранилища Azure
Чтобы использовать API Переводчика Azure, необходимо настроить экземпляр службы, который будет доступен приложению.
Войдите на портал Azure.
Примечание.
Если у вас еще нет учетной записи Azure, необходимо создать ее. Если вы используете это руководство в классе или лаборатории, попросите преподавателя или одного из прокторов, чтобы помочь настроить новую учетную запись.
После входа щелкните учетные записи хранения в меню слева.
Примечание.
Возможно, слово New было заменено на создание ресурса на более новых порталах.
На вкладке "Учетные записи хранения" нажмите кнопку "Добавить".
На панели "Создание учетной записи хранения":
Вставьте имя учетной записи, учитывайте, что это поле принимает только цифры и строчные буквы.
Для модели развертывания выберите Resource Manager.
Для типа учетной записи выберите хранилище (общего назначения версии 1).
В разделе Производительность выберите Стандартная.
Для репликации выберите геоизбыточное хранилище с доступом для чтения (RA-GRS).
Оставьте безопасную передачу необходимой в качестве отключенной.
Выберите подписку.
Выберите группу ресурсов или создайте новую. Группа ресурсов предоставляет способ мониторинга, контроля доступа, подготовки и управления выставлением счетов для коллекции ресурсов Azure. Рекомендуется сохранить все службы Azure, связанные с одним проектом (например, такими, как эти лаборатории), в общей группе ресурсов.
Если вы хотите узнать больше о группах ресурсов Azure, посетите статью группы ресурсов.
Определите расположение группы ресурсов (если вы создаете новую группу ресурсов). Расположение в идеале будет находиться в регионе, где будет выполняться приложение. Некоторые ресурсы Azure доступны только в определенных регионах.
Вам также потребуется подтвердить, что вы поняли условия, примененные к этой службе.
После нажатия кнопки "Создать" вам придется ждать создания службы, это может занять минуту.
Уведомление появится на портале после создания экземпляра службы.
Глава 2. Студия Машинное обучение Azure (классическая версия)
Чтобы использовать Машинное обучение Azure, необходимо настроить экземпляр службы Машинное обучение для предоставления доступа к приложению.
На портале Azure щелкните "Создать" в левом верхнем углу и найдите Машинное обучение Studio Workspace, нажмите клавишу ВВОД.
Новая страница предоставит описание службы рабочей области Машинное обучение Studio. В нижней левой части этого запроса нажмите кнопку "Создать ", чтобы создать связь с этой службой.
После нажатия кнопки "Создать" появится панель, в которой необходимо указать некоторые сведения о новой службе Машинное обучение Studio:
Вставьте требуемое имя рабочей области для этого экземпляра службы.
Выберите подписку.
Выберите группу ресурсов или создайте новую. Группа ресурсов предоставляет способ мониторинга, контроля доступа, подготовки и управления выставлением счетов для коллекции ресурсов Azure. Рекомендуется сохранить все службы Azure, связанные с одним проектом (например, такими, как эти лаборатории), в общей группе ресурсов.
Если вы хотите узнать больше о группах ресурсов Azure, посетите статью группы ресурсов.
Определите расположение группы ресурсов (если вы создаете новую группу ресурсов). Расположение в идеале будет находиться в регионе, где будет выполняться приложение. Некоторые ресурсы Azure доступны только в определенных регионах. Следует использовать ту же группу ресурсов, которую вы использовали для создания служба хранилища Azure в предыдущей главе.
В разделе учетной записи хранения щелкните "Использовать существующий", а затем щелкните раскрывающееся меню и выберите учетную запись хранения, созданную в последней главе.
Выберите соответствующую ценовую категорию рабочей области в раскрывающемся меню.
В разделе плана веб-службы нажмите кнопку "Создать", а затем вставьте имя в текстовое поле.
В разделе ценовой категории "План веб-служб" выберите ценовую категорию . Уровень тестирования разработки с именем DEVTEST Standard должен быть доступен вам без платы.
Вам также потребуется подтвердить, что вы поняли условия, примененные к этой службе.
Нажмите кнопку Создать.
После нажатия кнопки "Создать" вам придется ждать создания службы, это может занять минуту.
Уведомление появится на портале после создания экземпляра службы.
Щелкните уведомление, чтобы изучить новый экземпляр службы.
Нажмите кнопку "Перейти к ресурсу " в уведомлении, чтобы изучить новый экземпляр службы.
На странице, отображаемой в разделе "Дополнительные ссылки", нажмите кнопку "Запустить Машинное обучение Studio", которая будет направлять браузер на портал Машинное обучение Studio.
Нажмите кнопку "Войти" в правом верхнем углу или в центре, чтобы войти в Машинное обучение Studio (классическая версия).
Глава 3. Машинное обучение Studio (классическая версия): настройка набора данных
Одним из способов Машинное обучение алгоритмов является анализ существующих данных, а затем попытка прогнозировать будущие результаты на основе существующего набора данных. Как правило, это означает, что чем больше существующих данных у вас есть, тем лучше алгоритм будет прогнозировать будущие результаты.
Для этого курса предоставляется пример таблицы с именем ProductsTableCSV и можно скачать здесь.
Внимание
Приведенный выше файл .zip содержит как ProductsTableCSV, так и пакет unitypackage, который потребуется в главе 6. Этот пакет также предоставляется в этой главе, хотя и отдельно от CSV-файла.
Этот пример набора данных содержит запись самых продаваемых объектов каждый час каждого дня года 2017 года.
Например, на 1-й день 2017 года в 1 вечера (час 13), самый продаваемый элемент был солью и перцем.
Эта примерная таблица содержит записи 9998.
Вернитесь на портал Машинное обучение Studio (классическая версия) и добавьте эту таблицу в качестве набора данных для машинного обучения. Для этого нажмите кнопку +Создать в левом нижнем углу экрана.
Раздел появится снизу и в пределах панели навигации слева. Щелкните набор данных справа от этого, из локального файла.
Передайте новый набор данных, выполнив следующие действия.
Откроется окно отправки, где можно просмотреть жесткий диск для нового набора данных.
После выбора и обратно в окне отправки оставьте флажок незамеченным.
В текстовом поле ниже введите ProductsTableCSV.csv в качестве имени набора данных (хотя следует автоматически добавить).
В раскрывающемся меню типа выберите универсальный CSV-файл с заголовком (.csv).
Нажмите галочку в правом нижнем углу окна отправки, и ваш набор данных будет отправлен.
Глава 4. Студия Машинное обучение (классическая): Эксперимент
Прежде чем создать систему машинного обучения, необходимо будет создать эксперимент, чтобы проверить теорию о данных. С результатами вы узнаете, требуется ли больше данных или нет корреляции между данными и возможным результатом.
Чтобы начать создание эксперимента, выполните следующее:
Снова нажмите кнопку +Создать в левом нижнем углу страницы, а затем щелкните "Эксперимент>пустой эксперимент".
Откроется новая страница с пустым экспериментом:
На панели слева разверните сохраненные наборы данных Мои наборы> данных и перетащите ProductsTableCSV на холст эксперимента.
На панели слева разверните пример преобразования>данных и разделите их. Затем перетащите элемент разделенных данных в холст эксперимента. Элемент разделенных данных разделит набор данных на две части. Одна часть, используемая для обучения алгоритма машинного обучения. Вторая часть будет использоваться для оценки точности созданного алгоритма.
На правой панели (при выборе элемента разделенных данных на холсте) измените долю строк в первом выходном наборе данных на 0,7. Это разделит данные на две части, первая часть будет составлять 70 % данных, а вторая — оставшиеся 30 %. Чтобы убедиться, что данные разделены случайным образом, убедитесь , что флажок "Случайный разбиение " остается установлен.
Перетащите соединение из базы элемента ProductsTableCSV на холсте в начало элемента Split Data. Это приведет к подключению элементов и отправке выходных данных набора данных ProductsTableCSV (данных) в входные данные разделения данных.
На панели "Эксперименты" слева разверните узел Машинное обучение> Train. Перетащите элемент "Обучение модели " в холст эксперимента. Холст должен выглядеть так же, как показано ниже.
В левом нижнем углу элемента разделенных данных перетащите подключение вправо от элемента "Обучение модели". Первый 70 % от набора данных будет использоваться моделью обучения для обучения алгоритма.
Выберите элемент "Обучение модели" на холсте и на панели "Свойства" (в правой части окна браузера) нажмите кнопку "Запустить селектор столбца".
В текстовом поле введите продукт , а затем нажмите клавишу ВВОД, продукт будет задан как столбец для обучения прогнозов. После этого щелкните галочку в правом нижнем углу, чтобы закрыть диалоговое окно выбора.
Вы собираетесь обучить алгоритм многоклассовой логистической регрессии , чтобы предсказать наиболее проданный продукт на основе часа дня и даты. Это выходит за рамки этого документа, чтобы объяснить подробные сведения о различных алгоритмах, предоставляемых Студия машинного обучения Azure, однако вы можете узнать больше из Машинное обучение листа алгоритмов
На панели элементов эксперимента слева разверните Машинное обучение> Initialize Model>Classification и перетащите элемент многоклассовой логистической регрессии на холст эксперимента.
Подключите выходные данные, начиная с нижней части многоклассовой логистической регрессии, к левому верхнему входу элемента модели обучения.
В списке элементов эксперимента на панели слева разверните Машинное обучение> Score и перетащите элемент "Оценка модели" на холст.
Подключите выходные данные из нижней части модели обучения к левому верхнему входному значению модели оценки.
Подключите выходные данные в правом нижнем углу из разделения данных к правому верхнему краю элемента модели оценки.
В списке элементов эксперимента на панели слева разверните узел Машинное обучение> Evaluate и перетащите элемент "Оценка модели" на холст.
Подключите выходные данные из модели оценки к левому верхнему входу модели оценки.
Вы создали свой первый Машинное обучение эксперимент. Теперь вы можете сохранить и запустить эксперимент. В меню в нижней части страницы нажмите кнопку "Сохранить", чтобы сохранить эксперимент, а затем нажмите кнопку "Запустить ", чтобы запустить эксперимент.
Состояние эксперимента можно увидеть в правом верхнем углу холста. Подождите несколько минут, пока эксперимент завершится.
Если у вас есть большой (реальный) набор данных, скорее всего, эксперимент может занять несколько часов.
Щелкните правой кнопкой мыши элемент "Оценка модели" на холсте и в контекстном меню наведите указатель мыши на результаты оценки, а затем выберите "Визуализировать".
Результаты оценки отображаются с прогнозируемыми результатами и фактическими результатами. Для оценки модели используется 30 % исходного набора данных, разделенного ранее. Вы увидите, что результаты не велики, в идеале у вас будет наибольшее число в каждой строке в столбцах.
Закройте результаты.
Чтобы использовать новую обученную Машинное обучение модель, необходимо предоставить ее как веб-службу. Для этого щелкните пункт меню "Настройка веб-службы " в меню в нижней части страницы и щелкните "Прогнозная веб-служба".
Будет создана новая вкладка, а модель обучения объединена для создания новой веб-службы.
В меню в нижней части страницы нажмите кнопку "Сохранить", а затем нажмите кнопку "Выполнить". Состояние будет обновлено в правом верхнем углу холста эксперимента.
После завершения работы кнопка "Развернуть веб-службу " появится в нижней части страницы. Вы готовы развернуть веб-службу. В меню в нижней части страницы щелкните " Развернуть веб-службу (классическая модель").
В браузере может потребоваться разрешить всплывающее окно, которое необходимо разрешить, хотя вам может потребоваться снова нажать клавишу Deploy Web Service , если страница развертывания не отображается.
После создания эксперимента вы будете перенаправлены на страницу панели мониторинга, где будет отображаться ключ API. Скопируйте его в блокнот на данный момент, вам потребуется в коде в ближайшее время. После того как вы заметите ключ API, нажмите кнопку REQUEST/RESPONSE в разделе "Конечная точка по умолчанию" в разделе "Ключ".
Примечание.
При нажатии кнопки "Тест" на этой странице вы сможете ввести входные данные и просмотреть выходные данные. Введите день и час. Оставьте запись продукта пустой. Затем нажмите кнопку "Подтвердить ". Выходные данные на нижней части страницы будут отображать JSON, представляющие вероятность выбора каждого продукта.
Откроется новая веб-страница, отображающая инструкции и некоторые примеры структуры запроса, требуемой Машинное обучение Studio (классическая модель). Скопируйте URI запроса, отображаемый на этой странице, в блокнот.
Теперь вы создали систему машинного обучения, которая предоставляет наиболее вероятный продукт, который будет продаваться на основе исторических данных приобретения, коррелирует с временем дня и дня года.
Чтобы вызвать веб-службу, потребуется URL-адрес конечной точки службы и ключа API для службы. Щелкните вкладку "Использование " в верхнем меню.
На странице сведений о потреблении отображаются сведения, необходимые для вызова веб-службы из кода. Скопируйте первичный ключ и URL-адрес ответа запроса. Эти действия потребуются в следующей главе.
Глава 5. Настройка проекта Unity
Настройте и проверьте Смешанная реальность иммерсивную гарнитуру.
Примечание.
Для этого курса вам не потребуются контроллеры движения. Если вам нужна поддержка настройки иммерсивной гарнитуры, щелкните ЗДЕСЬ.
Откройте Unity и создайте проект Unity с именем MR_MachineLearning. Убедитесь, что для типа проекта задано значение 3D.
При открытии Unity стоит проверить, установлен ли редактор скриптов по умолчанию в Visual Studio. Перейдите к разделу "Изменить>параметры", а затем в новом окне перейдите к внешним средствам. Измените внешний редактор скриптов на Visual Studio 2017. Закройте окно параметров.
Затем перейдите к параметрам сборки файлов>и переключите платформу на универсальная платформа Windows, нажав кнопку "Переключить платформу".
Кроме того, убедитесь, что:
Целевое устройство имеет значение Any Device.
Для Microsoft HoloLens задайте для целевого устройства значение HoloLens.
Тип сборки имеет значение D3D.
Для пакета SDK установлено значение "Последняя версия".
Версия Visual Studio установлена в качестве последней версии.
Для сборки и запуска задано значение Local Machine.
Не беспокойтесь о настройке сцен прямо сейчас, так как они предоставляются позже.
Остальные параметры должны оставаться по умолчанию.
В окне "Параметры сборки" нажмите кнопку "Параметры проигрывателя", откроется связанная панель в пространстве, где находится инспектор.
На этой панели необходимо проверить несколько параметров:
На вкладке "Другие параметры" :
Версия среды выполнения сценариев должна быть экспериментальной (эквивалентно .NET 4.6)
Серверная часть скриптов должна быть .NET
Уровень совместимости API должен быть .NET 4.6
На вкладке "Параметры публикации" в разделе "Возможности" проверьте:
InternetClient;
Далее вниз по панели в параметрах XR (приведенных ниже параметров публикации), установите флажок "Поддержка виртуальной реальности", убедитесь, что пакет SDK для Windows Смешанная реальность добавлен.
Вернувшись в параметры сборки проектов C# Unity, больше не отображается серым цветом. Установите флажок рядом с этим.
Закройте окно Build Settings (Параметры сборки).
Сохраните проект (ФАЙЛ > SAVE PROJECT).
Глава 6. Импорт пакета MLProducts Unity
Для этого курса необходимо скачать пакет активов Unity с именем Azure-MR-307.unitypackage. Этот пакет поставляется в комплекте с сценой, со всеми объектами в этой предварительно созданной среде, чтобы сосредоточиться на получении всего рабочего. Скрипт ShelfKeeper предоставляется, хотя содержит только общедоступные переменные для целей настройки сцены. Вам потребуется выполнить все остальные разделы.
Чтобы импортировать этот пакет, выполните указанные ниже действия.
На панели мониторинга Unity перед вами щелкните "Ресурсы " в меню в верхней части экрана, а затем выберите пункт "Импорт пакета", "Пользовательский пакет".
Выберите пакет Azure-MR-307.unitypackage и нажмите кнопку "Открыть".
Список компонентов для этого ресурса будет отображаться. Подтвердите импорт, нажав кнопку "Импорт".
После завершения импорта вы увидите, что некоторые новые папки появились на панели проектов Unity. Это трехмерные модели и соответствующие материалы, которые являются частью предварительно созданной сцены, над которыми вы будете работать. В этом курсе вы напишете большую часть кода.
В папке "Панель проекта" щелкните папку "Сцены" и дважды щелкните сцену внутри (называется MR_MachineLearningScene). Сцена откроется (см. изображение ниже). Если красные бриллианты отсутствуют, просто нажмите кнопку Gizmos в правом верхнем углу игровой панели.
Глава 7. Проверка библиотек DLL в Unity
Чтобы использовать использование библиотек JSON (используемых для сериализации и десериализации), библиотека DLL Newtonsoft была реализована с пакетом, который вы ввели. Библиотека должна иметь правильную конфигурацию, хотя стоит проверить (особенно если у вас возникли проблемы с кодом не работает).
Для этого:
Щелкните левой кнопкой мыши файл Newtonsoft в папке "Подключаемые модули" и просмотрите панель инспектора. Убедитесь, что любая платформа тикает. Перейдите на вкладку UWP и убедитесь, что не обрабатывается.
Глава 8. Создание класса ShelfKeeper
Класс ShelfKeeper размещает методы, управляющие пользовательским интерфейсом и продуктами, которые рождены в сцене.
В рамках импортированного пакета вы получите этот класс, хотя он не является неполным. Теперь пришло время завершить этот класс:
Дважды щелкните скрипт ShelfKeeper в папке "Скрипты ", чтобы открыть его с помощью Visual Studio 2017.
Замените весь код, существующий в скрипте, следующим кодом, который задает время и дату и имеет метод для отображения продукта.
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); } }
Не забудьте сохранить изменения в Visual Studio , прежде чем вернуться в Unity.
Вернитесь в редактор Unity, убедитесь, что класс ShelfKeeper выглядит следующим образом:
Внимание
Если скрипт не имеет ссылочных целевых объектов (т. е. Date (Text Mesh)), просто перетащите соответствующие объекты из панели иерархии в целевые поля. См. ниже описание, если требуется:
Откройте массив Spawn Point в скрипте компонента ShelfKeeper, щелкнув его левой кнопкой мыши. В подразделе появится имя Size, указывающее размер массива. Введите 3 в текстовое поле рядом с размером и нажмите клавишу ВВОД, и под ним будут созданы три слота.
В иерархии разверните объект отображения времени (щелкнув стрелку рядом с ней). Затем щелкните основную камеру из иерархии, чтобы инспектор отображал свои сведения.
Выберите основную камеру на панели иерархии. Перетащите объекты даты и времени из панели иерархии в слоты текста даты и времени в инспекторе основной камеры в компоненте ShelfKeeper.
Перетащите точки Spawn из панели иерархии (под объектом "Полка ") в целевые объекты ссылки на 3 элемента под массивом Spawn Point , как показано на изображении.
Глава 9. Создание класса ProductPrediction
Следующий класс, который вы собираетесь создать, — это класс ProductPrediction .
Этот класс отвечает за:
Запрос экземпляра службы Машинное обучение, указав текущую дату и время.
Десериализация ответа JSON в полезные данные.
Интерпретация данных, получение 3 рекомендуемых продуктов.
Вызов методов класса ShelfKeeper для отображения данных в сцене.
Чтобы создать этот класс, выполните указанные ниже действия.
Перейдите в папку "Скрипты" на панели проекта.
Щелкните правой кнопкой мыши в папке скрипт >C#. Вызовите скрипт ProductPrediction.
Дважды щелкните новый скрипт ProductPrediction , чтобы открыть его с помощью Visual Studio 2017.
Если появится диалоговое окно "Обнаруженное изменение файла", нажмите кнопку *Перезагрузить решение.
Добавьте следующие пространства имен в начало класса 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;
Внутри класса 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; } }
Затем добавьте следующие переменные над предыдущим кодом (чтобы связанный код 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;
Внимание
Обязательно вставьте первичный ключ и конечную точку ответа запроса на портале Машинное обучение в переменные. На приведенных ниже изображениях показано, откуда вы взяли ключ и конечную точку.
Вставьте этот код в метод 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)); }
Ниже приведен метод, который собирает дату и время из 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(); }
Метод Update() можно удалить, так как этот класс не будет использовать его.
Добавьте следующий метод, который будет передавать текущую дату и время в конечную точку Машинное обучение и получать ответ в формате 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); } }
Добавьте следующий метод, который отвечает за десериализацию ответа 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(); }
Сохраните Visual Studio и вернитесь в Unity.
Перетащите скрипт класса ProductPrediction из папки Script в объект Main Camera .
Сохраните сцену и файл проекта>, сохраните сцену или проект сохранения файла.>
Глава 10. Создание решения UWP
Теперь пришло время создать проект в качестве решения UWP, чтобы он может работать в качестве автономного приложения.
Чтобы создать:
Сохраните текущую сцену, щелкнув сцены сохранения файлов>.
Перейдите к параметрам сборки файлов>
Установите флажок "Проекты Unity C#" (это важно, так как это позволит изменять классы после завершения сборки).
Нажмите кнопку "Добавить открытые сцены",
Нажмите кнопку " Создать".
Вам будет предложено выбрать папку, в которой вы хотите создать решение.
Создайте папку BUILDS и в ней создайте другую папку с соответствующим именем.
Щелкните новую папку и нажмите кнопку "Выбрать папку", чтобы начать сборку в этом расположении.
После завершения сборки Unity (может потребоваться некоторое время), откроется окно проводник в расположении сборки (проверьте панель задач, так как она может не всегда отображаться над окнами, но уведомит вас о добавлении нового окна).
Глава 11. Развертывание приложения
Чтобы развернуть приложение, выполните приведенные действия.
Перейдите к новой сборке Unity (папке приложения) и откройте файл решения с помощью Visual Studio.
При открытии Visual Studio необходимо восстановить пакеты NuGet, которые можно выполнить, щелкнув правой кнопкой мыши решение MachineLearningLab_Build, из Обозреватель решений (находится справа от Visual Studio), а затем щелкните "Восстановить пакеты NuGet":
В разделе "Конфигурация решения" выберите "Отладка".
На платформе решения выберите x86, Локальный компьютер.
Для Microsoft HoloLens это может быть проще установить на удаленный компьютер, чтобы вы не были подключены к компьютеру. Однако вам также потребуется выполнить следующие действия:
- Ознакомься с IP-адресом HoloLens, который можно найти в > разделе "Параметры сети" и "Расширенные параметры Интернета > Wi-Fi>".IPv4 — это адрес, который следует использовать.
- Убедитесь, что режим разработчика включен; в разделе "Параметры > обновления" и "Безопасность > для разработчиков".
Перейдите в меню "Сборка" и щелкните "Развернуть решение ", чтобы загрузить неопубликованное приложение на компьютер.
Теперь приложение должно отображаться в списке установленных приложений, готовых к запуску.
При запуске приложения Смешанная реальность вы увидите скамейку, настроенную в сцене Unity, и после инициализации данные, настроенные в Azure, будут получены. Данные будут десериализированы в приложении, а три лучших результата для текущей даты и времени будут представлены визуально, как три модели на скамейке.
Готовое приложение Машинное обучение
Поздравляем, вы создали приложение смешанной реальности, которое использует Машинное обучение Azure для прогнозирования данных и отображения его на сцене.
Упражнения
Упражнение 1
Поэкспериментируйте с порядком сортировки приложения и на полке отображаются три нижних прогноза, так как эти данные потенциально будут полезны.
Упражнение 2
Использование таблиц Azure заполняет новую таблицу сведениями о погоде и создает новый эксперимент с помощью данных.