Cognitive Serviceを使う(Vision API編 その5)
画像の説明を自動生成できると便利ですよね。ということで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などで各言語に変換してやるとより丁寧かなという感じです。


