Добавление машинного обучения, искусственного интеллекта и когнитивных способностей к вашим приложениям Windows стало проще, чем когда-либо, благодаря службам Microsoft Azure. Представьте себе клиента Twitter, который практически проверяет душевное состояние пользователя перед тем, как написать твит, потенциально спасая его от смущающего твита, написанного в гневе. С помощью API-интерфейсов Emotion и Text Analytics от Azure Cognitive Services это не только возможно, но и легко сделать, проанализировав как текст твита, так и выражения лица пользователя до того, как будет нажата кнопка отправки.

Начало работы с когнитивными службами Azure

Когнитивные службы Azure включают портфель API-интерфейсов на основе машинного обучения, которые делятся на пять основных областей:

· Vision - Услуги по обработке и классификации изображений / видео и т. Д.

· Речь - преобразование речи в текст, голосовая проверка и т. Д.

· Язык - обработка естественного языка, включая переводы, лингвистику, проверку орфографии и т. Д.

· Знания - системы рекомендаций, академические знания и т. Д.

· Поиск - API поиска Bing, который охватывает Интернет, СМИ, новости и т. Д.

Для доступа к этим службам необходимы ключи API:

1. Перейдите в Консоль API Cognitive Services.

2. Войдите или создайте бесплатную учетную запись.

3. Выберите вкладку Vision.

4. Найдите строку для Emotion API и нажмите кнопку Получить ключ API.

5. Выберите вкладку Язык.

6. Найдите строку Text Analytics API и нажмите кнопку Получить ключ API.

7. Запишите конечную точку и ключи API.

Создание приложения безопасного твита

Чтобы приступить к созданию приложения Safe Tweet, выполните следующие простые шаги, чтобы настроить свой проект:

· Откройте Visual Studio 2017

· Выберите Файл - ›Новый -› Проект в главном меню.

· Выберите Windows Universal на левой панели навигации.

· На правой панели выберите Пустое приложение (универсальная версия Windows).

· Введите название своего приложения в поле "Имя" (мы используем SafeTweet).

· Введите Местоположение или оставьте значение по умолчанию.

· Нажмите кнопку ОК.

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

· Убедитесь, что для целевой версии установлено значение Windows 10 Fall Creators Update (10.0; сборка 16299)

· Установите Минимальную версию на Windows 10 Fall Creators Update (10.0; сборка 16299)

Мы устанавливаем оба варианта на Windows 10 Fall Creators Update, потому что некоторые из используемых нами пакетов зависят от .Net Standard 2.0.

Реализация API аналитики текста

Text Analytics API - отличный алгоритм для определения общей тональности блока текста, чтобы определить его положительность или отрицательность.

Microsoft предоставляет пакет через NuGet, который упрощает интеграцию API аналитики текста в приложение UWP. Установите пакет NuGet из консоли NuGet:

Install-Package Microsoft.ProjectOxford.Text -Version 1.1.7

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

1. Создайте экземпляр класса SentimentClient, используя ключ API, ранее полученный для API аналитики текста в консоли Cognitive Service Console.

2. Создайте список объектов SentimentDocument, содержащих анализируемый текст.

3. Вызовите метод GetSentimentAsync (), указав в качестве параметра список объектов SentimentDocument.

4. Обработайте коллекцию объектов Document, возвращенную функцией GetSentimentAsync ().

Обратите внимание: SentimentDocument содержит свойство Id, которое коррелирует запрос с соответствующим ответом. В примере клиентского приложения Twitter Id не нужен, поскольку на анализ отправляется только одна строка текста.

private async Task<float> RequestTextSentimentAnalysisAsync(string text)
{
var client = new SentimentClient(this.Settings.Text.Key1)
{
// NOTE: use the URL endpoint provided by the Cognitive Services API console.
Url = this.Settings.Text.EndPoint
};
var document = new SentimentDocument
{
Id = Guid.NewGuid().ToString(),
Text = text,
Language = “en”
};
var request = new SentimentRequest
{
Documents = new List<IDocument> { document }
};
var response = await client.GetSentimentAsync(request);
// Only one document was sent, therefore only one result should be returned.
var result = response.Documents.FirstOrDefault();
if (result == null)
{
throw new ApplicationException(“Text Analysis Failed.”);
}
return result.Score;
}

Реализация Emotion API

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

Microsoft предоставляет пакет через NuGet, который упрощает интеграцию Emotion API в приложения UWP. Установите пакет NuGet из консоли NuGet:

Install-Package Microsoft.ProjectOxford.Emotion -Version 2.0.40

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

1. Создайте экземпляр класса EmotionServiceClient, используя ключ API, ранее полученный для Emotion API в консоли Cognitive Service Console.

2. Вызовите метод RecognizeAsync (), передавая само изображение в виде потока или строки, представляющего URL-адрес изображения.

3. Обработайте коллекцию объектов Emotion, возвращенную функцией RecognizeAsync ().

Следующий код демонстрирует эти шаги:

private async Task<IEnumerable<Emotion>> RequestEmotionAnalysisAsync(Stream image)
{
// NOTE: use the URL endpoint provided by the Cognitive Services API console.
using (var client = new EmotionServiceClient(this.Settings.Emotion.Key1,
this.Settings.Emotion.EndPoint))
{
try
{
var results = await client.RecognizeAsync(image);
return results;
}
catch (ClientException ce)
{
Debug.WriteLine(ce.Error);
}
}
return null;
}

Примечание. Класс EmotionServiceClient реализует IDisposable, поэтому экземпляр необходимо удалить. Это отличается от поведения класса SentimentClient из Text Analytics API.

Обработка коллекции возвращенных объектов Emotion также проста. Для каждого лица, обнаруженного на изображении, коллекция будет содержать соответствующий объект Emotion. Каждый объект Emotion соответствует лицу, распознанному на изображении, и включает:

· Объект Прямоугольник с координатами и размером найденного лица.

· Объект EmotionScores с числовой оценкой от 0 до 1 для каждой обнаруженной эмоции (сумма которой равна 1).

Вспомогательный метод ToRankedList () из объекта EmotionScores можно использовать для ранжирования оценок для облегчения использования.

Следующий код демонстрирует использование Emotions API и определяет основную эмоцию:

var emotion = await this.RequestEmotionAnalysisAsync(imageStream);
var face = emotion.FirstOrDefault();
if (face == null)
{
this.State = “Couldn’t detect a face or there was another issue with the Emotion API.”;
return;
}
var primary = face.Scores.ToRankedList().First();

Сделать снимок

В приведенном выше примере API Emotion для анализа используется поток изображения. В UWP есть несколько методов получения изображения - чтение с диска или непосредственно с веб-камеры. Для приложения Safe Tweet чтение непосредственно с веб-камеры обеспечит беспроблемный пользовательский интерфейс. Хорошее место для начала, чтобы узнать больше об использовании веб-камеры в приложении UWP, можно найти здесь.

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

· В Visual Studio откройте манифест проекта и выберите вкладку Возможности.

· Выберите возможность Веб-камера .

Класс MediaCapture - это механизм, используемый для захвата видео и фотографий с веб-камеры, который обеспечивает более плавный подход, чем использование класса CameraCaptureUI (который просто использует встроенную камеру Windows. приложение).

Перед использованием класса MediaCapture его необходимо инициализировать следующим образом:

_mediaCapture = new MediaCapture();
var settings = new MediaCaptureInitializationSettings
{
StreamingCaptureMode = StreamingCaptureMode.Video
};
await _mediaCapture.InitializeAsync(settings);

Обратите внимание: если для режима захвата не установлено значение StreamingCaptureMode.Video, MediaCapture по умолчанию будет использовать и видео, и аудио, и для этого потребуется добавить возможность Микрофон. в манифесте проекта.

После инициализации MediaCapture его можно использовать для фотографирования следующим образом:

