画像分析のAPIには、特定の対象を検索するモードの変更的なことができるのでそれをやってみます。
初めに
例のごとくVision APIのSDKを入れておいてください
実装する
今回は、ドメインモデルというものを使用して分析モード的な奴を切り替えます。
ドメインモデルを取得する
ドメインモデルは、Cognitive Serviceで提供されているものが使用できます。
コードは、下記のような感じです。
private static async TaskGetDomainModel() { var visionServiceClient = new VisionServiceClient("APIキー"); var model = await visionServiceClient.ListModelsAsync(); return model; }
これを出力すると下記のような感じでモデルが取れます。
今は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(); }
画像は下記のサティアナデラのものを使用してみます。
すると結果は下記のような感じです。
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(); }
画像はトムクルーズを下記の画像を使用します。
結果は、下記のような感じです。
トムクルーズと分析できました。
ちなみになぜかティムクックとスティーブジョブスは分析できませんでした。
まとめ
どういう用途で使うのか若干微妙なAPIですが、雑誌のスキャンをして自動分類するとかそういったことをしようとすると便利かもしれません。
そろそろVision APIをSDKで叩くのもネタ切れ感が出てきたでいい加減REST APIのまとめか別のAPIをやっていこうかと思います。