ごった煮

色々な事を書いてます

Cognitive Serviceを使う(Vision API編 その4)

Vision APIには、いい感じに画像のサムネイルを生成してくれる機能があるのでそちらの簡単な使い方です。

初めに

例のごとくVision APIのライブラリをNuGetから入れておいてください。

実装

早速サムネイルを生成してみます

サムネイル生成は、スマートクリッピングという機能があり、そちらを使うか使わないかを選択できます。

今回は、両方を並べて結果がどう変わるか比べてみます。

ソースコード

C#のソースは、下記のような感じで非常にシンプルです。

スマートクリッピングも引数でオン・オフが切り替えられます。

下記のコードは、Web状のURIの画像からサムネイルを生成するコードです。

ローカルのファイルを使う場合は。例のごとくStreamに変換してGetHumbnailAsyncの第一引数に渡してください

        private static async Task CreateThumbnailImage(bool isSmartCropping)
        {
            var visionServiceClient = new VisionServiceClient("92ae72340dd649f190d8654a4bf58c0c");
            var uri = new Uri("https://oxfordportal.blob.core.windows.net/vision/Thumbnail/6-1.jpg");
            byte[] thumbnail = await visionServiceClient.GetThumbnailAsync(uri.AbsoluteUri, 200, 200, isSmartCropping);

        var ms = new MemoryStream(thumbnail);
        ms.Seek(0, SeekOrigin.Begin);

        var thumbnailSurce = new BitmapImage();
        thumbnailSurce.BeginInit();
        thumbnailSurce.CacheOption = BitmapCacheOption.None;
        thumbnailSurce.StreamSource = ms;
        thumbnailSurce.EndInit();

        var encoder = new JpegBitmapEncoder();
        var fs = new FileStream("hugahuga.jpg", FileMode.Create);
        encoder.Frames.Add(BitmapFrame.Create(thumbnailSurce));
        encoder.Save(fs);

        fs.Close();
        fs.Dispose();
    }

結果

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

Cognitive Serviceのサンプルに使われている画像と同じものを使用しています。

下記の画像は、スマートクリッピングを有効にした状態です。

しっかり犬の部分が抜き出されています。

huga

次にスマートクリッピングをオフにした状態です。

スマートクリッピングをオンにした状態よりも少しだけ犬が中央から横にずれています。

スマートクリッピングでは、対象が中心に来るようにうまくトリミングしているといった動きをしているみたいです。

hugahuga

まとめ

サムネイルを簡単に生成できるようになりました。

これでWebサイトのリンク画像を生成するときなんかにいい感じの画像が作りやすくなるのかなって感じです。

そろそろREST APIを直接たたく実装をまとめていきたいなぁとか思いつつどうしようかなと