В этом тьюториале нам предлагается сделать облачное решение, которое будет накапливать в облаке наши позитивные и негативные эмоции и предоставлять аналитику.
Приложение находится в этом репозитории GitHub. Для начала необходимо его скачать, скомпилировать и запустить.
- Если вы используете командную строку - клонируйте репозиторий в какое-нибудь удобное место:
git clone https://github.com/evangelism/FaceRecognitionTracker
Если вы не пользуетесь git, вы можете скачать ZIP-версию исходного кода и затем развернуть её в любую директорию вручную.
- Откройте файл FaceRecogitionTracker.sln в Visual Studio. Вы также можете использовать пункт меню "Open from source control..." в Visual Studio...
- Получите ключ для использования Emotion API в Microsoft Cognitive Services. Зайдите на https://www.microsoft.com/cognitive-services/, выберите Emotions API -> Get Started for Free, и получите ключ.
- В файле Config.cs замените ключ на тот, который вы только что получили.
Запустите проект - вы должны увидеть, что лицо правильно распознается, а в окне "Вывод" показываются сообщения с эмоциями в формате JSON.
Для приема сообщений в облаке мы будем использовать IoT Hub. Откроем панель управления Azure Portal http://portal.azure.com.
Для начала создаем в облаке свой IoT Hub (раздел "Интернет вещей"). После создания хаба скопируйте строку подключения:
Используйте и установите Device Explorer. В нем введите строку подключения к IoT-хабу:
После этого перейдите на вкладку "Management" и добавьте новое устройство. Затем правой кнопкой нажмите на строку с устройством и выберите "Copy Connection String".
Очень хорошая страничка Getting Started есть в MSDN. Выбираете своё устройство, язык программирования и т.д. - и получаете фрагмент кода.
В нашем случае выбираем Raspberry Pi 2 -> Windows -> C#. (Код для Raspberry Pi подойдет и для настольного UWP-приложения).
При добавлении кода в проект, необходимо также добавить ссылку на NuGet-пакет
Microsoft.Azure.Devices.Client
. В полученном коде не забудьте исправить строку подключения на ту,
которая была получена на предыдущем шаге.
На этой страничке приводится много примеров готовых приложений, использующих IoT Hub.
Для отправки данных используется следующий код:
iothub = DeviceClient.CreateFromConnectionString(DeviceConnectionString);
await iothub.OpenAsync();
...
var b = Encoding.UTF8.GetBytes(s);
await iothub.SendEventAsync(new Message(b));
Здесь s
- это строка, содержащая JSON-код для эмоций.
Если вы затрудняетесь запрограммировать отсылку данных в облако самостоятельно - используйте branch MicrosoftBuzzwordDaySolution, содержащюю готовое решение по отсылке данных в IoT-hub (не забудьте поменять строку подключения!).
Для приёма сообщений из IoT Hub можно использовать следующий код:
private async Task Receive()
{
while (true)
{
var msg = await iothub.ReceiveAsync();
if (msg != null)
{
var s = Encoding.ASCII.GetString(msg.GetBytes());
// Сделать что-то с полученным сообщением, например, зажечь светодиод
await iothub.CompleteAsync(msg);
}
}
}
Для передачи данных из IoT Hub в систему хранения можно использовать Stream Analytics.
Для начала, настроим Stream Analytics для передачи данных из IoT Hub в PowerBI. Заодно можно осуществить усреднение данных по температуре за какой-то интервал времени, например, 5 секунд.
Для этого необходимо создать объект Stream Analytics, сконфигурировать в нем входные и выходные потоки данных, и задать запрос.
В качестве входных данных используем IoT Hub, назовем входные данные InHub
.
В качестве выходных данных - Power BI, назовём их OutBI
.
Обратите внимание, что в текущей версии портала Azure для конфигурирования PowerBI необходимо использовать старый портал http://manage.windowsazure.com.
В качестве простейшего запроса можно оставить исходный запрос, поставив правильные названия источника и приемника данных:
SELECT * INTO [OutBI] FROM [InHub]
Для усреднения данных за 5 секунд используем такой запрос:
SELECT
AVG(Happiness) as AVHappiness,
AVG(Surprise) as AVSurpive,
...
MAX(Time) as EndTime, MIN(Time) as BeginTime
INTO [OutBI]
FROM [InHub] TIMESTAMP BY Time
GROUP BY TumblingWindow(Duration(second,5))
Вам может пригодится прекрасный документ с набором примеров запросов.
После конфигурирования задания Stream Analytics необходимо запустить задание на выполнение.
После того, как Stream Analytics будет запущено, вы должны увидеть в панели PowerBI доступные данные: