初めに

例のごとくVision APIのSDKを入れておいてください

実装する

今回は、ドメインモデルというものを使用して分析モード的な奴を切り替えます。

ドメインモデルを取得する

ドメインモデルは、Cognitive Serviceで提供されているものが使用できます。

コードは、下記のような感じです。

        private static async Task GetDomainModel()
        {
            var visionServiceClient = new VisionServiceClient("APIキー");
            var model = await visionServiceClient.ListModelsAsync();
            return model;
        }

これを出力すると下記のような感じでモデルが取れます。

image

今はcelebritiesしか提供されていないみたいなので一つだけです。

ではこれを使って画像を分析してみます。

分析する

画像を分析する場合は、下記のようなコードです。

まずWebの画像を使用した場合です。

        private static async Task AnalyzeInDomainImageWithWebUri()
        {
            var models = await GetDomainModel();
            foreach(var model in models.Models)
            {
                Console.WriteLine($"\nName : {model.Name}");
                foreach(var category in model.Categories)
                {
                    Console.WriteLine($"category : {category}");
                }
            }
            Console.WriteLine("");

            var visionServiceClient = new VisionServiceClient("APIキー");
            var analyzeModel = models.Models[0] as Model;
            var analysisResult = await visionServiceClient.AnalyzeImageInDomainAsync(new Uri("http://livedoor.blogimg.jp/return_to_forever-flat_display_2/imgs/4/5/45fe6b60.jpg").AbsoluteUri, analyzeModel);

            Console.WriteLine($"result : {analysisResult.Result.ToString()}");

            Console.ReadLine();
        }

画像は下記のサティアナデラのものを使用してみます。

すると結果は下記のような感じです。

image

nameにSatya Nadellaと入っているので分析できたようです。

次にローカルの画像を使います。

実装は下記のような感じです。

        private static async Task AnalyzeInDomainImageWithWebLocalImage()
        {
            var models = await GetDomainModel();
            foreach (var model in models.Models)
            {
                Console.WriteLine($"\nName : {model.Name}");
                foreach (var category in model.Categories)
                {
                    Console.WriteLine($"category : {category}");
                }
            }
            Console.WriteLine("");

            var visionServiceClient = new VisionServiceClient("APIキー");
            var analyzeModel = models.Models[0] as Model;
            using (var imageFileStream = File.OpenRead(@"tom.jpg"))
            {
                var analysisResult = await visionServiceClient.AnalyzeImageInDomainAsync(imageFileStream, analyzeModel);
                Console.WriteLine($"result : {analysisResult.Result.ToString()}");
            }

            Console.ReadLine();
        }

画像はトムクルーズを下記の画像を使用します。

tom

結果は、下記のような感じです。

image

トムクルーズと分析できました。

ちなみになぜかティムクックとスティーブジョブスは分析できませんでした。

まとめ

どういう用途で使うのか若干微妙なAPIですが、雑誌のスキャンをして自動分類するとかそういったことをしようとすると便利かもしれません。

そろそろVision APIをSDKで叩くのもネタ切れ感が出てきたでいい加減REST APIのまとめか別のAPIをやっていこうかと思います。

CATEGORIES