Computer Vision APIとは
Microsoft Cognitive Servicesには様々なAPIがありますが、今回は視覚関連APIのうちComputer Vison APIを使ってみました。
Computer Vison APIの特徴としては画像分析(画像内容のテキスト化)があります。それ以外にOCR、手書き認識(現時点ではアルファベットのみ)、著名人の認識、サムネイル作成があります。
今回のサンプルでは画像解析を行ってみます。
Azureの設定
Computer Vison APIを利用するためにはAzureでの登録が必要です。
・Azureダッシュボードから「新規」-「AI + Cognitive Services」-「Computer Vision API」を選択します。

・「名前」、「場所」、「価格レベル」、「リソースグループ」等を入力して「作成」ボタンを押します。

・「エンドポイント」はAPIを利用する際に必要になるのでメモしておきます。
 「リソース管理」-「キー」を選びます。

以上でAzureでの設定は終わりです。
プログラム
・VisualStudio2017でUWPを作成します。「新規プロジェクト」-「空白のアプリ(ユニバーサルWindows)」として開きます。
・「ソリューションエクスプローラー」-「参照」を右クリックして「Nugetパッケージの管理」を選びます。

・検索ボックスに「Vision」と入力します。検索結果の「Microsoft.ProjectOxford.Vision」をインストールします。

・次に「MainPage.xaml」にCaptureElementを1つ、Imageを1つ、Canvasを1つ、TextBoxを1つ、Buttonを1つを配置します。

・Computer Vision APIはRestfulですので大抵の言語で利用できます。UWP(C#)にはMS製ライブラリが提供されていてPOSTや結果のパースまで簡単に処理できます。
VisionServiceClientオブジェクトの宣言
{your subscription key}の箇所は「キーの管理」でメモをしたキーを入力します。
第2引数は作成時の「場所」によって変わります。「米国西部」を選択している場合には省略できます。
それ以外は「エンドポイント」を入力してください。
//クライアント
client = new VisionServiceClient("{your subscription key}", "https://southeastasia.api.cognitive.microsoft.com/vision/v1.0");
APIへのリクエストの時に取得したい項目を指定することができます。
レスポンスは既にパースされていますので、結果を簡単に参照できます。
private async void Getdata()
        {
            //ファイル呼び出し
            var datafile = await KnownFolders.PicturesLibrary.GetFileAsync("cvpict.jpg");
            var fileStream = await datafile.OpenAsync(FileAccessMode.Read);
            
            //取得する項目の設定
            var visuals = new VisualFeature[] {
                //VisualFeature.Adult,
                //VisualFeature.Categories,
                //VisualFeature.Color,
                VisualFeature.Description,
                VisualFeature.Faces,
                //VisualFeature.ImageType,
                //VisualFeature.Tags
            };
            //APIの呼び出し
            var response = await client.AnalyzeImageAsync(fileStream.AsStream(), visuals);
            var captions = response.Description.Captions;
            var faces = response.Faces;
            //結果を表示
            var task = Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
            {
                canvas.Children.Clear();
                resultTbox.Text = "説明:\n" + captions[0].Text + "\n\n";
                var i = 0;
                Windows.UI.Color color;
                foreach (var face in faces)
                {
                    resultTbox.Text = resultTbox.Text + "Face No." + (i + 1).ToString() + "\n";
                    resultTbox.Text = resultTbox.Text + "年齢:\n" + face.Age.ToString() + "\n";
                    resultTbox.Text = resultTbox.Text + "性別:\n" + face.Gender.ToString() + "\n";
                    if (face.Gender == "Male")
                    {
                        color = Windows.UI.Colors.Blue;
                    }
                    else
                    {
                        color = Windows.UI.Colors.Red;
                    }
                    Windows.UI.Xaml.Shapes.Rectangle rect = new Windows.UI.Xaml.Shapes.Rectangle
                    {
                        Height = face.FaceRectangle.Height,
                        Width = face.FaceRectangle.Width,
                        Stroke = new Windows.UI.Xaml.Media.SolidColorBrush(color),
                        StrokeThickness = 2
                    };
                    canvas.Children.Add(rect);
                    Canvas.SetLeft(rect, face.FaceRectangle.Left);
                    Canvas.SetTop(rect, face.FaceRectangle.Top);
                    i++;
                }
            });
        }
画像分析の結果は「Description.captions.Text」を参照することで得ることができます。内容は英文なのでTranslator APIを利用して翻訳してもいいでしょう。
GitHubにサンプルソースをアップロードしています。
https://github.com/linyixian/ComputerVision_sample