private async Task<Stream> TakeSnapshotAsync()
{
var encoding = ImageEncodingProperties.CreateUncompressed(MediaPixelFormat.Bgra8);
var capture = await _mediaCapture.PrepareLowLagPhotoCaptureAsync(encoding);
var photo = await capture.CaptureAsync();
var frame = photo.Frame;
await capture.FinishAsync();
return await this.WriteToStreamAsync(frame);

Преобразование сделанной фотографии в поток, который может использовать Emotion API, требует немного больше усилий:

private async Task<Stream> WriteToStreamAsync(CapturedFrame frame)
{
using (var outputStream = new InMemoryRandomAccessStream())
{
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, outputStream);
encoder.IsThumbnailGenerated = false;
encoder.SetSoftwareBitmap(frame.SoftwareBitmap);
try
{
await encoder.FlushAsync();
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
}
await outputStream.FlushAsync();
var ms = new MemoryStream();
await outputStream.AsStream().CopyToAsync(ms);
ms.Position = 0;
return ms;
}
}

Публикация в Twitter с помощью набора инструментов сообщества UWP

Хотя пример приложения не является частью Cognitive Services API, он не будет полным без демонстрации того, как подключиться к Twitter и опубликовать твит.

Начните с посещения https://apps.twitter.com/app/, чтобы создать и зарегистрировать приложение.

Примечание. URL-адрес обратного вызова является необязательным, и его не нужно указывать.

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

После завершения на странице регистрации Twitter будет представлена ​​сводная информация о настройках приложения, включая ключ потребителя, секрет потребителя, а также токен доступа и секрет токена доступа.

Этот ключ потребителя и секрет потребителя потребуются для подключения приложения UWP к инфраструктуре Twitter (примечание: секрет потребителя никогда не должен быть доступен для чтения человеком в вашем приложении или зарегистрирован в репозиториях исходного кода).

Вернувшись в Visual Studio, установите пакет NuGet UWP Community Toolkit Services.

Install-Package Microsoft.Toolkit.Uwp.Services -Version 2.1.1

Этот пакет позволяет разработчикам легко интегрироваться не только с Twitter, но и со многими другими сервисами, включая Bing, Facebook, LinkedIn, OneDrive и другие.

Служба Twitter предоставляет богатый API, позволяющий приложениям-потребителям твитить, получать профиль пользователя или временную шкалу, а также твиты в реальном времени. В следующем фрагменте показано, как подключиться к службе Twitter и отправить текстовый твит.

public Task SendTweet(string message)
{
// The consumer key, secret, and callback Url entered when creating the Twitter app
TwitterService.Instance.Initialize(consumerKey, consumerSecret, callbackUrl);
// Login to Twitter returns true for a successful login
if (!await TwitterService.Instance.LoginAsync())
{
// Unable to login
return;
}
// See docs for several other optional parameters defined in Twitter “update” API
var status = new TwitterStatus
{
Message = txtTweet.Text,
};
// Post a tweet with the status and the picture stream
await TwitterService.Instance.TweetStatusAsync(status, stream);
}

Когнитивные способности

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

Мы только прикоснулись к тому, что возможно в приложении UWP, использующем Azure Cognitive Services и использующем набор инструментов сообщества UWP. Перейдите по ссылкам ниже, чтобы изучить дополнительные возможности.

Образец исходного кода

· Найти пример исходного кода на GitHub.

Набор инструментов сообщества UWP

· "Документация"

· "Источник"

Когнитивные услуги

· Документация по текстовой аналитике

· Документация эмоций

Узнайте больше и пройдите обучение - ресурсы и обучение для разработчиков

· 20-минутное вступительное видео

· Ознакомьтесь с популярными сериями онлайн-тренингов по Microsoft Cognitive Services в Microsoft Virtual Academy

· Где бы вы использовали Cognitive Services? В играх, приложениях смешанной реальности или, может быть, в красивых приложениях Fluent.

Узнайте больше о разработке для Windows 10 здесь.