Vision APIには、画像から連想される情報でタグを生成する機能があるのでそれを使ってみます。
初めに
例のごとくVision APIのライブラリをNuGetからインストールしておいてください。
画像のタグについて
画像のタグとは、例えば以下の画像だと家とか芝生とか屋外とか画像から読み取れる情報です。
実装する
ソースは下記のような感じです。
例のごとくライブラリがしっかりしているのでかなりシンプルです。
ちなみにタグ生成は、
- 画像をアップロードして分析
- Webの画像のURIを指定して分析
の二パターンの分析方法が提供されています。
アップロードしての分析
アップロードする場合は、画像のStreamを生成してGetTagsAsyncメソッドに渡すと分析結果が返ってきます
private static async Task RecognizeTagWithUploadAsync() { var visionServiceClient = new VisionServiceClient("APIキー"); using (var imageFileStream = File.OpenRead(@"hoge.jpg")) { var analysisResult = await visionServiceClient.GetTagsAsync(imageFileStream); foreach(var tag in analysisResult.Tags) { Console.WriteLine(tag.Name); } } Console.ReadLine(); }
画像は下記のものを使用しました。
すると結果は下記のような感じ。
大体服っぽいタグが生成されました。
Webの画像を指定する
Webの画像を指定する場合は、下記のような感じです。
private static async Task RecognizeTagWithWebImageAsync() { var visionServiceClient = new VisionServiceClient("APIキー"); var analysisResult = await visionServiceClient.GetTagsAsync(new Uri("https://oxfordportal.blob.core.windows.net/vision/Analysis/11-1.jpg").AbsoluteUri); foreach(var tag in analysisResult.Tags) { Console.WriteLine(tag.Name); } Console.ReadLine(); }
こちらも普通にGetTagsAsyncに画像のURIを生成してAbsouteUriを渡してやると結果が返ってきます。
画像は最初に出した下記のやつです。
結果は下記のような感じです。
芝生とか家とか空とかそういったものが返ってきています。
まとめ
さっくりと画像にタグ付けすることができました。
基本的に英語でタグが返ってくるので返ってきた結果をBingのTranslation APIとかに食わせて各言語に変換するといったことをするともう少しいい感じに使えるかもしれません。
次回は、画像からサムネイルを生成してみようかと思います。