クイック スタート:Custom Vision .NET SDK を使って画像分類プロジェクトを作成するQuickstart: Create an image classification project with the Custom Vision .NET SDK

この記事では、Custom Vision SDK と C# を使用して画像分類モデルを構築する際の足掛かりとして役立つ情報とサンプル コードを紹介します。This article provides information and sample code to help you get started using the Custom Vision SDK with C# to build an image classification model. 作成後、タグを追加し、イメージをアップロードし、プロジェクトをトレーニングし、プロジェクトの既定の予測エンドポイント URL を取得し、エンドポイントを使用してイメージをプログラミングでテストできます。After it's created, you can add tags, upload images, train the project, obtain the project's default prediction endpoint URL, and use the endpoint to programmatically test an image. この例は、独自の .NET アプリケーションを構築するためのテンプレートとしてご利用ください。Use this example as a template for building your own .NET application. 分類モデルの構築と使用のプロセスをコード "なし" で行う場合は、ブラウザーベースのガイダンスを参照してください。If you want to go through the process of building and using a classification model without code, see the browser-based guidance instead.

前提条件Prerequisites

  • Visual Studio 2015 または 2017 の任意のエディションAny edition of Visual Studio 2015 or 2017
  • Custom Vision サービスを使用するには、Azure で Custom Vision Training リソースと Prediction リソースを作成する必要があります。To use the Custom Vision Service you will need to create Custom Vision Training and Prediction resources in Azure. Azure portal でこれを行うには、[Create Custom Vision](Custom Vision の作成) ページのダイアログ ウィンドウに入力し、Training リソースと Prediction リソースの両方を作成します。To do so in the Azure portal, fill out the dialog window on the Create Custom Vision page to create both a Training and Prediction resource.

Custom Vision SDK とサンプル コードを入手するGet the Custom Vision SDK and sample code

Custom Vision を使用する .NET アプリを作成するには、Custom Vision NuGet パッケージが必要となります。To write a .NET app that uses Custom Vision, you'll need the Custom Vision NuGet packages. これらのパッケージは、これからダウンロードするサンプル プロジェクトに含まれていますが、ここから個別にアクセスすることもできます。These packages are included in the sample project you'll download, but you can access them individually here.

Cognitive Services .NET サンプル プロジェクトを複製またはダウンロードします。Clone or download the Cognitive Services .NET Samples project. CustomVision/ImageClassification フォルダーに移動して、ImageClassification.csproj を Visual Studio で開きます。Navigate to the CustomVision/ImageClassification folder and open ImageClassification.csproj in Visual Studio.

この Visual Studio プロジェクトは、My New Project という名前の新しい Custom Vision プロジェクトを作成します。作成したプロジェクトには、Custom Vision Web サイトからアクセスすることができます。This Visual Studio project creates a new Custom Vision project named My New Project, which can be accessed through the Custom Vision website. その後、イメージをアップロードして分類子のトレーニングおよびテストを行います。It then uploads images to train and test a classifier. このプロジェクトでは、木が Hemlock (ドクニンジン) であるか Japanese Cherry (桜) であるかを判別することが、分類子の目的となります。In this project, the classifier is intended to determine whether a tree is a Hemlock or a Japanese Cherry.

トレーニング キーと予測キーを取得するGet the training and prediction keys

プロジェクトでサービスと対話するには、有効な一連のサブスクリプション キーが必要です。The project needs a valid set of subscription keys to interact with the service. 項目については、Custom Vision Web サイトを参照してください。You can find the items at the Custom Vision website. Custom Vision リソースの作成に使用した Azure アカウントに関連付けられているアカウントでサインインします。Sign in with the account associated with the Azure account used to create your Custom Vision resources. ホーム ページ (新しいプロジェクトを追加するオプションがあるページ) で、右上にある__歯車アイコン__を選択します。On the home page (the page with the option to add a new project), select the gear icon in the upper right. 一覧でトレーニングおよび予測リソースを検索し、展開します。Find your training and prediction resources in the list and expand them. ここでは、トレーニング キー、予測キー、予測リソース ID の値を見つけることができます。Here you can find your training key, prediction key, and prediction resource ID values. これらの値を一時的な場所に保存します。Save these values to a temporary location.

