ごった煮

色々な事を書いてます

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();
    }

使った画像は下記の画像です。

サッカーチームの画像です。

結果が、下記のような感じになります。

image

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();
        }

使った画像は下記のものです。

hoge

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

image

文字の面積が多いからなのか黒のTシャツという説明が一番上に来ています。

次点で白のTシャツといった感じです。

ここら辺は若干微妙な感じなので今後に期待です。

まとめ

画像の説明を簡単に生成できました。

ですが、基本的に英語で返ってくるので表示前にTranslate APIなどで各言語に変換してやるとより丁寧かなという感じです。