早速やってみる

ライブラリの追加

NuGetから下記を取得します。

Microsoft.ProjectOxford.Vision

ProjectOxfordの名前がついちゃってますが最終的にCognitive Serviceのプレビューが取れたら名前空間が変わったりするんですかね。

名前空間の命名は大事だという知見です。

サクッと実装してみる

ライブラリを使うので下記のような感じでOKです。

超シンプルです。

using System;
using System.Threading.Tasks;
using Microsoft.ProjectOxford.Vision;
using System.IO;

namespace CognitiveServiceSample
{
    class Program
    {
        static void Main(string[] args)
        {
            MainAsync(args).Wait();
        }

        private static async Task MainAsync(string[] args)
        {

            var visionServiceClient = new VisionServiceClient("APIキー");
            using (var imageFileStream = File.OpenRead(@"画像のパス"))
            {
                var visualFeatures = new VisualFeature[]
                {
                    VisualFeature.Categories, VisualFeature.Color, VisualFeature.Description
                };
                var analysisResult = await visionServiceClient.AnalyzeImageAsync(imageFileStream, visualFeatures);
                Console.WriteLine($"Captions : {analysisResult.Description.Captions}");
                Console.WriteLine($"Tags : {analysisResult.Description.Tags}");
                Console.WriteLine($"AccentColor : {analysisResult.Color.AccentColor}");
                Console.WriteLine($"DominatColorBackground : {analysisResult.Color.DominantColorBackground}");
                Console.WriteLine($"DominatColorForeground : {analysisResult.Color.DominantColorForeground}");
                Console.WriteLine($"DominatColors : {analysisResult.Color.DominantColors}");
                Console.WriteLine($"IsBWImg : {analysisResult.Color.IsBWImg}");
                Console.WriteLine($"Categories : {analysisResult.Categories}");
                Console.WriteLine($"AdlutScore : {analysisResult.Adult.AdultScore}");
                Console.WriteLine($"IsAdultContent : {analysisResult.Adult.IsAdultContent}");
                Console.WriteLine($"IsRacyContent : {analysisResult.Adult.IsRacyContent}");
                Console.WriteLine($"RacyScore : {analysisResult.Adult.RacyScore}");
            }
            Console.ReadLine();
        }
    }
}

何をしているか

ざっくり何をしているかというと、VisionServiceClientのインスタンス(Vision APIを使う大本のインスタンス)にAPIキーを渡して初期化して、そいつに対して画像のStreamとVisualFeatures(何を分析するかのプロパティ)を渡すと分析結果が返ってくるという感じです。

VisualFeatureは

  • Adult
  • Categories
  • Color
  • Description
  • Faces
  • ImageType
  • Tags

があります。

ざっくりいうとアダルト画像であるかどうかの分析とか顔の分析とか画像の色とかを分析して返してくれます。

要するにVision APIのサンプルで出てくるデータが全部モデルにシリアライズされて得られる感じです。

実行してみる

下記のような感じで分析結果が列挙されます。

image

まとめ

Vision APIで画像を単純に分析する実装を紹介しました。

かなり楽に分析できるので、アプリに組み込んだりといったこともかなり楽になってありがたいですね

次は、OCRあたりをまとめようかと思います。

CATEGORIES