キー UI の画像

または、これらのキーと ID は、Azure portal から、Custom Vision トレーニングと予測のリソースを表示し、 [キー] タブに移動して取得することもできます。そこでは、トレーニング キーと予測キーが見つかります。Or, you can obtain these keys and ID from the Azure portal by viewing your Custom Vision Training and Prediction resources and navigating to the Keys tab. There you'll find your training key and prediction key. 予測リソースの [プロパティ] タブに移動し、予測リソース ID を取得します。Navigate to the Properties tab of your Prediction resource to get your prediction resource ID.

コードの理解Understand the code

Program.cs ファイルを開いて、コードを詳しく調べます。Open the Program.cs file and inspect the code. トレーニング キーと予測キーの環境変数を作成し、それぞれ CUSTOM_VISION_TRAINING_KEYCUSTOM_VISION_PREDICTION_KEY という名前を付けます。Create environment variables for your training and prediction keys named CUSTOM_VISION_TRAINING_KEY and CUSTOM_VISION_PREDICTION_KEY, respectively. スクリプトによってこれらの変数が検索されます。The script will look for these variables.

// Add your training & prediction key from the settings page of the portal
string trainingKey = Environment.GetEnvironmentVariable("CUSTOM_VISION_TRAINING_KEY");
string predictionKey = Environment.GetEnvironmentVariable("CUSTOM_VISION_PREDICTION_KEY");

また、Custom Vision Web サイトの [設定] ページからエンドポイント URL を取得します。Also, get your Endpoint URL from the Settings page of the Custom Vision website. それを CUSTOM_VISION_ENDPOINT という環境変数に保存します。Save it to an environment variable called CUSTOM_VISION_ENDPOINT. スクリプトによって、この環境変数への参照がクラスのルートに保存されます。The script saves a reference to it at the root of your class.

string ENDPOINT = Environment.GetEnvironmentVariable("CUSTOM_VISION_ENDPOINT");

このプロジェクトの主な機能は、以下のコード行によって実行されます。The following lines of code execute the primary functionality of the project.

新しい Custom Vision Service プロジェクトを作成するCreate a new Custom Vision service project

作成したプロジェクトは、先ほどアクセスした Custom Vision Web サイトに表示されます。The created project will show up on the Custom Vision website that you visited earlier. プロジェクトを作成するときに他のオプションを指定するには、CreateProject メソッドを参照してください (分類子の構築に関する Web ポータル ガイドで説明されています)。See the CreateProject method to specify other options when you create your project (explained in the Build a classifier web portal guide).

// Create the Api, passing in the training key
CustomVisionTrainingClient trainingApi = new CustomVisionTrainingClient()
{
    ApiKey = trainingKey,
    Endpoint = ENDPOINT
};

// Create a new project
Console.WriteLine("Creating new project:");
var project = trainingApi.CreateProject("My New Project");

プロジェクトにタグを作成するCreate tags in the project

// Make two tags in the new project
var hemlockTag = trainingApi.CreateTag(project.Id, "Hemlock");
var japaneseCherryTag = trainingApi.CreateTag(project.Id, "Japanese Cherry");

画像をアップロードし、タグ付けするUpload and tag images

このプロジェクトの画像を追加します。The images for this project are included. これらは、Program.csLoadImagesFromDisk メソッドで参照します。They are referenced in the LoadImagesFromDisk method in Program.cs. 1 回のバッチで最大 64 個の画像をアップロードできます。You can upload up to 64 images in a single batch.

// Add some images to the tags
Console.WriteLine("\tUploading images");
LoadImagesFromDisk();

// Images can be uploaded one at a time
foreach (var image in hemlockImages)
{
    using (var stream = new MemoryStream(File.ReadAllBytes(image)))
    {
        trainingApi.CreateImagesFromData(project.Id, stream, new List<Guid>() { hemlockTag.Id });
    }
}

分類器をトレーニングしてする公開するTrain the classifier and publish

このコードにより、予測モデルの最初のイテレーションが作成され、そのイテレーションが予測エンドポイントに公開されます。This code creates the first iteration of the prediction model and then publishes that iteration to the prediction endpoint. イテレーションの名前を使用することで予測要求を送信できます。You can use the name of the iteration to send prediction requests. イテレーションは、公開されるまで予測エンドポイントで利用できません。An iteration is not available in the prediction endpoint until it's published.

