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

この記事では、Custom Vision SDK と Node.js を使用して画像分類モデルを構築する基本的な方法について説明します。This article shows you how to get started using the Custom Vision SDK with Node.js to build an image classification model. 作成後は、タグの追加、画像のアップロード、プロジェクトのトレーニング、プロジェクトの公開された予測エンドポイント URL の取得、エンドポイントを使用したプログラミングによる画像のテストを行うことができます。After it's created, you can add tags, upload images, train the project, obtain the project's published prediction endpoint URL, and use the endpoint to programmatically test an image. この例は、独自の Node.js アプリケーションを構築するためのテンプレートとしてご利用ください。Use this example as a template for building your own Node.js application. 分類モデルの構築と使用のプロセスをコード "なし" で行う場合は、ブラウザー ベースのガイダンスを参照してください。If you wish to go through the process of building and using a classification model without code, see the browser-based guidance instead.

前提条件Prerequisites

  • Node.js 8 以降がインストールされている。Node.js 8 or later installed.
  • npm がインストールされている。npm installed.
  • 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 をインストールするInstall the Custom Vision SDK

Custom Vision Service SDK for Node.js をインストールするには、PowerShell で次のコマンドを実行します。To install the Custom Vision service SDK for Node.js, run the following command in PowerShell:

npm install @azure/cognitiveservices-customvision-training
npm install @azure/cognitiveservices-customvision-prediction

トレーニング キーと予測キーを取得する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.

サンプル画像を取得するGet the sample images

この例では、GitHub の Cognitive Services Node.js SDK Samples リポジトリの Samples/customvision/images ディレクトリにある画像を使用します。This example uses the images from the Samples/customvision/images directory of the Cognitive Services Node.js SDK Samples repo on GitHub. このリポジトリをお使いの開発環境に複製またはダウンロードしてください。Clone or download this repository to your development environment.

コードの追加Add the code

目的のプロジェクト ディレクトリに、sample.js という新しいファイルを作成します。Create a new file called sample.js in your preferred project directory.

Custom Vision Service プロジェクトを作成するCreate the Custom Vision service project

新しい Custom Vision Service プロジェクトを作成するための次のコードをスクリプトに追加します。Add the following code to your script to create a new Custom Vision service project. ご利用のサブスクリプション キーを適切な定義に挿入し、sampleDataRoot パスの値を、実際の画像フォルダーのパスに設定します。Insert your subscription keys in the appropriate definitions and set the sampleDataRoot path value to your image folder path. エンドポイントの値が、Customvision.ai で作成したトレーニングと予測のエンドポイントと一致していることを確認します。Make sure the endPoint value matches the training and prediction endpoints you have created at Customvision.ai. 物体検出と画像分類のプロジェクト作成の違いは createProject 呼び出しに指定されるドメインであることにご注目ください。Note that the difference between creating an object detection and image classification project is the domain specified in the createProject call.

const util = require('util');
const fs = require('fs');
const TrainingApiClient = require("@azure/cognitiveservices-customvision-training");
const PredictionApiClient = require("@azure/cognitiveservices-customvision-prediction");

const setTimeoutPromise = util.promisify(setTimeout);

const trainingKey = "<your training key>";
const predictionKey = "<your prediction key>";
const predictionResourceId = "<your prediction resource id>";
const sampleDataRoot = "<path to image files>";

const endPoint = "https://<my-resource-name>.cognitiveservices.azure.com/"

const publishIterationName = "classifyModel";

const trainer = new TrainingApiClient(trainingKey, endPoint);

(async () => {
    console.log("Creating project...");
    const sampleProject = await trainer.createProject("Sample Project")

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

プロジェクトに分類タグを作成するため、sample.js の末尾に次のコードを追加します。To create classification tags to your project, add the following code to the end of sample.js:

const hemlockTag = await trainer.createTag(sampleProject.id, "Hemlock");
const cherryTag = await trainer.createTag(sampleProject.id, "Japanese Cherry");

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

サンプルの画像をプロジェクトに追加するには、タグ作成後、次のコードを挿入します。To add the sample images to the project, insert the following code after the tag creation. このコードでは、それぞれの画像を対応するタグと共にアップロードします。This code uploads each image with its corresponding tag. 1 回のバッチで最大 64 個の画像をアップロードできます。You can upload up to 64 images in a single batch.

注意

前に Cognitive Services Node.js SDK Samples プロジェクトをダウンロードした場所に応じて、sampleDataRoot を画像へのパスに変更する必要があります。You'll need to change sampleDataRoot to the path to the images based on where you downloaded the Cognitive Services Node.js SDK Samples project earlier.

console.log("Adding images...");
let fileUploadPromises = [];

const hemlockDir = `${sampleDataRoot}/Hemlock`;
const hemlockFiles = fs.readdirSync(hemlockDir);
hemlockFiles.forEach(file => {
    fileUploadPromises.push(trainer.createImagesFromData(sampleProject.id, fs.readFileSync(`${hemlockDir}/${file}`), { tagIds: [hemlockTag.id] }));
});

const cherryDir = `${sampleDataRoot}/Japanese Cherry`;
const japaneseCherryFiles = fs.readdirSync(cherryDir);
japaneseCherryFiles.forEach(file => {
    fileUploadPromises.push(trainer.createImagesFromData(sampleProject.id, fs.readFileSync(`${cherryDir}/${file}`), { tagIds: [cherryTag.id] }));
});

await Promise.all(fileUploadPromises);

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

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

console.log("Training...");
let trainingIteration = await trainer.trainProject(sampleProject.id);

// Wait for training to complete
console.log("Training started...");
while (trainingIteration.status == "Training") {
    console.log("Training status: " + trainingIteration.status);
    await setTimeoutPromise(1000, null);
    trainingIteration = await trainer.getIteration(sampleProject.id, trainingIteration.id)
}
console.log("Training status: " + trainingIteration.status);

// Publish the iteration to the end point
await trainer.publishIteration(sampleProject.id, trainingIteration.id, publishIterationName, predictionResourceId);

予測エンドポイントで公開されたイテレーションを取得して使用するGet and use the published iteration on the prediction endpoint

画像を予測エンドポイントに送信し、予測を取得するには、ファイルの末尾に以下のコードを追加します。To send an image to the prediction endpoint and retrieve the prediction, add the following code to the end of the file:

    const predictor = new PredictionApiClient(predictionKey, endPoint);
    const testFile = fs.readFileSync(`${sampleDataRoot}/Test/test_image.jpg`);

    const results = await predictor.classifyImage(sampleProject.id, publishIterationName, testFile);

    // Step 6. Show results
    console.log("Results:");
    results.predictions.forEach(predictedResult => {
        console.log(`\t ${predictedResult.tagName}: ${(predictedResult.probability * 100.0).toFixed(2)}%`);
    });
})()

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

sample.js を実行します。Run sample.js.

node sample.js

アプリケーションの出力は次のテキストのようになります。The output of the application should be similar to the following text:

Creating project...
Adding images...
Training...
Training started...
Training status: Training
Training status: Training
Training status: Training
Training status: Completed
Results:
         Hemlock: 94.97%
         Japanese Cherry: 0.01%

<base_image_url>/Images/Test/ 内のテスト画像にタグが適切に付けられていることを確認してください。You can then verify that the test image (found in <base_image_url>/Images/Test/) is tagged appropriately. 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 have seen how every step of the image classification process can be done 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.