画像の説明を自動生成できると便利ですよね。ということでVision APIで生成してみます。
初めに
例のごとくVision APIのライブラリをNuGetから入れておいてください。
実装
早速説明を生成してみましょう。
ソースコード
今回も、ローカルのファイルとWebのURIで取得した画像の分析をする2パターンのサンプルです。
まずWebの画像を使うパターン
DescribeAsyncで分析結果を取得します。
このメソッドの第二引数の数が、説明の候補の数です。
5と入れてあると候補が5種類生成されます。
private static async Task DescrirbeImageFromUri() { var visionServiceClient = new VisionServiceClient("APIキー");var uri = new Uri("http://www.footballchannel.jp/wordpress/assets/2015/04/20150422_juventos_getty.jpg"); var analysisResult = await visionServiceClient.DescribeAsync(uri.AbsoluteUri, 5); Console.WriteLine($"Image Format : {analysisResult.Metadata.Format}"); Console.WriteLine($"Image Dimensions : {analysisResult.Metadata.Width} x {analysisResult.Metadata.Height}"); if (analysisResult.Description != null) { foreach (var caption in analysisResult.Description.Captions) { Console.WriteLine($"Caption : {caption.Text}; Confidence : {caption.Confidence}"); } } Console.ReadLine(); }
使った画像は下記の画像です。
サッカーチームの画像です。
結果が、下記のような感じになります。
Confidenceがそれっぽさ度です。
フットボールチームの写真という説明が一番上高くなっています。
何となくそれっぽい説明が出力されました。
次にローカルの画像です。
private static async Task DescribeImageFromLocalImage() { var visionServiceClient = new VisionServiceClient("APIキー"); using (var imageFileStream = File.OpenRead(@"hoge.jpg")) { var analysisResult = await visionServiceClient.DescribeAsync(imageFileStream, 5); Console.WriteLine($"Image Format : {analysisResult.Metadata.Format}"); Console.WriteLine($"Image Dimensions : {analysisResult.Metadata.Width} x {analysisResult.Metadata.Height}"); if (analysisResult.Description != null) { foreach (var caption in analysisResult.Description.Captions) { Console.WriteLine($"Caption : {caption.Text}; Confidence : {caption.Confidence}"); } } } Console.ReadLine(); }
使った画像は下記のものです。
結果は、下記のような感じです。
文字の面積が多いからなのか黒のTシャツという説明が一番上に来ています。
次点で白のTシャツといった感じです。
ここら辺は若干微妙な感じなので今後に期待です。
まとめ
画像の説明を簡単に生成できました。
ですが、基本的に英語で返ってくるので表示前にTranslate APIなどで各言語に変換してやるとより丁寧かなという感じです。