// Now there are images with tags start training the project
Console.WriteLine("\tTraining");
var iteration = trainingApi.TrainProject(project.Id);

// The returned iteration will be in progress, and can be queried periodically to see when it has completed
while (iteration.Status == "Training")
{
    Thread.Sleep(1000);

    // Re-query the iteration to get it's updated status
    iteration = trainingApi.GetIteration(project.Id, iteration.Id);
}

// The iteration is now trained. Publish it to the prediction end point.
var publishedModelName = "treeClassModel";
var predictionResourceId = "<target prediction resource ID>";
trainingApi.PublishIteration(project.Id, iteration.Id, publishedModelName, predictionResourceId);
Console.WriteLine("Done!\n");

予測エンドポイントを設定するSet the prediction endpoint

予測エンドポイントは、現在のモデルに画像を送信して分類予測を取得する際に使用できる参照です。The prediction endpoint is the reference that you can use to submit an image to the current model and get a classification prediction.

// Create a prediction endpoint, passing in obtained prediction key
CustomVisionPredictionClient endpoint = new CustomVisionPredictionClient()
{
    ApiKey = predictionKey,
    Endpoint = ENDPOINT
};

既定の予測エンドポイントに画像を送信するSubmit an image to the default prediction endpoint

このスクリプトでは、LoadImagesFromDisk メソッドでテスト画像が読み込まれ、モデルの予測出力がコンソールに表示されます。In this script, the test image is loaded in the LoadImagesFromDisk method, and the model's prediction output is to be displayed in the console. publishedModelName 変数の値は、Custom Vision ポータルの [パフォーマンス] タブにある "として公開される" の値に対応している必要があります。The value of the publishedModelName variable should correspond to the "Published as" value found on the Custom Vision portal's Performance tab.

// Make a prediction against the new project
Console.WriteLine("Making a prediction:");
var result = endpoint.ClassifyImage(project.Id, publishedModelName, testImage);

// Loop over each prediction and write out the results
foreach (var c in result.Predictions)
{
    Console.WriteLine($"\t{c.TagName}: {c.Probability:P1}");
}
Console.ReadKey();

アプリケーションの実行Run the application

アプリケーションを実行すると、コンソール ウィンドウが開いて、次の出力が書き込まれます。As the application runs, it should open a console window and write the following output:

Creating new project:
        Uploading images
        Training
Done!

Making a prediction:
        Hemlock: 95.0%
        Japanese Cherry: 0.0%

Images/Test/ 内のテスト画像にタグが適切に付けられていることを確認してください。You can then verify that the test image (found in Images/Test/) is tagged appropriately. 任意のキーを押してアプリケーションを終了します。Press any key to exit the application. Custom Vision Web サイトに戻って、新しく作成されたプロジェクトの現在の状態を確認してもかまいません。You can also go back to the Custom Vision website and see the current state of your newly created project.

リソースのクリーンアップClean up resources

独自の画像分類プロジェクトを実装したい (または物体検出プロジェクトを試したい) 場合、この例で使用した木の識別プロジェクトは削除してかまいません。If you wish to implement your own image classification project (or try an object detection project instead), you may want to delete the tree identification project from this example. 無料試用版では、2 つの Custom Vision プロジェクトを利用できます。A free trial allows for two Custom Vision projects.

Custom Vision Web サイトで、 [Projects](プロジェクト) に移動し、[My New Project](自分用の新しいプロジェクト) のごみ箱アイコンを選択します。On the Custom Vision website, navigate to Projects and select the trash can under My New Project.

"My New Project" とごみ箱アイコンが表示されたパネルのスクリーンショット

次のステップNext steps

以上、画像分類処理の各ステップをコードでどのように実装するかを見てきました。Now you've seen how to do every step of the image classification process in code. このサンプルで実行したトレーニングのイテレーションは 1 回だけですが、多くの場合、精度を高めるために、モデルのトレーニングとテストは複数回行う必要があります。This sample executes a single training iteration, but often you will need to train and test your model multiple times in order to make it more accurate.