クイック スタート:Computer Vision クライアント ライブラリを使用するQuickstart: Use the Computer Vision client library

Computer Vision クライアント ライブラリを使用開始しましょう。Get started with the Computer Vision client library. 以下の手順に従って、パッケージをインストールし、基本タスクのコード例を試してみましょう。Follow these steps to install the package and try out the example code for basic tasks. Computer Vision を使用すると、画像を処理して情報を返すための高度なアルゴリズムにアクセスできます。Computer Vision provides you with access to advanced algorithms for processing images and returning information

Computer Vision クライアント ライブラリは次に使用できます。Use the Computer Vision client library to:

  • タグ、テキストの説明、顔、成人向けコンテンツなどについて、画像を分析します。Analyze an image for tags, text description, faces, adult content, and more.
  • Batch Read API を使用して、印刷されたテキストと手書きのテキストを認識します。Recognize printed and handwritten text with the Batch Read API.

リファレンスのドキュメント | ライブラリのソース コード | パッケージ (NuGet) | サンプルReference documentation | Library source code | Package (NuGet) | Samples

前提条件Prerequisites

設定Setting up

Computer Vision Azure リソースを作成するCreate a Computer Vision Azure resource

Azure Cognitive Services は、ユーザーがサブスクライブする Azure リソースによって表されます。Azure Cognitive Services are represented by Azure resources that you subscribe to. Azure portal またはローカル マシン上の Azure CLI を使用して、Computer Vision 用のリソースを作成します。Create a resource for Computer Vision using the Azure portal or Azure CLI on your local machine. 次のこともできます。You can also:

試用版のサブスクリプションまたはリソースからキーを取得した後、キーとエンドポイント URL の環境変数を作成し、それぞれ COMPUTER_VISION_SUBSCRIPTION_KEY および COMPUTER_VISION_ENDPOINT という名前を付けます。After you get a key from your trial subscription or resource, create environment variables for the key and endpoint URL, named COMPUTER_VISION_SUBSCRIPTION_KEY and COMPUTER_VISION_ENDPOINT, respectively.

新しい C# アプリケーションを作成するCreate a new C# application

好みのエディターまたは IDE で、新しい .NET Core アプリケーションを作成します。Create a new .NET Core application in your preferred editor or IDE.

コンソール ウィンドウ (cmd、PowerShell、Bash など) で、dotnet new コマンドを使用し、computer-vision-quickstart という名前で新しいコンソール アプリを作成します。In a console window (such as cmd, PowerShell, or Bash), use the dotnet new command to create a new console app with the name computer-vision-quickstart. このコマンドにより、1 つのソース ファイルを使用する単純な "Hello World" C# プロジェクトが作成されます。ComputerVisionQuickstart.csThis command creates a simple "Hello World" C# project with a single source file: ComputerVisionQuickstart.cs.

dotnet new console -n computer-vision-quickstart

新しく作成されたアプリ フォルダーにディレクトリを変更します。Change your directory to the newly created app folder. 次を使用してアプリケーションをビルドできます。You can build the application with:

dotnet build

ビルドの出力に警告やエラーが含まれないようにする必要があります。The build output should contain no warnings or errors.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

プロジェクト ディレクトリから、好みのエディターまたは IDE で ComputerVisionQuickstart.cs ファイルを開きます。From the project directory, open the ComputerVisionQuickstart.cs file in your preferred editor or IDE. 次の using ディレクティブを追加します。Add the following using directives:

using System;
using System.Collections.Generic;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision;
using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

アプリケーションの Program クラスで、対象のリソースの Azure エンドポイントおよびキー用の変数を作成します。In the application's Program class, create variables for your resource's Azure endpoint and key.

// Add your Computer Vision subscription key and endpoint to your environment variables. 
// Close/reopen your project for them to take effect.
static string subscriptionKey = Environment.GetEnvironmentVariable("COMPUTER_VISION_SUBSCRIPTION_KEY");
static string endpoint = Environment.GetEnvironmentVariable("COMPUTER_VISION_ENDPOINT");

クライアント ライブラリをインストールするInstall the client library

次のコマンドを使用して、アプリケーション ディレクトリ内に .NET 用 Computer Vision クライアント ライブラリをインストールします。Within the application directory, install the Computer Vision client library for .NET with the following command:

dotnet add package Microsoft.Azure.CognitiveServices.Vision.ComputerVision --version 5.0.0

Visual Studio IDE を使用している場合、クライアント ライブラリは、ダウンロード可能な NuGet パッケージとして入手できます。If you're using the Visual Studio IDE, the client library is available as a downloadable NuGet package.

オブジェクト モデルObject model

以下のクラスとインターフェイスにより、Computer Vision .NET SDK の主要な機能の一部が処理されます。The following classes and interfaces handle some of the major features of the Computer Vision .NET SDK.

名前Name 説明Description
ComputerVisionClientComputerVisionClient このクラスは、すべての Computer Vision の機能に必要です。This class is needed for all Computer Vision functionality. サブスクリプション情報を使用してインスタンス化し、そのインスタンスを使用して、画像に対するほとんどの操作を実行することができます。You instantiate it with your subscription information, and you use it to do most image operations.
ComputerVisionClientExtensionsComputerVisionClientExtensions このクラスには、ComputerVisionClient の追加的なメソッドが含まれています。This class contains additional methods for the ComputerVisionClient.
VisualFeatureTypesVisualFeatureTypes この列挙型は、標準の分析操作で実行できるさまざまな種類の画像分析を定義します。This enum defines the different types of image analysis that can be done in a standard Analyze operation. 必要に応じて、VisualFeatureTypes の値のセットを指定します。You specify a set of VisualFeatureTypes values depending on your needs.

コード例Code examples

これらのコード スニペットでは、.NET 用 Computer Vision クライアント ライブラリを使用して以下のタスクを実行する方法を示します。These code snippets show you how to do the following tasks with the Computer Vision client library for .NET:

クライアントを認証するAuthenticate the client

注意

このクイックスタートでは、COMPUTER_VISION_SUBSCRIPTION_KEY および COMPUTER_VISION_ENDPOINT という名前の、Computer Vision キーとエンドポイントのそれぞれの 環境変数を作成 してあることを前提としています。This quickstart assumes you've created environment variables for your Computer Vision key and endpoint, named COMPUTER_VISION_SUBSCRIPTION_KEY and COMPUTER_VISION_ENDPOINT respectively.

新しいメソッドで、実際のエンドポイントとキーを使用してクライアントをインスタンス化します。In a new method, instantiate a client with your endpoint and key. 自分のキーを指定して ApiKeyServiceClientCredentials オブジェクトを作成し、それを自分のエンドポイントと共に使用して ComputerVisionClient オブジェクトを作成します。Create a ApiKeyServiceClientCredentials object with your key, and use it with your endpoint to create a ComputerVisionClient object.

/*
 * AUTHENTICATE
 * Creates a Computer Vision client used by each example.
 */
public static ComputerVisionClient Authenticate(string endpoint, string key)
{
    ComputerVisionClient client =
      new ComputerVisionClient(new ApiKeyServiceClientCredentials(key))
      { Endpoint = endpoint };
    return client;
}

ほとんどの場合、このメソッドは、Main メソッドから呼び出します。You'll likely want to call this method in the Main method.

// Create a client
ComputerVisionClient client = Authenticate(endpoint, subscriptionKey);

イメージを分析するAnalyze an image

次のコードでは、AnalyzeImageUrl メソッドを定義しています。このメソッドは、クライアント オブジェクトを使用して、リモート画像を分析し、結果を出力します。The following code defines a method, AnalyzeImageUrl, which uses the client object to analyze a remote image and print the results. このメソッドでは、テキストの説明、分類、タグの一覧、検出された顔、成人向けコンテンツ フラグ、メインの色、および画像の種類が返されます。The method returns a text description, categorization, list of tags, detected faces, adult content flags, main colors, and image type.

このメソッドの呼び出しを Main メソッドに追加します。Add the method call in your Main method.

// Analyze an image to get features and other properties.
AnalyzeImageUrl(client, ANALYZE_URL_IMAGE).Wait();

テスト画像の設定Set up test image

Program クラスで、分析する画像の URL への参照を保存します。In your Program class, save a reference to the URL of the image you want to analyze.

// URL image used for analyzing an image (image of puppy)
private const string ANALYZE_URL_IMAGE = "https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png";

注意

ローカルの画像を分析することもできます。You can also analyze a local image. ローカルの画像に関連したシナリオについては、GitHub 上のサンプル コードを参照してください。See the sample code on GitHub for scenarios involving local images.

視覚的特徴を指定するSpecify visual features

画像分析用の新しいメソッドを定義します。Define your new method for image analysis. 以下のコードは、分析で抽出する視覚的特徴を指定するものです。このコードを追加します。Add the code below, which specifies visual features you'd like to extract in your analysis. 完全な一覧については、 VisualFeatureTypes 列挙型を参照してください。See the VisualFeatureTypes enum for a complete list.

/* 
 * ANALYZE IMAGE - URL IMAGE
 * Analyze URL image. Extracts captions, categories, tags, objects, faces, racy/adult content,
 * brands, celebrities, landmarks, color scheme, and image types.
 */
public static async Task AnalyzeImageUrl(ComputerVisionClient client, string imageUrl)
{
    Console.WriteLine("----------------------------------------------------------");
    Console.WriteLine("ANALYZE IMAGE - URL");
    Console.WriteLine();

    // Creating a list that defines the features to be extracted from the image. 
    List<VisualFeatureTypes> features = new List<VisualFeatureTypes>()
{
  VisualFeatureTypes.Categories, VisualFeatureTypes.Description,
  VisualFeatureTypes.Faces, VisualFeatureTypes.ImageType,
  VisualFeatureTypes.Tags, VisualFeatureTypes.Adult,
  VisualFeatureTypes.Color, VisualFeatureTypes.Brands,
  VisualFeatureTypes.Objects
};

次のいずれかのコード ブロックを AnalyzeImageUrl メソッドに挿入して、その機能を実装します。Insert any of the following code blocks into your AnalyzeImageUrl method to implement their features. 末尾に右角かっこを追加することを忘れないでください。Remember to add a closing bracket at the end.

}

分析Analyze

AnalyzeImageAsync メソッドは、抽出されたすべての情報を含む ImageAnalysis オブジェクトを返します。The AnalyzeImageAsync method returns an ImageAnalysis object that contains all of extracted information.

Console.WriteLine($"Analyzing the image {Path.GetFileName(imageUrl)}...");
Console.WriteLine();
// Analyze the URL image 
ImageAnalysis results = await client.AnalyzeImageAsync(imageUrl, features);

以降のセクションでは、この情報の解析方法について詳しく説明します。The following sections show how to parse this information in detail.

画像の説明の取得Get image description

次のコードは、画像に対して生成されたキャプションの一覧を取得します。The following code gets the list of generated captions for the image. 詳細については、画像の説明に関するページを参照してください。See Describe images for more details.

// Sunmarizes the image content.
Console.WriteLine("Summary:");
foreach (var caption in results.Description.Captions)
{
    Console.WriteLine($"{caption.Text} with confidence {caption.Confidence}");
}
Console.WriteLine();

画像カテゴリの取得Get image category

次のコードは、画像の検出されたカテゴリを取得します。The following code gets the detected category of the image. 詳細については、画像の分類に関するページを参照してください。See Categorize images for more details.

// Display categories the image is divided into.
Console.WriteLine("Categories:");
foreach (var category in results.Categories)
{
    Console.WriteLine($"{category.Name} with confidence {category.Score}");
}
Console.WriteLine();

画像タグの取得Get image tags

次のコードは、画像内の検出されたタグのセットを取得します。The following code gets the set of detected tags in the image. 詳細については、コンテンツ タグに関するページを参照してください。See Content tags for more details.

// Image tags and their confidence score
Console.WriteLine("Tags:");
foreach (var tag in results.Tags)
{
    Console.WriteLine($"{tag.Name} {tag.Confidence}");
}
Console.WriteLine();

物体を検出するDetect objects

次のコードは、画像から身の回りの物を検出してコンソールに出力します。The following code detects common objects in the image and prints them to the console. 詳細については、物体の検出に関するページを参照してください。See Object detection for more details.

// Objects
Console.WriteLine("Objects:");
foreach (var obj in results.Objects)
{
    Console.WriteLine($"{obj.ObjectProperty} with confidence {obj.Confidence} at location {obj.Rectangle.X}, " +
      $"{obj.Rectangle.X + obj.Rectangle.W}, {obj.Rectangle.Y}, {obj.Rectangle.Y + obj.Rectangle.H}");
}
Console.WriteLine();

ブランドを検出するDetect brands

次のコードは、企業のブランドとロゴを画像から検出してコンソールに出力します。The following code detects corporate brands and logos in the image and prints them to the console. 詳細については、ブランドの検出に関するページを参照してください。See Brand detection for more details.

// Well-known (or custom, if set) brands.
Console.WriteLine("Brands:");
foreach (var brand in results.Brands)
{
    Console.WriteLine($"Logo of {brand.Name} with confidence {brand.Confidence} at location {brand.Rectangle.X}, " +
      $"{brand.Rectangle.X + brand.Rectangle.W}, {brand.Rectangle.Y}, {brand.Rectangle.Y + brand.Rectangle.H}");
}
Console.WriteLine();

顔を検出するDetect faces

次のコードは、画像内で検出された顔を、その四角形の座標と顔選択属性と共に返します。The following code returns the detected faces in the image with their rectangle coordinates and select face attributes. 詳細については、顔の検出に関するページを参照してください。See Face detection for more details.

// Faces
Console.WriteLine("Faces:");
foreach (var face in results.Faces)
{
    Console.WriteLine($"A {face.Gender} of age {face.Age} at location {face.FaceRectangle.Left}, " +
      $"{face.FaceRectangle.Left}, {face.FaceRectangle.Top + face.FaceRectangle.Width}, " +
      $"{face.FaceRectangle.Top + face.FaceRectangle.Height}");
}
Console.WriteLine();

成人向け、わいせつ、または不快なコンテンツを検出するDetect adult, racy, or gory content

次のコードは、画像内で検出された成人向けのコンテンツの存在を出力します。The following code prints the detected presence of adult content in the image. 詳細については、「成人向けコンテンツ、わいせつなコンテンツ、不快なコンテンツ」を参照してください。See Adult, racy, gory content for more details.

// Adult or racy content, if any.
Console.WriteLine("Adult:");
Console.WriteLine($"Has adult content: {results.Adult.IsAdultContent} with confidence {results.Adult.AdultScore}");
Console.WriteLine($"Has racy content: {results.Adult.IsRacyContent} with confidence {results.Adult.RacyScore}");
Console.WriteLine();

画像の配色の取得Get image color scheme

次のコードは、ドミナント カラー、アクセント カラーなど、画像内で検出された色の属性を出力します。The following code prints the detected color attributes in the image, like the dominant colors and accent color. 詳細については、配色に関するページを参照してください。See Color schemes for more details.

// Identifies the color scheme.
Console.WriteLine("Color Scheme:");
Console.WriteLine("Is black and white?: " + results.Color.IsBWImg);
Console.WriteLine("Accent color: " + results.Color.AccentColor);
Console.WriteLine("Dominant background color: " + results.Color.DominantColorBackground);
Console.WriteLine("Dominant foreground color: " + results.Color.DominantColorForeground);
Console.WriteLine("Dominant colors: " + string.Join(",", results.Color.DominantColors));
Console.WriteLine();

ドメイン固有のコンテンツの取得Get domain-specific content

Computer Vision では、特殊なモデルを使用して、画像をさらに分析できます。Computer Vision can use specialized models to do further analysis on images. 詳細については、ドメイン固有のコンテンツに関するページを参照してください。See Domain-specific content for more details.

次のコードは、画像内の検出された有名人に関するデータを解析します。The following code parses data about detected celebrities in the image.

// Celebrities in image, if any.
Console.WriteLine("Celebrities:");
foreach (var category in results.Categories)
{
    if (category.Detail?.Celebrities != null)
    {
        foreach (var celeb in category.Detail.Celebrities)
        {
            Console.WriteLine($"{celeb.Name} with confidence {celeb.Confidence} at location {celeb.FaceRectangle.Left}, " +
              $"{celeb.FaceRectangle.Top}, {celeb.FaceRectangle.Height}, {celeb.FaceRectangle.Width}");
        }
    }
}
Console.WriteLine();

次のコードは、画像内の検出されたランドマークに関するデータを解析します。The following code parses data about detected landmarks in the image.

// Popular landmarks in image, if any.
Console.WriteLine("Landmarks:");
foreach (var category in results.Categories)
{
    if (category.Detail?.Landmarks != null)
    {
        foreach (var landmark in category.Detail.Landmarks)
        {
            Console.WriteLine($"{landmark.Name} with confidence {landmark.Confidence}");
        }
    }
}
Console.WriteLine();

画像の種類を取得するGet the image type

次のコードは、画像の種類 (クリップ アートであるか線画であるか) に関する情報を出力します。The following code prints information about the type of image—whether it is clip art or a line drawing.

// Detects the image types.
Console.WriteLine("Image Type:");
Console.WriteLine("Clip Art Type: " + results.ImageType.ClipArtType);
Console.WriteLine("Line Drawing Type: " + results.ImageType.LineDrawingType);
Console.WriteLine();

印刷されたテキストと手書きのテキストを読み取るRead printed and handwritten text

Computer Vision は、画像に映っているテキストを読み取って、文字ストリームに変換することができます。Computer Vision can read visible text in an image and convert it to a character stream. このセクションのコードでは ExtractTextUrl メソッドを定義しています。クライアント オブジェクトを使用して、印刷されたテキストや手書きのテキストを画像から検出して抽出するものです。The code in this section defines a method, ExtractTextUrl, which uses the client object to detect and extract printed or handwritten text in the image.

このメソッドの呼び出しを Main メソッドに追加します。Add the method call in your Main method.

// Read the batch text from an image (handwriting and/or printed).
BatchReadFileUrl(client, EXTRACT_TEXT_URL_IMAGE).Wait();
BatchReadFileLocal(client, EXTRACT_TEXT_LOCAL_IMAGE).Wait();

テスト画像の設定Set up test image

Program クラスで、テキストの抽出元となる画像の URL への参照を保存します。In your Program class, save a reference the URL of the image you want to extract text from.

private const string EXTRACT_TEXT_URL_IMAGE = "https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg";
// URL image for OCR (optical character recognition). (Image of motivational meme).

注意

ローカルの画像からテキストを抽出することもできます。You can also extract text from a local image. ローカルの画像に関連したシナリオについては、GitHub 上のサンプル コードを参照してください。See the sample code on GitHub for scenarios involving local images.

Read API を呼び出すCall the Read API

テキストを読み取るための新しいメソッドを定義します。Define the new method for reading text. 以下のコードは、指定された画像に対して BatchReadFileAsync メソッドを呼び出すものです。このコードを追加します。Add the code below, which calls the BatchReadFileAsync method for the given image. これによって操作 ID が返され、画像の内容を読み取る非同期プロセスが開始されます。This returns an operation ID and starts an asynchronous process to read the content of the image.

/*
 * BATCH READ FILE - URL IMAGE
 * Recognizes handwritten text. 
 * This API call offers an improvement of results over the Recognize Text calls.
 */
public static async Task BatchReadFileUrl(ComputerVisionClient client, string urlImage)
{
    Console.WriteLine("----------------------------------------------------------");
    Console.WriteLine("BATCH READ FILE - URL IMAGE");
    Console.WriteLine();

    // Read text from URL
    BatchReadFileHeaders textHeaders = await client.BatchReadFileAsync(urlImage);
    // After the request, get the operation location (operation ID)
    string operationLocation = textHeaders.OperationLocation;

読み取りの結果を取得するGet Read results

次に、BatchReadFileAsync の呼び出しから返された操作 ID を取得し、操作の結果をサービスに照会します。Next, get the operation ID returned from the BatchReadFileAsync call, and use it to query the service for operation results. 次のコードは、結果が返されるまで 1 秒間隔で操作をチェックします。The following code checks the operation at one-second intervals until the results are returned. 次に、抽出されたテキスト データをコンソールに出力します。It then prints the extracted text data to the console.

    // Retrieve the URI where the recognized text will be stored from the Operation-Location header.
    // We only need the ID and not the full URL
    const int numberOfCharsInOperationId = 36;
    string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId);

    // Extract the text
    // Delay is between iterations and tries a maximum of 10 times.
    int i = 0;
    int maxRetries = 10;
    ReadOperationResult results;
    Console.WriteLine($"Extracting text from URL image {Path.GetFileName(urlImage)}...");
    Console.WriteLine();
    do
    {
        results = await client.GetReadOperationResultAsync(operationId);
        Console.WriteLine("Server status: {0}, waiting {1} seconds...", results.Status, i);
        await Task.Delay(1000);
        if (i == 9) 
{ 
    Console.WriteLine("Server timed out."); 
}
    }
    while ((results.Status == TextOperationStatusCodes.Running ||
        results.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries);

読み取りの結果を表示するDisplay Read results

取得したテキスト データを解析して表示する次のコードを追加すれば、メソッドの定義は完了です。Add the following code to parse and display the retrieved text data, and finish the method definition.

    // Display the found text.
    Console.WriteLine();
    var textRecognitionLocalFileResults = results.RecognitionResults;
    foreach (TextRecognitionResult recResult in textRecognitionLocalFileResults)
    {
        foreach (Line line in recResult.Lines)
        {
            Console.WriteLine(line.Text);
        }
    }
    Console.WriteLine();
}

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

アプリケーション ディレクトリから dotnet run コマンドを使用してアプリケーションを実行します。Run the application from your application directory with the dotnet run command.

dotnet run

リソースをクリーンアップするClean up resources

Cognitive Services サブスクリプションをクリーンアップして削除したい場合は、リソースまたはリソース グループを削除することができます。If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。Deleting the resource group also deletes any other resources associated with it.

次のステップNext steps

リファレンス ドキュメント | 成果物 (Maven) | サンプルReference documentation | Artifact (Maven) | Samples

前提条件Prerequisites

設定Setting up

Computer Vision Azure リソースを作成するCreate a Computer Vision Azure resource

Azure Cognitive Services は、ユーザーがサブスクライブする Azure リソースによって表されます。Azure Cognitive Services are represented by Azure resources that you subscribe to. Azure portal またはローカル マシン上の Azure CLI を使用して、Computer Vision 用のリソースを作成します。Create a resource for Computer Vision using the Azure portal or Azure CLI on your local machine. 次のこともできます。You can also:

次に、キーとサービス エンドポイント文字列用に、それぞれ COMPUTER_VISION_SUBSCRIPTION_KEYCOMPUTER_VISION_ENDPOINT という名前の環境変数を作成します。Then, create environment variables for the key and service endpoint string, named COMPUTER_VISION_SUBSCRIPTION_KEY and COMPUTER_VISION_ENDPOINT, respectively.

新しい Gradle プロジェクトを作成するCreate a new Gradle project

コンソール ウィンドウ (cmd、PowerShell、Bash など) で、ご利用のアプリ用に新しいディレクトリを作成し、そこに移動します。In a console window (such as cmd, PowerShell, or Bash), create a new directory for your app, and navigate to it.

mkdir myapp && cd myapp

作業ディレクトリから gradle init コマンドを実行します。Run the gradle init command from your working directory. 次のコマンドを実行すると、build.gradle.kts を含む、Gradle 用の重要なビルド ファイルが作成されます。これは、アプリケーションを作成して構成するために、実行時に使用されます。This command will create essential build files for Gradle, including build.gradle.kts, which is used at runtime to create and configure your application.

gradle init --type basic

DSL を選択するよう求められたら、Kotlin を選択します。When prompted to choose a DSL, select Kotlin.

build.gradle.kts を検索し、任意の IDE またはテキスト エディターで開きます。Locate build.gradle.kts and open it with your preferred IDE or text editor. その後、次のビルド構成をコピーします。Then copy in the following build configuration. この構成では、エントリ ポイントが ComputerVisionQuickstarts クラスである Java アプリケーションとしてプロジェクトを定義します。This configuration defines the project as a Java application whose entry point is the class ComputerVisionQuickstarts. これによって、Computer Vision ライブラリがインポートされます。It imports the Computer Vision library.

plugins {
    java
    application
}
application { 
    mainClassName = "ComputerVisionQuickstarts"
}
repositories {
    mavenCentral()
}

作業ディレクトリから次のコマンドを実行し、プロジェクト ソース フォルダーを作成します。From your working directory, run the following command to create a project source folder:

mkdir -p src/main/java

新しいフォルダーに移動し、ComputerVisionQuickstarts.java という名前のファイルを作成します。Navigate to the new folder and create a file called ComputerVisionQuickstarts.java. それを任意のエディターまたは IDE で開き、以下の import ステートメントを追加します。Open it in your preferred editor or IDE and add the following import statements:

import com.microsoft.azure.cognitiveservices.vision.computervision.*;
import com.microsoft.azure.cognitiveservices.vision.computervision.models.*;

import java.io.File;
import java.io.FileInputStream;
import java.nio.file.Files;

import java.util.ArrayList;
import java.util.List;

次に、ComputerVisionQuickstarts のクラス定義を追加します。Then add a class definition for ComputerVisionQuickstarts.

クライアント ライブラリをインストールするInstall the client library

このクイックスタートでは、Gradle 依存関係マネージャーを使用します。This quickstart uses the Gradle dependency manager. クライアント ライブラリとその他の依存関係マネージャーの情報については、Maven Central Repository を参照してください。You can find the client library and information for other dependency managers on the Maven Central Repository.

プロジェクトの build.gradle.kts ファイルに、Computer Vision クライアント ライブラリを依存関係として含めます。In your project's build.gradle.kts file, include the Computer Vision client library as a dependency.

dependencies {
    compile(group = "com.microsoft.azure.cognitiveservices", name = "azure-cognitiveservices-computervision", version = "1.0.2-beta")
}

オブジェクト モデルObject model

以下のクラスとインターフェイスにより、Computer Vision Java SDK の主要な機能の一部が処理されます。The following classes and interfaces handle some of the major features of the Computer Vision Java SDK.

名前Name 説明Description
ComputerVisionClientComputerVisionClient このクラスは、すべての Computer Vision の機能に必要です。This class is needed for all Computer Vision functionality. サブスクリプション情報を使用してこれをインスタンス化し、他のクラスのインスタンスを生成するために使用します。You instantiate it with your subscription information, and you use it to produce instances of other classes.
ComputerVisionComputerVision このクラスは、クライアント オブジェクトから派生し、画像分析、テキスト検出、サムネイル生成など、すべての画像操作を直接処理します。This class comes from the client object and directly handles all of the image operations, such as image analysis, text detection, and thumbnail generation.
VisualFeatureTypesVisualFeatureTypes この列挙型は、標準の分析操作で実行できるさまざまな種類の画像分析を定義します。This enum defines the different types of image analysis that can be done in a standard Analyze operation. 必要に応じて、VisualFeatureTypes の値のセットを指定します。You specify a set of VisualFeatureTypes values depending on your needs.

コード例Code examples

これらのコード スニペットでは、Java 用 Computer Vision クライアント ライブラリを使用して以下のタスクを実行する方法を示します。These code snippets show you how to do the following tasks with the Computer Vision client library for Java:

クライアントを認証するAuthenticate the client

注意

このクイックスタートでは、Computer Vision キーのために COMPUTER_VISION_SUBSCRIPTION_KEY という名前の環境変数が作成されていることを前提としています。This quickstart assumes you've created an environment variable for your Computer Vision key, named COMPUTER_VISION_SUBSCRIPTION_KEY.

次のコードは、クラスに main メソッドを追加し、リソースの Azure エンドポイントとキーのために変数を作成します。The following code adds a main method to your class and creates variables for your resource's Azure endpoint and key. 独自のエンドポイント文字列を入力する必要があります。これは、Azure portal の [概要] セクションで確認できます。You'll need to enter your own endpoint string, which you can find by checking the Overview section of the Azure portal.

public static void main(String[] args) {
    // Add your Computer Vision subscription key and endpoint to your environment
    // variables.
    // After setting, close and then re-open your command shell or project for the
    // changes to take effect.
    String subscriptionKey = System.getenv("COMPUTER_VISION_SUBSCRIPTION_KEY");
    String endpoint = System.getenv("COMPUTER_VISION_ENDPOINT");

次に、次のコードを追加して ComputerVisionClient オブジェクトを作成し、そのオブジェクトを他のメソッドに渡します。このメソッドは、後で定義します。Next, add the following code to create a ComputerVisionClient object and passes it into other method(s), which you'll define later.

ComputerVisionClient compVisClient = ComputerVisionManager.authenticate(subscriptionKey).withEndpoint(endpoint);
// END - Create an authenticated Computer Vision client.

System.out.println("\nAzure Cognitive Services Computer Vision - Java Quickstart Sample");

// Analyze local and remote images
AnalyzeLocalImage(compVisClient);

// Recognize printed text with OCR for a local and remote (URL) image
RecognizeTextOCRLocal(compVisClient);

注意

アプリケーションの起動後に環境変数を作成した場合、その変数にアクセスするには、アプリケーションを実行しているエディター、IDE、またはシェルを閉じて、もう一度開く必要があります。If you created the environment variable after you launched the application, you'll need to close and reopen the editor, IDE, or shell running it to access the variable.

イメージを分析するAnalyze an image

次のコードでは、AnalyzeLocalImage メソッドを定義しています。このメソッドは、クライアント オブジェクトを使用して、ローカル画像を分析し、結果を出力します。The following code defines a method, AnalyzeLocalImage, which uses the client object to analyze a local image and print the results. このメソッドでは、テキストの説明、分類、タグの一覧、検出された顔、成人向けコンテンツ フラグ、メインの色、および画像の種類が返されます。The method returns a text description, categorization, list of tags, detected faces, adult content flags, main colors, and image type.

テスト画像の設定Set up test image

まず、プロジェクトの src/main/ フォルダーに resources/ フォルダーを作成し、分析する画像を追加します。First, create a resources/ folder in the src/main/ folder of your project, and add an image you'd like to analyze. 次に、ComputerVisionQuickstarts クラスに次のメソッド定義を追加します。Then add the following method definition to your ComputerVisionQuickstarts class. 必要に応じて、pathToLocalImage の値を画像ファイルと一致するように変更します。If necessary, change the value of the pathToLocalImage to match your image file.

public static void AnalyzeLocalImage(ComputerVisionClient compVisClient) {
    /*
     * Analyze a local image:
     *
     * Set a string variable equal to the path of a local image. The image path
     * below is a relative path.
     */
    String pathToLocalImage = "src\\main\\resources\\myImage.jpg";

注意

また、URL を使用してリモート画像を分析することもできます。You can also analyze a remote image using its URL. リモート画像を含むシナリオについては、GitHub 上のサンプル コードを参照してください。See the sample code on GitHub for scenarios involving remote images.

視覚的特徴を指定するSpecify visual features

次に、分析で抽出する視覚的特徴を指定します。Next, specify which visual features you'd like to extract in your analysis. 完全な一覧については、VisualFeatureTypes 列挙型を参照してください。See the VisualFeatureTypes enum for a complete list.

// This list defines the features to be extracted from the image.
List<VisualFeatureTypes> featuresToExtractFromLocalImage = new ArrayList<>();
featuresToExtractFromLocalImage.add(VisualFeatureTypes.DESCRIPTION);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.CATEGORIES);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.TAGS);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.FACES);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.ADULT);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.COLOR);
featuresToExtractFromLocalImage.add(VisualFeatureTypes.IMAGE_TYPE);

分析Analyze

このメソッドは、画像分析のスコープごとに詳細な結果をコンソールに出力します。This method prints detailed results to the console for each scope of image analysis. このメソッドの呼び出しを、Try と Catch ブロックで囲むことをお勧めします。We recommend you surround this method call in a Try/Catch block. analyzeImageInStream メソッドは、抽出されたすべての情報を含む ImageAnalysis オブジェクトを返します。The analyzeImageInStream method returns an ImageAnalysis object that contains all of extracted information.

// Need a byte array for analyzing a local image.
File rawImage = new File(pathToLocalImage);
byte[] imageByteArray = Files.readAllBytes(rawImage.toPath());

// Call the Computer Vision service and tell it to analyze the loaded image.
ImageAnalysis analysis = compVisClient.computerVision().analyzeImageInStream().withImage(imageByteArray)
        .withVisualFeatures(featuresToExtractFromLocalImage).execute();

以降のセクションでは、この情報の解析方法について詳しく説明します。The following sections show how to parse this information in detail.

画像の説明の取得Get image description

次のコードは、画像に対して生成されたキャプションの一覧を取得します。The following code gets the list of generated captions for the image. 詳細については、画像の説明に関するページを参照してください。For more information, see Describe images.

// Display image captions and confidence values.
System.out.println("\nCaptions: ");
for (ImageCaption caption : analysis.description().captions()) {
    System.out.printf("\'%s\' with confidence %f\n", caption.text(), caption.confidence());
}

画像カテゴリの取得Get image category

次のコードは、画像の検出されたカテゴリを取得します。The following code gets the detected category of the image. 詳細については、「イメージの分類」を参照してください。For more information, see Categorize images.

// Display image category names and confidence values.
System.out.println("\nCategories: ");
for (Category category : analysis.categories()) {
    System.out.printf("\'%s\' with confidence %f\n", category.name(), category.score());
}

画像タグの取得Get image tags

次のコードは、画像内の検出されたタグのセットを取得します。The following code gets the set of detected tags in the image. 詳細については、「コンテンツ タグ」を参照してください。For more information, see Content tags.

// Display image tags and confidence values.
System.out.println("\nTags: ");
for (ImageTag tag : analysis.tags()) {
    System.out.printf("\'%s\' with confidence %f\n", tag.name(), tag.confidence());
}

顔を検出するDetect faces

次のコードは、画像内で検出された顔を、その四角形の座標と顔選択属性と共に返します。The following code returns the detected faces in the image with their rectangle coordinates and selects face attributes. 詳しくは、「顔検出」をご覧ください。For more information, see Face detection.

// Display any faces found in the image and their location.
System.out.println("\nFaces: ");
for (FaceDescription face : analysis.faces()) {
    System.out.printf("\'%s\' of age %d at location (%d, %d), (%d, %d)\n", face.gender(), face.age(),
            face.faceRectangle().left(), face.faceRectangle().top(),
            face.faceRectangle().left() + face.faceRectangle().width(),
            face.faceRectangle().top() + face.faceRectangle().height());
}

成人向け、わいせつ、または不快なコンテンツを検出するDetect adult, racy, or gory content

次のコードは、画像内で検出された成人向けのコンテンツの存在を出力します。The following code prints the detected presence of adult content in the image. 詳細については、「成人向けコンテンツ、わいせつなコンテンツ、不快なコンテンツ」を参照してください。For more information, see Adult, racy, gory content.

// Display whether any adult or racy content was detected and the confidence
// values.
System.out.println("\nAdult: ");
System.out.printf("Is adult content: %b with confidence %f\n", analysis.adult().isAdultContent(),
        analysis.adult().adultScore());
System.out.printf("Has racy content: %b with confidence %f\n", analysis.adult().isRacyContent(),
        analysis.adult().racyScore());

画像の配色の取得Get image color scheme

次のコードは、ドミナント カラー、アクセント カラーなど、画像内で検出された色の属性を出力します。The following code prints the detected color attributes in the image, like the dominant colors and accent color. 詳細については、「配色」を参照してください。For more information, see Color schemes.

// Display the image color scheme.
System.out.println("\nColor scheme: ");
System.out.println("Is black and white: " + analysis.color().isBWImg());
System.out.println("Accent color: " + analysis.color().accentColor());
System.out.println("Dominant background color: " + analysis.color().dominantColorBackground());
System.out.println("Dominant foreground color: " + analysis.color().dominantColorForeground());
System.out.println("Dominant colors: " + String.join(", ", analysis.color().dominantColors()));

ドメイン固有のコンテンツの取得Get domain-specific content

Computer Vision では、特殊なモデルを使用して、画像をさらに分析できます。Computer Vision can use specialized model to do further analysis on images. 詳細については、ドメイン固有のコンテンツに関するページを参照してください。For more information, see Domain-specific content.

次のコードは、画像内の検出された有名人に関するデータを解析します。The following code parses data about detected celebrities in the image.

// Display any celebrities detected in the image and their locations.
System.out.println("\nCelebrities: ");
for (Category category : analysis.categories()) {
    if (category.detail() != null && category.detail().celebrities() != null) {
        for (CelebritiesModel celeb : category.detail().celebrities()) {
            System.out.printf("\'%s\' with confidence %f at location (%d, %d), (%d, %d)\n", celeb.name(),
                    celeb.confidence(), celeb.faceRectangle().left(), celeb.faceRectangle().top(),
                    celeb.faceRectangle().left() + celeb.faceRectangle().width(),
                    celeb.faceRectangle().top() + celeb.faceRectangle().height());
        }
    }
}

次のコードは、画像内の検出されたランドマークに関するデータを解析します。The following code parses data about detected landmarks in the image.

// Display any landmarks detected in the image and their locations.
System.out.println("\nLandmarks: ");
for (Category category : analysis.categories()) {
    if (category.detail() != null && category.detail().landmarks() != null) {
        for (LandmarksModel landmark : category.detail().landmarks()) {
            System.out.printf("\'%s\' with confidence %f\n", landmark.name(), landmark.confidence());
        }
    }
}

画像の種類を取得するGet the image type

次のコードは、画像の種類 (クリップ アートであるか線画であるか) に関する情報を出力します。The following code prints information about the type of image—whether it is clip art or line drawing.

// Display what type of clip art or line drawing the image is.
System.out.println("\nImage type:");
System.out.println("Clip art type: " + analysis.imageType().clipArtType());
System.out.println("Line drawing type: " + analysis.imageType().lineDrawingType());

印刷されたテキストと手書きのテキストを読み取るRead printed and handwritten text

Computer Vision は、画像に映っているテキストを読み取って、文字ストリームに変換することができます。Computer Vision can read visible text in an image and convert it to a character stream.

注意

また、URL を使用してリモート画像内のテキストを読み取ることもできます。You can also read text in a remote image using its URL. リモート画像を含むシナリオについては、GitHub 上のサンプル コードを参照してください。See the sample code on GitHub for scenarios involving remote images.

Recognize API を呼び出すCall the Recognize API

まず、次のコードを使用して、特定の画像の recognizePrintedTextInStream メソッドを呼び出します。First, use the following code to call the recognizePrintedTextInStream method for the given image. このコードをプロジェクトに追加するときは、localTextImagePath の値をローカル イメージのパスに置き換える必要があります。When you add this code to your project, you need to replace the value of localTextImagePath with the path to your local image.

/**
 * RECOGNIZE PRINTED TEXT: Displays text found in image with angle and orientation of
 * the block of text.
 */
private static void RecognizeTextOCRLocal(ComputerVisionClient client) {
    System.out.println("-----------------------------------------------");
    System.out.println("RECOGNIZE PRINTED TEXT");
    
    // Replace this string with the path to your own image.
    String localTextImagePath = "<local image path>";
    
    try {
        File rawImage = new File(localTextImagePath);
        byte[] localImageBytes = Files.readAllBytes(rawImage.toPath());

        // Recognize printed text in local image
        OcrResult ocrResultLocal = client.computerVision().recognizePrintedTextInStream()
                .withDetectOrientation(true).withImage(localImageBytes).withLanguage(OcrLanguages.EN).execute();

次のコード ブロックでは、返されたテキストを処理し、それを解析して、各行の最初の単語を出力します。The following block of code processes the returned text and parses it to print out the first word in each line. このコードを使用して、OcrResult インスタンスの構造をすばやく理解できます。You can use this code to quickly understand the structure of an OcrResult instance.

// Print results of local image
System.out.println();
System.out.println("Recognizing printed text from a local image with OCR ...");
System.out.println("\nLanguage: " + ocrResultLocal.language());
System.out.printf("Text angle: %1.3f\n", ocrResultLocal.textAngle());
System.out.println("Orientation: " + ocrResultLocal.orientation());

boolean firstWord = true;
// Gets entire region of text block
for (OcrRegion reg : ocrResultLocal.regions()) {
    // Get one line in the text block
    for (OcrLine line : reg.lines()) {
        for (OcrWord word : line.words()) {
            // get bounding box of first word recognized (just to demo)
            if (firstWord) {
                System.out.println("\nFirst word in first line is \"" + word.text()
                        + "\" with  bounding box: " + word.boundingBox());
                firstWord = false;
                System.out.println();
            }
            System.out.print(word.text() + " ");
        }
        System.out.println();
    }
}

最後に、try/catch ブロックとメソッドの定義を閉じます。Finally, close out the try/catch block and the method definition.

    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
}

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

次を使用してアプリをビルドできます。You can build the app with:

gradle build

gradle run コマンドを使用してアプリケーションを実行します。Run the application with the gradle run command:

gradle run

リソースをクリーンアップするClean up resources

Cognitive Services サブスクリプションをクリーンアップして削除したい場合は、リソースまたはリソース グループを削除することができます。If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。Deleting the resource group also deletes any other resources associated with it.

次のステップNext steps

このクイックスタートでは、Computer Vision Java ライブラリを使用して基本的なタスクを行う方法について学習しました。In this quickstart, you learned how to use the Computer Vision Java library to do basis tasks. 次は、リファレンス ドキュメントを参照して、ライブラリの詳細について学習してください。Next, explore the reference documentation to learn more about the library.

リファレンスのドキュメント | ライブラリのソース コード | パッケージ (npm) | サンプルReference documentation | Library source code | Package (npm) | Samples

前提条件Prerequisites

設定Setting up

Computer Vision Azure リソースを作成するCreate a Computer Vision Azure resource

Azure Cognitive Services は、ユーザーがサブスクライブする Azure リソースによって表されます。Azure Cognitive Services are represented by Azure resources that you subscribe to. Azure portal またはローカル マシン上の Azure CLI を使用して、Computer Vision 用のリソースを作成します。Create a resource for Computer Vision using the Azure portal or Azure CLI on your local machine. 次のこともできます。You can also:

試用版のサブスクリプションまたはリソースからキーを取得した後、キーとエンドポイント URL の環境変数を作成し、それぞれ COMPUTER_VISION_SUBSCRIPTION_KEY および COMPUTER_VISION_ENDPOINT という名前を付けます。After you get a key from your trial subscription or resource, create environment variables for the key and endpoint URL, named COMPUTER_VISION_SUBSCRIPTION_KEY and COMPUTER_VISION_ENDPOINT respectively.

新しい Node.js アプリケーションを作成するCreate a new Node.js application

コンソール ウィンドウ (cmd、PowerShell、Bash など) で、ご利用のアプリ用に新しいディレクトリを作成し、そこに移動します。In a console window (such as cmd, PowerShell, or Bash), create a new directory for your app, and navigate to it.

mkdir myapp && cd myapp

npm init コマンドを実行し、package.json ファイルを使用して node アプリケーションを作成します。Run the npm init command to create a node application with a package.json file.

npm init

クライアント ライブラリをインストールするInstall the client library

ms-rest-azure および @azure/cognitiveservices-computervision NPM パッケージをインストールします。Install the ms-rest-azure and @azure/cognitiveservices-computervision NPM packages:

npm install @azure/cognitiveservices-computervision

アプリの package.json ファイルが依存関係によって更新されます。Your app's package.json file will be updated with the dependencies.

Node.js スクリプトを準備するPrepare the Node.js script

index.js という新しいファイルを作成し、テキスト エディターで開きます。Create a new file, index.js, and open it in a text editor. 次の import ステートメントを追加します。Add the following import statements.

'use strict';

const async = require('async');
const fs = require('fs');
const path = require("path");
const createReadStream = require('fs').createReadStream
const sleep = require('util').promisify(setTimeout);
const ComputerVisionClient = require('@azure/cognitiveservices-computervision').ComputerVisionClient;
const ApiKeyCredentials = require('@azure/ms-rest-js').ApiKeyCredentials;

次に、関数 computerVision を定義し、プライマリ関数とコールバック関数を使用して非同期の series を宣言します。Then, define a function computerVision and declare an async series with primary function and callback function. 主要な関数にクイックスタート コードを追加し、スクリプトの一番下にある computerVision を呼び出します。You will add your quickstart code into the primary function, and call computerVision at the bottom of the script.

function computerVision() {
  async.series([
    async function () {
    },
    function () {
      return new Promise((resolve) => {
        resolve();
      })
    }
  ], (err) => {
    throw (err);
  });
}

computerVision();

オブジェクト モデルObject model

以下のクラスとインターフェイスにより、Computer Vision Node.js SDK の主要な機能の一部が処理されます。The following classes and interfaces handle some of the major features of the Computer Vision Node.js SDK.

名前Name 説明Description
ComputerVisionClientComputerVisionClient このクラスは、すべての Computer Vision の機能に必要です。This class is needed for all Computer Vision functionality. サブスクリプション情報を使用してインスタンス化し、そのインスタンスを使用して、画像に対するほとんどの操作を実行することができます。You instantiate it with your subscription information, and you use it to do most image operations.
VisualFeatureTypesVisualFeatureTypes この列挙型は、標準の分析操作で実行できるさまざまな種類の画像分析を定義します。This enum defines the different types of image analysis that can be done in a standard Analyze operation. 必要に応じて、VisualFeatureTypes の値のセットを指定します。You specify a set of VisualFeatureTypes values depending on your needs.

コード例Code examples

これらのコード スニペットでは、Node.js 用 Computer Vision クライアント ライブラリを使用して以下のタスクを実行する方法を示します。These code snippets show you how to do the following tasks with the Computer Vision client library for Node.js:

クライアントを認証するAuthenticate the client

自分のリソースの Azure エンドポイントおよびキー用の変数を作成します。Create variables for your resource's Azure endpoint and key. アプリケーションの起動後に環境変数を作成した場合、その変数にアクセスするには、アプリケーションを実行しているエディター、IDE、またはシェルを閉じて、もう一度開く必要があります。If you created the environment variable after you launched the application, you will need to close and reopen the editor, IDE, or shell running it to access the variable.

/**
 * AUTHENTICATE
 * This single client is used for all examples.
 */
let key = process.env['COMPUTER_VISION_SUBSCRIPTION_KEY'];
let endpoint = process.env['COMPUTER_VISION_ENDPOINT']
if (!key) { throw new Error('Set your environment variables for your subscription key and endpoint.'); }

ご利用のエンドポイントとキーを使用してクライアントをインスタンス化します。Instantiate a client with your endpoint and key. キーとエンドポイントを使用して ApiKeyCredentials オブジェクトを作成し、それを使用して ComputerVisionClient オブジェクトを作成します。Create a ApiKeyCredentials object with your key and endpoint, and use it to create a ComputerVisionClient object.

let computerVisionClient = new ComputerVisionClient(
    new ApiKeyCredentials({inHeader: {'Ocp-Apim-Subscription-Key': key}}), endpoint);

イメージを分析するAnalyze an image

このセクションのコードでは、リモートの画像を分析して、さまざまなビジュアル機能を抽出します。The code in this section analyzes remote images to extract various visual features. これらの操作は、クライアント オブジェクトの analyzeImage メソッドの一部として実行するか、個別のメソッドを使用して呼び出すことができます。You can do these operations as part of the analyzeImage method of the client object, or you can call them using individual methods. 詳細については、リファレンス ドキュメントを参照してください。See the reference documentation for details.

注意

ローカルの画像を分析することもできます。You can also analyze a local image. ローカルの画像に関連したシナリオについては、GitHub 上のサンプル コードを参照してください。See the sample code on GitHub for scenarios involving local images.

画像の説明の取得Get image description

次のコードは、画像に対して生成されたキャプションの一覧を取得します。The following code gets the list of generated captions for the image. 詳細については、画像の説明に関するページを参照してください。See Describe images for more details.

まず分析する画像の URL を定義します。First, define the URL of an image to analyze:

var describeURL = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample1.jpg';

次に画像の説明を取得してコンソールに出力する次のコードを追加します。Then add the following code to get the image description and print it to the console.

// Analyze URL image
console.log('Analyzing URL image to describe...', describeURL.split('/').pop());
var caption = (await computerVisionClient.describeImage(describeURL)).captions[0];
console.log(`This may be ${caption.text} (${caption.confidence.toFixed(2)} confidence)`);

画像カテゴリの取得Get image category

次のコードは、画像の検出されたカテゴリを取得します。The following code gets the detected category of the image. 詳細については、画像の分類に関するページを参照してください。See Categorize images for more details.

const categoryURLImage = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png';

// Analyze URL image
console.log('Analyzing category in image...', categoryURLImage.split('/').pop());
let categories = (await computerVisionClient.analyzeImage(categoryURLImage)).categories;
console.log(`Categories: ${formatCategories(categories)}`);

ヘルパー関数 formatCategories を定義します。Define the helper function formatCategories:

// Formats the image categories
function formatCategories(categories) {
  categories.sort((a, b) => b.score - a.score);
  return categories.map(cat => `${cat.name} (${cat.score.toFixed(2)})`).join(', ');
}

画像タグの取得Get image tags

次のコードは、画像内の検出されたタグのセットを取得します。The following code gets the set of detected tags in the image. 詳細については、コンテンツ タグに関するページを参照してください。See Content tags for more details.

console.log('-------------------------------------------------');
console.log('DETECT TAGS');
console.log();

// Image of different kind of dog.
const tagsURL = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png';

// Analyze URL image
console.log('Analyzing tags in image...', tagsURL.split('/').pop());
let tags = (await computerVisionClient.analyzeImage(tagsURL, {visualFeatures: ['Tags']})).tags;
console.log(`Tags: ${formatTags(tags)}`);

ヘルパー関数 formatTags を定義します。Define the helper function formatTags:

// Format tags for display
function formatTags(tags) {
  return tags.map(tag => (`${tag.name} (${tag.confidence.toFixed(2)})`)).join(', ');
}

物体を検出するDetect objects

次のコードは、画像から身の回りの物を検出してコンソールに出力します。The following code detects common objects in the image and prints them to the console. 詳細については、物体の検出に関するページを参照してください。See Object detection for more details.

// Image of a dog
const objectURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-node-sdk-samples/master/Data/image.jpg';

// Analyze a URL image
console.log('Analyzing objects in image...', objectURL.split('/').pop());
let objects = (await computerVisionClient.analyzeImage(objectURL, {visualFeatures: ['Objects']})).objects;
console.log();

// Print objects bounding box and confidence
if (objects.length) {
    console.log(`${objects.length} object${objects.length == 1 ? '' : 's'} found:`);
    for (let obj of objects) { console.log(`    ${obj.object} (${obj.confidence.toFixed(2)}) at ${formatRectObjects(obj.rectangle)}`); }
} else { console.log('No objects found.'); }

ヘルパー関数 formatRectObjects を定義します。Define the helper function formatRectObjects:

// Formats the bounding box
function formatRectObjects(rect) {
  return `top=${rect.y}`.padEnd(10) + `left=${rect.x}`.padEnd(10) + `bottom=${rect.y + rect.h}`.padEnd(12) 
  + `right=${rect.x + rect.w}`.padEnd(10) + `(${rect.w}x${rect.h})`;
}

ブランドを検出するDetect brands

次のコードは、企業のブランドとロゴを画像から検出してコンソールに出力します。The following code detects corporate brands and logos in the image and prints them to the console. 詳細については、ブランドの検出に関するページを参照してください。See Brand detection for more details.

const brandURLImage = 'https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/images/red-shirt-logo.jpg';

// Analyze URL image
console.log('Analyzing brands in image...', brandURLImage.split('/').pop());
let brands = (await computerVisionClient.analyzeImage(brandURLImage, {visualFeatures: ['Brands']})).brands;

// Print the brands found
if (brands.length) {
    console.log(`${brands.length} brand${brands.length != 1 ? 's' : ''} found:`);
    for (let brand of brands) {
        console.log(`    ${brand.name} (${brand.confidence.toFixed(2)} confidence)`);
    }
} else { console.log(`No brands found.`); }

顔を検出するDetect faces

次のコードは、画像内で検出された顔を、その四角形の座標と顔選択属性と共に返します。The following code returns the detected faces in the image with their rectangle coordinates and select face attributes. 詳細については、顔の検出に関するページを参照してください。See Face detection for more details.

const facesImageURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/faces.jpg';

// Analyze URL image.
console.log('Analyzing faces in image...', facesImageURL.split('/').pop());
// Get the visual feature for 'Faces' only.
let faces = (await computerVisionClient.analyzeImage(facesImageURL, {visualFeatures: ['Faces']})).faces;

// Print the bounding box, gender, and age from the faces.
if (faces.length) {
  console.log(`${faces.length} face${faces.length == 1 ? '' : 's'} found:`);
  for (let face of faces) { console.log(`    Gender: ${face.gender}`.padEnd(20) 
    + ` Age: ${face.age}`.padEnd(10) + `at ${formatRectFaces(face.faceRectangle)}`); }
} else { console.log('No faces found.'); }

ヘルパー関数 formatRectFaces を定義します。Define the helper function formatRectFaces:

// Formats the bounding box
function formatRectFaces(rect) {
  return `top=${rect.top}`.padEnd(10) + `left=${rect.left}`.padEnd(10) + `bottom=${rect.top + rect.height}`.padEnd(12) 
    + `right=${rect.left + rect.width}`.padEnd(10) + `(${rect.width}x${rect.height})`;
}

成人向け、わいせつ、または不快なコンテンツを検出するDetect adult, racy, or gory content

次のコードは、画像内で検出された成人向けのコンテンツの存在を出力します。The following code prints the detected presence of adult content in the image. 詳細については、「成人向けコンテンツ、わいせつなコンテンツ、不快なコンテンツ」を参照してください。See Adult, racy, gory content for more details.

使用する画像の URL を定義します。Define the URL of the image to use:

// The URL image and local images are not racy/adult. 
// Try your own racy/adult images for a more effective result.
const adultURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/celebrities.jpg';

次に、アダルト コンテンツを検出し、結果をコンソールに出力する次のコードを追加します。Then add the following code to detect adult content and print the results to the console.

// Function to confirm racy or not
const isIt = flag => flag ? 'is' : "isn't";

// Analyze URL image
console.log('Analyzing image for racy/adult content...', adultURLImage.split('/').pop());
var adult = (await computerVisionClient.analyzeImage(adultURLImage, {
  visualFeatures: ['Adult']
})).adult;
console.log(`This probably ${isIt(adult.isAdultContent)} adult content (${adult.adultScore.toFixed(4)} score)`);
console.log(`This probably ${isIt(adult.isRacyContent)} racy content (${adult.racyScore.toFixed(4)} score)`);

画像の配色の取得Get image color scheme

次のコードは、ドミナント カラー、アクセント カラーなど、画像内で検出された色の属性を出力します。The following code prints the detected color attributes in the image, like the dominant colors and accent color. 詳細については、配色に関するページを参照してください。See Color schemes for more details.

const colorURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/celebrities.jpg';

// Analyze URL image
console.log('Analyzing image for color scheme...', colorURLImage.split('/').pop());
console.log();
let color = (await computerVisionClient.analyzeImage(colorURLImage, {visualFeatures: ['Color']})).color;
printColorScheme(color);

コンソールに配色の詳細を出力するヘルパー関数 printColorScheme を定義します。Define the helper function printColorScheme to print the details of the color scheme to the console.

// Print a detected color scheme
function printColorScheme(colors){
  console.log(`Image is in ${colors.isBwImg ? 'black and white' : 'color'}`);
  console.log(`Dominant colors: ${colors.dominantColors.join(', ')}`);
  console.log(`Dominant foreground color: ${colors.dominantColorForeground}`);
  console.log(`Dominant background color: ${colors.dominantColorBackground}`);
  console.log(`Suggested accent color: #${colors.accentColor}`);
}

ドメイン固有のコンテンツの取得Get domain-specific content

Computer Vision では、特殊なモデルを使用して、画像をさらに分析できます。Computer Vision can use specialized model to do further analysis on images. 詳細については、ドメイン固有のコンテンツに関するページを参照してください。See Domain-specific content for more details.

まず分析する画像の URL を定義します。First, define the URL of an image to analyze:

const domainURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/landmark.jpg';

次のコードは、画像内の検出されたランドマークに関するデータを解析します。The following code parses data about detected landmarks in the image.

// Analyze URL image
console.log('Analyzing image for landmarks...', domainURLImage.split('/').pop());
let domain = (await computerVisionClient.analyzeImageByDomain('landmarks', domainURLImage)).result.landmarks;

// Prints domain-specific, recognized objects
if (domain.length) {
  console.log(`${domain.length} ${domain.length == 1 ? 'landmark' : 'landmarks'} found:`);
  for (let obj of domain) {
    console.log(`    ${obj.name}`.padEnd(20) + `(${obj.confidence.toFixed(2)} confidence)`.padEnd(20) + `${formatRectDomain(obj.faceRectangle)}`);
  }
} else {
  console.log('No landmarks found.');
}

検出されたランドマークに関する位置データを解析するヘルパー関数 formatRectDomain を定義します。Define the helper function formatRectDomain to parse the location data about detected landmarks.

// Formats bounding box
function formatRectDomain(rect) {
  if (!rect) return '';
  return `top=${rect.top}`.padEnd(10) + `left=${rect.left}`.padEnd(10) + `bottom=${rect.top + rect.height}`.padEnd(12) +
    `right=${rect.left + rect.width}`.padEnd(10) + `(${rect.width}x${rect.height})`;
}

画像の種類を取得するGet the image type

次のコードは、画像の種類 (クリップ アートであるか線画であるか) に関する情報を出力します。The following code prints information about the type of image—whether it is clip art or line drawing.

const typeURLImage = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-python-sdk-samples/master/samples/vision/images/make_things_happen.jpg';

 // Analyze URL image
console.log('Analyzing type in image...', typeURLImage.split('/').pop());
let types = (await computerVisionClient.analyzeImage(typeURLImage, {visualFeatures: ['ImageType']})).imageType;
console.log(`Image appears to be ${describeType(types)}`);

ヘルパー関数 describeType を定義します。Define the helper function describeType:

function describeType(imageType) {
  if (imageType.clipArtType && imageType.clipArtType > imageType.lineDrawingType) return 'clip art';
  if (imageType.lineDrawingType && imageType.clipArtType < imageType.lineDrawingType) return 'a line drawing';
  return 'a photograph';
}

印刷されたテキストと手書きのテキストを読み取るRead printed and handwritten text

Computer Vision は、画像に映っているテキストを読み取って、文字ストリームに変換することができます。Computer Vision can read visible text in an image and convert it to a character stream.

注意

また、ローカルの画像からテキストを読み取ることもできます。You can also read text from a local image. ローカルの画像に関連したシナリオについては、GitHub 上のサンプル コードを参照してください。See the sample code on GitHub for scenarios involving local images.

テスト画像を設定するSet up test images

テキストを抽出する画像の URL の参照を保存します。Save a reference of the URL of the images you want to extract text from.

// URL images containing printed and handwritten text
 const printedText     = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg';
 const handwrittenText = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/handwritten_text.jpg';

Recognize API を呼び出すCall the Recognize API

次のコードを追加します。これによって、指定された画像の recognizeText 関数が呼び出されます。Add the code below, which calls the recognizeText function for the given images.

// Recognize text in printed image
console.log('Recognizing printed text...', printedText.split('/').pop());
var printed = await recognizeText(computerVisionClient, 'Printed', printedText);
printRecText(printed);

// Recognize text in handwritten image
console.log('\nRecognizing handwritten text...', handwrittenText.split('/').pop());
var handwriting = await recognizeText(computerVisionClient, 'Handwritten', handwrittenText);
printRecText(handwriting);

recognizeText 関数を定義します。Define the recognizeText function. これにより、クライアント オブジェクトに対して recognizeText メソッドが呼び出され、操作 ID が返され、画像の内容を読み取る非同期プロセスが開始されます。This calls the recognizeText method on the client object, which returns an operation ID and starts an asynchronous process to read the content of the image. 次に、結果が返されるまで、操作 ID を使用して 1 秒間隔で操作が確認されます。Then it uses the operation ID to check the operation at one-second intervals until the results are returned. 次に、抽出された結果が返されます。It then returns the extracted results.

// Perform text recognition and await the result
async function recognizeText(client, mode, url) {
  // To recognize text in a local image, replace client.recognizeText() with recognizeTextInStream() as shown:
  // result = await client.recognizeTextInStream(mode, () => createReadStream(localImagePath));
  let result = await client.recognizeText(mode, url);
  // Operation ID is last path segment of operationLocation (a URL)
  let operation = result.operationLocation.split('/').slice(-1)[0];

  // Wait for text recognition to complete
  // result.status is initially undefined, since it's the result of recognizeText
  while (result.status !== 'Succeeded') { await sleep(1000); result = await client.getTextOperationResult(operation); }
  return result.recognitionResult;
}

次に、ヘルパー関数 printRecText を定義します。これにより、Recognize 操作の結果がコンソールに出力されます。Then, define the helper function printRecText, which prints the results of a Recognize operation to the console.

// Prints all text from OCR result
function printRecText(ocr) {
  if (ocr.lines.length) {
      console.log('Recognized text:');
      for (let line of ocr.lines) {
          console.log(line.words.map(w => w.text).join(' '));
      }
  }
  else { console.log('No recognized text.'); }
}

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

クイック スタート ファイルで node コマンドを使用して、アプリケーションを実行します。Run the application with the node command on your quickstart file.

node index.js

リソースをクリーンアップするClean up resources

Cognitive Services サブスクリプションをクリーンアップして削除したい場合は、リソースまたはリソース グループを削除することができます。If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。Deleting the resource group also deletes any other resources associated with it.

次のステップNext steps

リファレンス ドキュメント | ライブラリのソース コード | パッケージ (PiPy) | サンプルReference documentation | Library source code | Package (PiPy) | Samples

前提条件Prerequisites

設定Setting up

Computer Vision Azure リソースを作成するCreate a Computer Vision Azure resource

Azure Cognitive Services は、ユーザーがサブスクライブする Azure リソースによって表されます。Azure Cognitive Services are represented by Azure resources that you subscribe to. Azure portal またはローカル マシン上の Azure CLI を使用して、Computer Vision 用のリソースを作成します。Create a resource for Computer Vision using the Azure portal or Azure CLI on your local machine. 次のこともできます。You can also:

試用版のサブスクリプションまたはリソースからキーを取得した後、キーとエンドポイント URL の環境変数を作成し、それぞれ COMPUTER_VISION_SUBSCRIPTION_KEY および COMPUTER_VISION_ENDPOINT という名前を付けます。After you get a key from your trial subscription or resource, create environment variables for the key and endpoint URL, named COMPUTER_VISION_SUBSCRIPTION_KEY and COMPUTER_VISION_ENDPOINT, respectively.

新しい Python アプリケーションを作成するCreate a new Python application

新しい Python スクリプト (たとえば quickstart-file.py) を作成します。Create a new Python script—quickstart-file.py, for example. 次に、それを任意のエディターまたは IDE で開き、以下のライブラリをインポートします。Then open it in your preferred editor or IDE and import the following libraries.

from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from azure.cognitiveservices.vision.computervision.models import TextOperationStatusCodes
from azure.cognitiveservices.vision.computervision.models import TextRecognitionMode
from azure.cognitiveservices.vision.computervision.models import VisualFeatureTypes
from msrest.authentication import CognitiveServicesCredentials

from array import array
import os
from PIL import Image
import sys
import time

次に、リソースの Azure エンドポイントおよびキー用の変数を作成します。Then, create variables for your resource's Azure endpoint and key.

# Add your Computer Vision subscription key to your environment variables.
if 'COMPUTER_VISION_SUBSCRIPTION_KEY' in os.environ:
    subscription_key = os.environ['COMPUTER_VISION_SUBSCRIPTION_KEY']
else:
    print("\nSet the COMPUTER_VISION_SUBSCRIPTION_KEY environment variable.\n**Restart your shell or IDE for changes to take effect.**")
    sys.exit()
# Add your Computer Vision endpoint to your environment variables.
if 'COMPUTER_VISION_ENDPOINT' in os.environ:
    endpoint = os.environ['COMPUTER_VISION_ENDPOINT']
else:
    print("\nSet the COMPUTER_VISION_ENDPOINT environment variable.\n**Restart your shell or IDE for changes to take effect.**")
    sys.exit()

注意

アプリケーションの起動後に環境変数を作成した場合、その変数にアクセスするには、アプリケーションを実行しているエディター、IDE、またはシェルを閉じて、もう一度開く必要があります。If you created the environment variable after you launched the application, you will need to close and reopen the editor, IDE, or shell running it to access the variable.

クライアント ライブラリをインストールするInstall the client library

次のようにして、クライアント ライブラリをインストールできます。You can install the client library with:

pip install --upgrade azure-cognitiveservices-vision-computervision

オブジェクト モデルObject model

以下のクラスとインターフェイスにより、Computer Vision Python SDK の主要な機能の一部が処理されます。The following classes and interfaces handle some of the major features of the Computer Vision Python SDK.

名前Name 説明Description
ComputerVisionClientOperationsMixinComputerVisionClientOperationsMixin このクラスは、画像分析、テキスト検出、サムネイル生成など、すべての画像操作を直接処理します。This class directly handles all of the image operations, such as image analysis, text detection, and thumbnail generation.
ComputerVisionClientComputerVisionClient このクラスは、すべての Computer Vision の機能に必要です。This class is needed for all Computer Vision functionality. サブスクリプション情報を使用してこれをインスタンス化し、他のクラスのインスタンスを生成するために使用します。You instantiate it with your subscription information, and you use it to produce instances of other classes. ComputerVisionClientOperationsMixin が実装されています。It implements ComputerVisionClientOperationsMixin.
VisualFeatureTypesVisualFeatureTypes この列挙型は、標準の分析操作で実行できるさまざまな種類の画像分析を定義します。This enum defines the different types of image analysis that can be done in a standard Analyze operation. 必要に応じて、VisualFeatureTypes の値のセットを指定します。You specify a set of VisualFeatureTypes values depending on your needs.

コード例Code examples

これらのコード スニペットでは、Python 用 Computer Vision クライアント ライブラリを使用して以下のタスクを実行する方法を示します。These code snippets show you how to do the following tasks with the Computer Vision client library for Python:

クライアントを認証するAuthenticate the client

注意

このクイックスタートでは、Computer Vision キーのために COMPUTER_VISION_SUBSCRIPTION_KEY という名前の環境変数が作成されていることを前提としています。This quickstart assumes you've created an environment variable for your Computer Vision key, named COMPUTER_VISION_SUBSCRIPTION_KEY.

ご利用のエンドポイントとキーを使用してクライアントをインスタンス化します。Instantiate a client with your endpoint and key. キーを使用して CognitiveServicesCredentials オブジェクトを作成し、それをエンドポイントと共に使用して、ComputerVisionClient オブジェクトを作成します。Create a CognitiveServicesCredentials object with your key, and use it with your endpoint to create a ComputerVisionClient object.

computervision_client = ComputerVisionClient(endpoint, CognitiveServicesCredentials(subscription_key))

イメージを分析するAnalyze an image

分析する画像の URL への参照を保存します。Save a reference to the URL of an image you want to analyze.

remote_image_url = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/landmark.jpg"

画像の説明の取得Get image description

次のコードは、画像に対して生成されたキャプションの一覧を取得します。The following code gets the list of generated captions for the image. 詳細については、画像の説明に関するページを参照してください。See Describe images for more details.

'''
Describe an Image - remote
This example describes the contents of an image with the confidence score.
'''
print("===== Describe an image - remote =====")
# Call API
description_results = computervision_client.describe_image(remote_image_url )

# Get the captions (descriptions) from the response, with confidence level
print("Description of remote image: ")
if (len(description_results.captions) == 0):
    print("No description detected.")
else:
    for caption in description_results.captions:
        print("'{}' with confidence {:.2f}%".format(caption.text, caption.confidence * 100))

画像カテゴリの取得Get image category

次のコードは、画像の検出されたカテゴリを取得します。The following code gets the detected category of the image. 詳細については、画像の分類に関するページを参照してください。See Categorize images for more details.

'''
Categorize an Image - remote
This example extracts (general) categories from a remote image with a confidence score.
'''
print("===== Categorize an image - remote =====")
# Select the visual feature(s) you want.
remote_image_features = ["categories"]
# Call API with URL and features
categorize_results_remote = computervision_client.analyze_image(remote_image_url , remote_image_features)

# Print results with confidence score
print("Categories from remote image: ")
if (len(categorize_results_remote.categories) == 0):
    print("No categories detected.")
else:
    for category in categorize_results_remote.categories:
        print("'{}' with confidence {:.2f}%".format(category.name, category.score * 100))

画像タグの取得Get image tags

次のコードは、画像内の検出されたタグのセットを取得します。The following code gets the set of detected tags in the image. 詳細については、コンテンツ タグに関するページを参照してください。See Content tags for more details.

'''
Tag an Image - remote
This example returns a tag (key word) for each thing in the image.
'''
print("===== Tag an image - remote =====")
# Call API with remote image
tags_result_remote = computervision_client.tag_image(remote_image_url )

# Print results with confidence score
print("Tags in the remote image: ")
if (len(tags_result_remote.tags) == 0):
    print("No tags detected.")
else:
    for tag in tags_result_remote.tags:
        print("'{}' with confidence {:.2f}%".format(tag.name, tag.confidence * 100))

物体を検出するDetect objects

次のコードは、画像から身の回りの物を検出してコンソールに出力します。The following code detects common objects in the image and prints them to the console. 詳細については、物体の検出に関するページを参照してください。See Object detection for more details.

'''
Detect Objects - remote
This example detects different kinds of objects with bounding boxes in a remote image.
'''
print("===== Detect Objects - remote =====")
# Get URL image with different objects
remote_image_url_objects = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/objects.jpg"
# Call API with URL
detect_objects_results_remote = computervision_client.detect_objects(remote_image_url_objects)

# Print detected objects results with bounding boxes
print("Detecting objects in remote image:")
if len(detect_objects_results_remote.objects) == 0:
    print("No objects detected.")
else:
    for object in detect_objects_results_remote.objects:
        print("object at location {}, {}, {}, {}".format( \
        object.rectangle.x, object.rectangle.x + object.rectangle.w, \
        object.rectangle.y, object.rectangle.y + object.rectangle.h))

ブランドを検出するDetect brands

次のコードは、企業のブランドとロゴを画像から検出してコンソールに出力します。The following code detects corporate brands and logos in the image and prints them to the console. 詳細については、ブランドの検出に関するページを参照してください。See Brand detection for more details.

'''
Detect Brands - remote
This example detects common brands like logos and puts a bounding box around them.
'''
print("===== Detect Brands - remote =====")
# Get a URL with a brand logo
remote_image_url = "https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/images/gray-shirt-logo.jpg"
# Select the visual feature(s) you want
remote_image_features = ["brands"]
# Call API with URL and features
detect_brands_results_remote = computervision_client.analyze_image(remote_image_url, remote_image_features)

print("Detecting brands in remote image: ")
if len(detect_brands_results_remote.brands) == 0:
    print("No brands detected.")
else:
    for brand in detect_brands_results_remote.brands:
        print("'{}' brand detected with confidence {:.1f}% at location {}, {}, {}, {}".format( \
        brand.name, brand.confidence * 100, brand.rectangle.x, brand.rectangle.x + brand.rectangle.w, \
        brand.rectangle.y, brand.rectangle.y + brand.rectangle.h))

顔を検出するDetect faces

次のコードは、画像内で検出された顔を、その四角形の座標と顔選択属性と共に返します。The following code returns the detected faces in the image with their rectangle coordinates and select face attributes. 詳細については、顔の検出に関するページを参照してください。See Face detection for more details.

'''
Detect Faces - remote
This example detects faces in a remote image, gets their gender and age, 
and marks them with a bounding box.
'''
print("===== Detect Faces - remote =====")
# Get an image with faces
remote_image_url_faces = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/faces.jpg"
# Select the visual feature(s) you want.
remote_image_features = ["faces"]
# Call the API with remote URL and features
detect_faces_results_remote = computervision_client.analyze_image(remote_image_url_faces, remote_image_features)

# Print the results with gender, age, and bounding box
print("Faces in the remote image: ")
if (len(detect_faces_results_remote.faces) == 0):
    print("No faces detected.")
else:
    for face in detect_faces_results_remote.faces:
        print("'{}' of age {} at location {}, {}, {}, {}".format(face.gender, face.age, \
        face.face_rectangle.left, face.face_rectangle.top, \
        face.face_rectangle.left + face.face_rectangle.width, \
        face.face_rectangle.top + face.face_rectangle.height))

成人向け、わいせつ、または不快なコンテンツを検出するDetect adult, racy, or gory content

次のコードは、画像内で検出された成人向けのコンテンツの存在を出力します。The following code prints the detected presence of adult content in the image. 詳細については、「成人向けコンテンツ、わいせつなコンテンツ、不快なコンテンツ」を参照してください。See Adult, racy, gory content for more details.

'''
Detect Adult or Racy Content - remote
This example detects adult or racy content in a remote image, then prints the adult/racy score.
The score is ranged 0.0 - 1.0 with smaller numbers indicating negative results.
'''
print("===== Detect Adult or Racy Content - remote =====")
# Select the visual feature(s) you want
remote_image_features = ["adult"]
# Call API with URL and features
detect_adult_results_remote = computervision_client.analyze_image(remote_image_url, remote_image_features)

# Print results with adult/racy score
print("Analyzing remote image for adult or racy content ... ")
print("Is adult content: {} with confidence {:.2f}".format(detect_adult_results_remote.adult.is_adult_content, detect_adult_results_remote.adult.adult_score * 100))
print("Has racy content: {} with confidence {:.2f}".format(detect_adult_results_remote.adult.is_racy_content, detect_adult_results_remote.adult.racy_score * 100))

画像の配色の取得Get image color scheme

次のコードは、ドミナント カラー、アクセント カラーなど、画像内で検出された色の属性を出力します。The following code prints the detected color attributes in the image, like the dominant colors and accent color. 詳細については、配色に関するページを参照してください。See Color schemes for more details.

'''
Detect Color - remote
This example detects the different aspects of its color scheme in a remote image.
'''
print("===== Detect Color - remote =====")
# Select the feature(s) you want
remote_image_features = ["color"]
# Call API with URL and features
detect_color_results_remote = computervision_client.analyze_image(remote_image_url, remote_image_features)

# Print results of color scheme
print("Getting color scheme of the remote image: ")
print("Is black and white: {}".format(detect_color_results_remote.color.is_bw_img))
print("Accent color: {}".format(detect_color_results_remote.color.accent_color))
print("Dominant background color: {}".format(detect_color_results_remote.color.dominant_color_background))
print("Dominant foreground color: {}".format(detect_color_results_remote.color.dominant_color_foreground))
print("Dominant colors: {}".format(detect_color_results_remote.color.dominant_colors))

ドメイン固有のコンテンツの取得Get domain-specific content

Computer Vision では、特殊なモデルを使用して、画像をさらに分析できます。Computer Vision can use specialized model to do further analysis on images. 詳細については、ドメイン固有のコンテンツに関するページを参照してください。See Domain-specific content for more details.

次のコードは、画像内の検出された有名人に関するデータを解析します。The following code parses data about detected celebrities in the image.

'''
Detect Domain-specific Content - remote
This example detects celebrites and landmarks in remote images.
'''
print("===== Detect Domain-specific Content - remote =====")
# URL of one or more celebrities
remote_image_url_celebs = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/faces.jpg"
# Call API with content type (celebrities) and URL
detect_domain_results_celebs_remote = computervision_client.analyze_image_by_domain("celebrities", remote_image_url_celebs)

# Print detection results with name
print("Celebrities in the remote image:")
if len(detect_domain_results_celebs_remote.result["celebrities"]) == 0:
    print("No celebrities detected.")
else:
    for celeb in detect_domain_results_celebs_remote.result["celebrities"]:
        print(celeb["name"])

次のコードは、画像内の検出されたランドマークに関するデータを解析します。The following code parses data about detected landmarks in the image.

# Call API with content type (landmarks) and URL
detect_domain_results_landmarks = computervision_client.analyze_image_by_domain("landmarks", remote_image_url)
print()

print("Landmarks in the remote image:")
if len(detect_domain_results_landmarks.result["landmarks"]) == 0:
    print("No landmarks detected.")
else:
    for landmark in detect_domain_results_landmarks.result["landmarks"]:
        print(landmark["name"])

画像の種類を取得するGet the image type

次のコードは、画像の種類 (クリップ アートであるか線画であるか) に関する情報を出力します。The following code prints information about the type of image—whether it is clip art or line drawing.

'''
Detect Image Types - remote
This example detects an image's type (clip art/line drawing).
'''
print("===== Detect Image Types - remote =====")
# Get URL of an image with a type
remote_image_url_type = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/type-image.jpg"
# Select visual feature(s) you want
remote_image_features = VisualFeatureTypes.image_type
# Call API with URL and features
detect_type_results_remote = computervision_client.analyze_image(remote_image_url_type, remote_image_features)

# Prints type results with degree of accuracy
print("Type of remote image:")
if detect_type_results_remote.image_type.clip_art_type == 0:
    print("Image is not clip art.")
elif detect_type_results_remote.image_type.line_drawing_type == 1:
    print("Image is ambiguously clip art.")
elif detect_type_results_remote.image_type.line_drawing_type == 2:
    print("Image is normal clip art.")
else:
    print("Image is good clip art.")

if detect_type_results_remote.image_type.line_drawing_type == 0:
    print("Image is not a line drawing.")
else:
    print("Image is a line drawing")

印刷されたテキストと手書きのテキストを読み取るRead printed and handwritten text

Computer Vision は、画像に映っているテキストを読み取って、文字ストリームに変換することができます。Computer Vision can read visible text in an image and convert it to a character stream. これは、次の 2 つの処理から成ります。You do this in two parts.

Read API を呼び出すCall the Read API

まず、次のコードを使用して、指定した画像の read メソッドを呼び出します。First, use the following code to call the read method for the given image. これによって操作 ID が返され、画像の内容を読み取る非同期プロセスが開始されます。This returns an operation ID and starts an asynchronous process to read the content of the image.

'''
Batch Read File, recognize printed text - remote
This example will extract printed text in an image, then print results, line by line.
This API call can also recognize handwriting (not shown).
'''
print("===== Batch Read File - remote =====")
# Get an image with printed text
remote_image_printed_text_url = "https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/printed_text.jpg"

# Call API with URL and raw response (allows you to get the operation location)
recognize_printed_results = computervision_client.read(remote_image_printed_text_url, language='en',  raw=True)

読み取りの結果を取得するGet Read results

次に、read の呼び出しから返された操作 ID を取得し、操作の結果をサービスに照会します。Next, get the operation ID returned from the read call, and use it to query the service for operation results. 次のコードは、結果が返されるまで 1 秒間隔で操作をチェックします。The following code checks the operation at one-second intervals until the results are returned. 次に、抽出されたテキスト データをコンソールに出力します。It then prints the extracted text data to the console.

# Get the operation location (URL with an ID at the end) from the response
operation_location_remote = recognize_printed_results.headers["Operation-Location"]
# Grab the ID from the URL
operation_id = operation_location_remote.split("/")[-1]

# Call the "GET" API and wait for it to retrieve the results 
while True:
    get_printed_text_results = computervision_client.get_read_result(operation_id)
    if get_printed_text_results.status not in ['NotStarted', 'Running']:
        break
    time.sleep(1)

# Print the detected text, line by line
if get_printed_text_results.status == TextOperationStatusCodes.succeeded:
    for text_result in get_printed_text_results.recognition_results:
        for line in text_result.lines:
            print(line.text)
            print(line.bounding_box)
print()

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

クイック スタート ファイルで python コマンドを使用して、アプリケーションを実行します。Run the application with the python command on your quickstart file.

python quickstart-file.py

リソースをクリーンアップするClean up resources

Cognitive Services サブスクリプションをクリーンアップして削除したい場合は、リソースまたはリソース グループを削除することができます。If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。Deleting the resource group also deletes any other resources associated with it.

次のステップNext steps

このクイックスタートでは、Python 用 Computer Vision ライブラリを使用して基本的なタスクを行う方法について学習しました。In this quickstart, you learned how to use the Computer Vision library for Python to do basis tasks. 次は、リファレンス ドキュメントを参照して、ライブラリの詳細について学習してください。Next, explore the reference documentation to learn more about the library.

リファレンス ドキュメント | ライブラリのソース コード | パッケージReference documentation | Library source code | Package

前提条件Prerequisites

設定Setting up

Computer Vision Azure リソースを作成するCreate a Computer Vision Azure resource

Azure Cognitive Services は、ユーザーがサブスクライブする Azure リソースによって表されます。Azure Cognitive Services are represented by Azure resources that you subscribe to. Azure portal またはローカル マシン上の Azure CLI を使用して、Computer Vision 用のリソースを作成します。Create a resource for Computer Vision using the Azure portal or Azure CLI on your local machine. 次のこともできます。You can also:

試用版のサブスクリプションまたはリソースからキーを取得した後、キーとエンドポイント URL の環境変数を作成し、それぞれ COMPUTER_VISION_SUBSCRIPTION_KEY および COMPUTER_VISION_ENDPOINT という名前を付けます。After you get a key from your trial subscription or resource, create environment variables for the key and endpoint URL, named COMPUTER_VISION_SUBSCRIPTION_KEY and COMPUTER_VISION_ENDPOINT, respectively.

Go プロジェクト ディレクトリを作成するCreate a Go project directory

コンソール ウィンドウ (cmd、PowerShell、ターミナル、Bash) で、Go プロジェクト用に my-app という名前の新しいワークスペースを作成し、そこに移動します。In a console window (cmd, PowerShell, Terminal, Bash), create a new workspace for your Go project, named my-app, and navigate to it.

mkdir -p my-app/{src, bin, pkg}  
cd my-app

ワークスペースには次の 3 つのフォルダーが格納されます。Your workspace will contain three folders:

  • src - このディレクトリには、ソース コードとパッケージが格納されます。src - This directory will contain source code and packages. go get コマンドを使用してインストールされるパッケージはすべてこのディレクトリに入ります。Any packages installed with the go get command will go in this directory.
  • pkg - このディレクトリには、コンパイル済みの Go パッケージ オブジェクトが格納されます。pkg - This directory will contain the compiled Go package objects. これらのファイルにはいずれも .a という拡張子が付きます。These files all have an .a extension.
  • bin - このディレクトリには、go install を実行するときに作成されたバイナリ実行可能ファイルが格納されます。bin - This directory will contain the binary executable files that are created when you run go install.

ヒント

Go ワークスペースの構造の詳細については、Go 言語のドキュメントを参照してください。To learn more about the structure of a Go workspace, see the Go language documentation. このガイドには、$GOPATH$GOROOT の設定に関する情報が記載されています。This guide includes information for setting $GOPATH and $GOROOT.

Go 用クライアント ライブラリをインストールするInstall the client library for Go

次に、Go 用クライアント ライブラリをインストールします。Next, install the client library for Go:

go get -u https://github.com/Azure/azure-sdk-for-go/tree/master/services/cognitiveservices/v2.1/computervision

または、dep を使用している場合は、リポジトリ内で次を実行します。or if you use dep, within your repo run:

dep ensure -add https://github.com/Azure/azure-sdk-for-go/tree/master/services/cognitiveservices/v2.1/computervision

Go アプリケーションを作成するCreate a Go application

次に、src ディレクトリに sample-app.go という名前のファイルを作成します。Next, create a file in the src directory named sample-app.go:

cd src
touch sample-app.go

普段使用している IDE またはテキスト エディターで sample-app.go を開きます。Open sample-app.go in your preferred IDE or text editor. 次に、パッケージの名前を追加し、次のライブラリをインポートします。Then add the package name and import the following libraries:

package main

import (
    "context"
    "encoding/json"
    "fmt"
    "github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v2.0/computervision"
    "github.com/Azure/go-autorest/autorest"
    "io"
    "log"
    "os"
    "strings"
    "time"
)

また、スクリプトのルートでコンテキストを宣言します。Also, declare a context at the root of your script. このオブジェクトは、ほとんどの Computer Vision 関数呼び出しを実行するために必要です。You'll need this object to execute most Computer Vision function calls:

// Declare global so don't have to pass it to all of the tasks.
var computerVisionContext context.Context

次に、さまざまな Computer Vision 操作を実行するコードの追加を開始します。Next, you'll begin adding code to carry out different Computer Vision operations.

オブジェクト モデルObject model

以下のクラスとインターフェイスにより、Computer Vision Go SDK の主要な機能の一部が処理されます。The following classes and interfaces handle some of the major features of the Computer Vision Go SDK.

名前Name 説明Description
BaseClientBaseClient このクラスは、イメージの分析やテキストの読み取りなど、すべての Computer Vision 機能に必要です。This class is needed for all Computer Vision functionality, such as image analysis and text reading. サブスクリプション情報を使用してインスタンス化し、そのインスタンスを使用して、画像に対するほとんどの操作を実行することができます。You instantiate it with your subscription information, and you use it to do most image operations.
ImageAnalysisImageAnalysis この型には Analyze Eimage 関数呼び出しの結果が含まれます。This type contains the results of an AnalyzeImage function call. カテゴリ固有の各関数には同様の型があります。There are similar types for each of the category-specific functions.
ReadOperationResultReadOperationResult この型には、バッチ読み取り操作の結果が含まれます。This type contains the results of a Batch Read operation.
VisualFeatureTypesVisualFeatureTypes この型は、標準の分析操作で実行できるさまざまな種類の画像分析を定義します。This type defines the different kinds of image analysis that can be done in a standard Analyze operation. 必要に応じて、VisualFeatureTypes の値のセットを指定します。You specify a set of VisualFeatureTypes values depending on your needs.

コード例Code examples

これらのコード スニペットでは、Go 用 Computer Vision クライアント ライブラリを使用して以下のタスクを実行する方法を示します。These code snippets show you how to do the following tasks with the Computer Vision client library for Go:

クライアントを認証するAuthenticate the client

注意

このステップでは、COMPUTER_VISION_SUBSCRIPTION_KEY および COMPUTER_VISION_ENDPOINT という名前の、Computer Vision キーとエンドポイントのそれぞれの 環境変数を作成 してあることを前提としています。This step assumes you've created environment variables for your Computer Vision key and endpoint, named COMPUTER_VISION_SUBSCRIPTION_KEY and COMPUTER_VISION_ENDPOINT respectively.

main 関数を作成し、その関数に次のコードを追加して、エンドポイントとキーでクライアントをインスタンス化します。Create a main function and add the following code to it to instantiate a client with your endpoint and key.

/*  
 * Configure the Computer Vision client
 * Set environment variables for COMPUTER_VISION_SUBSCRIPTION_KEY and COMPUTER_VISION_ENDPOINT,
 * then restart your command shell or your IDE for changes to take effect.
 */
  computerVisionKey := os.Getenv("COMPUTER_VISION_SUBSCRIPTION_KEY")

if (computerVisionKey == "") {
    log.Fatal("\n\nPlease set a COMPUTER_VISION_SUBSCRIPTION_KEY environment variable.\n" +
                          "**You may need to restart your shell or IDE after it's set.**\n")
}

endpointURL := os.Getenv("COMPUTER_VISION_ENDPOINT")
if (endpointURL == "") {
    log.Fatal("\n\nPlease set a COMPUTER_VISION_ENDPOINT environment variable.\n" +
                          "**You may need to restart your shell or IDE after it's set.**")
}

computerVisionClient := computervision.New(endpointURL);
computerVisionClient.Authorizer = autorest.NewCognitiveServicesAuthorizer(computerVisionKey)

computerVisionContext = context.Background()
/*
 * END - Configure the Computer Vision client
 */

イメージを分析するAnalyze an image

次のコードでは、クライアント オブジェクトを使用して、リモート画像を分析し、コンソールに結果を出力します。The following code uses the client object to analyze a remote image and print the results to the console. テキストの説明、分類、タグの一覧、検出されたオブジェクト、検出されたブランド、検出された顔、成人向けコンテンツ フラグ、メインの色、および画像の種類が返されます。You can get a text description, categorization, list of tags, detected objects, detected brands, detected faces, adult content flags, main colors, and image type.

テスト画像の設定Set up test image

最初に、分析する画像の URL への参照を保存します。First save a reference to the URL of the image you want to analyze. これを main 関数内に配置します。Put this inside your main function.

landmarkImageURL := "https://github.com/Azure-Samples/cognitive-services-sample-data-files/raw/master/ComputerVision/Images/landmark.jpg"

注意

ローカルの画像を分析することもできます。You can also analyze a local image. ローカルの画像に関連したシナリオについては、GitHub 上のサンプル コードを参照してください。See the sample code on GitHub for scenarios involving local images.

視覚的特徴を指定するSpecify visual features

次の関数の呼び出しにより、さまざまなビジュアル機能がサンプル イメージから抽出されます。The following function calls extract different visual features from the sample image. これらの関数は、次のセクションで定義します。You'll define these functions in the following sections.

// Analyze features of an image, remote
DescribeRemoteImage(computerVisionClient, landmarkImageURL)
CategorizeRemoteImage(computerVisionClient, landmarkImageURL)
TagRemoteImage(computerVisionClient, landmarkImageURL)
DetectFacesRemoteImage(computerVisionClient, facesImageURL)
DetectObjectsRemoteImage(computerVisionClient, objectsImageURL)
DetectBrandsRemoteImage(computerVisionClient, brandsImageURL)
DetectAdultOrRacyContentRemoteImage(computerVisionClient, adultRacyImageURL)
DetectColorSchemeRemoteImage(computerVisionClient, brandsImageURL)
DetectDomainSpecificContentRemoteImage(computerVisionClient, landmarkImageURL)
DetectImageTypesRemoteImage(computerVisionClient, detectTypeImageURL)
GenerateThumbnailRemoteImage(computerVisionClient, adultRacyImageURL)

画像の説明の取得Get image description

次の関数は、画像に対して生成されたキャプションの一覧を取得します。The following function gets the list of generated captions for the image. イメージの説明の詳細については、「イメージの説明」を参照してください。For more information about image description, see Describe images.

func DescribeRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DESCRIBE IMAGE - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    maxNumberDescriptionCandidates := new(int32)
    *maxNumberDescriptionCandidates = 1

    remoteImageDescription, err := client.DescribeImage(
            computerVisionContext,
            remoteImage,
            maxNumberDescriptionCandidates,
            "") // language
        if err != nil { log.Fatal(err) }

    fmt.Println("Captions from remote image: ")
    if len(*remoteImageDescription.Captions) == 0 {
        fmt.Println("No captions detected.")
    } else {
        for _, caption := range *remoteImageDescription.Captions {
            fmt.Printf("'%v' with confidence %.2f%%\n", *caption.Text, *caption.Confidence * 100)
        }
    }
    fmt.Println()
}

画像カテゴリの取得Get image category

次の関数は、画像の検出されたカテゴリを取得します。The following function gets the detected category of the image. 詳細については、「イメージの分類」を参照してください。For more information, see Categorize images.

func CategorizeRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("CATEGORIZE IMAGE - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesCategories}
    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "")
    if err != nil { log.Fatal(err) }

    fmt.Println("Categories from remote image: ")
    if len(*imageAnalysis.Categories) == 0 {
        fmt.Println("No categories detected.")
    } else {
        for _, category := range *imageAnalysis.Categories {
            fmt.Printf("'%v' with confidence %.2f%%\n", *category.Name, *category.Score * 100)
        }
    }
    fmt.Println()
}

画像タグの取得Get image tags

次の関数は、画像内の検出されたタグのセットを取得します。The following function gets the set of detected tags in the image. 詳細については、「コンテンツ タグ」を参照してください。For more information, see Content tags.

func TagRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("TAG IMAGE - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    remoteImageTags, err := client.TagImage(
            computerVisionContext,
            remoteImage,
            "")
    if err != nil { log.Fatal(err) }

    fmt.Println("Tags in the remote image: ")
    if len(*remoteImageTags.Tags) == 0 {
        fmt.Println("No tags detected.")
    } else {
        for _, tag := range *remoteImageTags.Tags {
            fmt.Printf("'%v' with confidence %.2f%%\n", *tag.Name, *tag.Confidence * 100)
        }
    }
    fmt.Println()
}

物体を検出するDetect objects

次の関数は、画像から身の回りの物を検出してコンソールに出力します。The following function detects common objects in the image and prints them to the console. 詳細については、「物体検出」を参照してください。For more information, see Object detection.

func DetectObjectsRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT OBJECTS - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    imageAnalysis, err := client.DetectObjects(
            computerVisionContext,
            remoteImage,
    )
    if err != nil { log.Fatal(err) }

    fmt.Println("Detecting objects in remote image: ")
    if len(*imageAnalysis.Objects) == 0 {
        fmt.Println("No objects detected.")
    } else {
        // Print the objects found with confidence level and bounding box locations.
        for _, object := range *imageAnalysis.Objects {
            fmt.Printf("'%v' with confidence %.2f%% at location (%v, %v), (%v, %v)\n",
                *object.Object, *object.Confidence * 100,
                *object.Rectangle.X, *object.Rectangle.X + *object.Rectangle.W,
                *object.Rectangle.Y, *object.Rectangle.Y + *object.Rectangle.H)
        }
    }
    fmt.Println()
}

ブランドを検出するDetect brands

次のコードは、企業のブランドとロゴを画像から検出してコンソールに出力します。The following code detects corporate brands and logos in the image and prints them to the console. 詳細については、「ブランド検出」を参照してください。For more information, Brand detection.

最初に、main 関数内の新しいイメージへの参照を宣言します。First, declare a reference to a new image within your main function.

brandsImageURL := "https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/images/gray-shirt-logo.jpg"

次のコードでは、ブランド検出機能を定義しています。The following code defines the brand detection function.

func DetectBrandsRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT BRANDS - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // Define the kinds of features you want returned.
    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesBrands}

    imageAnalysis, err := client.AnalyzeImage(
        computerVisionContext,
        remoteImage,
        features,
        []computervision.Details{},
        "en")
    if err != nil { log.Fatal(err) }

    fmt.Println("Detecting brands in remote image: ")
    if len(*imageAnalysis.Brands) == 0 {
        fmt.Println("No brands detected.")
    } else {
        // Get bounding box around the brand and confidence level it's correctly identified.
        for _, brand := range *imageAnalysis.Brands {
            fmt.Printf("'%v' with confidence %.2f%% at location (%v, %v), (%v, %v)\n",
                *brand.Name, *brand.Confidence * 100,
                *brand.Rectangle.X, *brand.Rectangle.X + *brand.Rectangle.W,
                *brand.Rectangle.Y, *brand.Rectangle.Y + *brand.Rectangle.H)
        }
    }
    fmt.Println()
}

顔を検出するDetect faces

次の関数は、画像内で検出された顔を、その四角形の座標と特定の顔属性と共に返します。The following function returns the detected faces in the image with their rectangle coordinates and certain face attributes. 詳しくは、「顔検出」をご覧ください。For more information, see Face detection.

func DetectFacesRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT FACES - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // Define the features you want returned with the API call.
    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesFaces}
    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "")
        if err != nil { log.Fatal(err) }

    fmt.Println("Detecting faces in a remote image ...")
    if len(*imageAnalysis.Faces) == 0 {
        fmt.Println("No faces detected.")
    } else {
        // Print the bounding box locations of the found faces.
        for _, face := range *imageAnalysis.Faces {
            fmt.Printf("'%v' of age %v at location (%v, %v), (%v, %v)\n",
                face.Gender, *face.Age,
                *face.FaceRectangle.Left, *face.FaceRectangle.Top,
                *face.FaceRectangle.Left + *face.FaceRectangle.Width,
                *face.FaceRectangle.Top + *face.FaceRectangle.Height)
        }
    }
    fmt.Println()
}

成人向け、わいせつ、または不快なコンテンツを検出するDetect adult, racy, or gory content

次の関数は、画像内で検出された成人向けのコンテンツの存在を出力します。The following function prints the detected presence of adult content in the image. 詳細については、「成人向けコンテンツ、わいせつなコンテンツ、不快なコンテンツ」を参照してください。For more information, see Adult, racy, gory content.

func DetectAdultOrRacyContentRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT ADULT OR RACY CONTENT - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // Define the features you want returned from the API call.
    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesAdult}
    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "") // language, English is default
    if err != nil { log.Fatal(err) }

    // Print whether or not there is questionable content.
    // Confidence levels: low means content is OK, high means it's not.
    fmt.Println("Analyzing remote image for adult or racy content: ");
    fmt.Printf("Is adult content: %v with confidence %.2f%%\n", *imageAnalysis.Adult.IsAdultContent, *imageAnalysis.Adult.AdultScore * 100)
    fmt.Printf("Has racy content: %v with confidence %.2f%%\n", *imageAnalysis.Adult.IsRacyContent, *imageAnalysis.Adult.RacyScore * 100)
    fmt.Println()
}

画像の配色の取得Get image color scheme

次の関数は、ドミナント カラー、アクセント カラーなど、画像内で検出された色の属性を出力します。The following function prints the detected color attributes in the image, like the dominant colors and accent color. 詳細については、「配色」を参照してください。For more information, see Color schemes.

func DetectColorSchemeRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT COLOR SCHEME - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // Define the features you'd like returned with the result.
    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesColor}
    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "") // language, English is default
    if err != nil { log.Fatal(err) }

    fmt.Println("Color scheme of the remote image: ");
    fmt.Printf("Is black and white: %v\n", *imageAnalysis.Color.IsBWImg)
    fmt.Printf("Accent color: 0x%v\n", *imageAnalysis.Color.AccentColor)
    fmt.Printf("Dominant background color: %v\n", *imageAnalysis.Color.DominantColorBackground)
    fmt.Printf("Dominant foreground color: %v\n", *imageAnalysis.Color.DominantColorForeground)
    fmt.Printf("Dominant colors: %v\n", strings.Join(*imageAnalysis.Color.DominantColors, ", "))
    fmt.Println()
}

ドメイン固有のコンテンツの取得Get domain-specific content

Computer Vision では、特殊なモデルを使用して、画像をさらに分析できます。Computer Vision can use specialized models to do further analysis on images. 詳細については、ドメイン固有のコンテンツに関するページを参照してください。For more information, see Domain-specific content.

次のコードは、画像内の検出された有名人に関するデータを解析します。The following code parses data about detected celebrities in the image.

func DetectDomainSpecificContentRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT DOMAIN-SPECIFIC CONTENT - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    fmt.Println("Detecting domain-specific content in the local image ...")

    // Check if there are any celebrities in the image.
    celebrities, err := client.AnalyzeImageByDomain(
            computerVisionContext,
            "celebrities",
            remoteImage,
            "") // language, English is default
    if err != nil { log.Fatal(err) }

    fmt.Println("\nCelebrities: ")

    // Marshal the output from AnalyzeImageByDomain into JSON.
    data, err := json.MarshalIndent(celebrities.Result, "", "\t")

    // Define structs for which to unmarshal the JSON.
    type Celebrities struct {
        Name string `json:"name"`
    }

    type CelebrityResult struct {
        Celebrities	[]Celebrities `json:"celebrities"`
    }

    var celebrityResult CelebrityResult

    // Unmarshal the data.
    err = json.Unmarshal(data, &celebrityResult)
    if err != nil { log.Fatal(err) }

    //	Check if any celebrities detected.
    if len(celebrityResult.Celebrities) == 0 {
        fmt.Println("No celebrities detected.")
    }	else {
        for _, celebrity := range celebrityResult.Celebrities {
            fmt.Printf("name: %v\n", celebrity.Name)
        }
    }

次のコードは、画像内の検出されたランドマークに関するデータを解析します。The following code parses data about detected landmarks in the image.

    fmt.Println("\nLandmarks: ")

    // Check if there are any landmarks in the image.
    landmarks, err := client.AnalyzeImageByDomain(
            computerVisionContext,
            "landmarks",
            remoteImage,
            "")
    if err != nil { log.Fatal(err) }

    // Marshal the output from AnalyzeImageByDomain into JSON.
    data, err = json.MarshalIndent(landmarks.Result, "", "\t")

    // Define structs for which to unmarshal the JSON.
    type Landmarks struct {
        Name string `json:"name"`
    }

    type LandmarkResult struct {
        Landmarks	[]Landmarks `json:"landmarks"`
    }

    var landmarkResult LandmarkResult

    // Unmarshal the data.
    err = json.Unmarshal(data, &landmarkResult)
    if err != nil { log.Fatal(err) }

    // Check if any celebrities detected.
    if len(landmarkResult.Landmarks) == 0 {
        fmt.Println("No landmarks detected.")
    }	else {
        for _, landmark := range landmarkResult.Landmarks {
            fmt.Printf("name: %v\n", landmark.Name)
        }
    }
    fmt.Println()
}

画像の種類を取得するGet the image type

次の関数は、画像の種類 (クリップ アートであるか線画であるか) に関する情報を出力します。The following function prints information about the type of image—whether it's clip art or a line drawing.

func DetectImageTypesRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("DETECT IMAGE TYPES - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    features := []computervision.VisualFeatureTypes{computervision.VisualFeatureTypesImageType}

    imageAnalysis, err := client.AnalyzeImage(
            computerVisionContext,
            remoteImage,
            features,
            []computervision.Details{},
            "")
    if err != nil { log.Fatal(err) }

    fmt.Println("Image type of remote image:")

    fmt.Println("\nClip art type: ")
    switch *imageAnalysis.ImageType.ClipArtType {
    case 0:
        fmt.Println("Image is not clip art.")
    case 1:
        fmt.Println("Image is ambiguously clip art.")
    case 2:
        fmt.Println("Image is normal clip art.")
    case 3:
        fmt.Println("Image is good clip art.")
    }

    fmt.Println("\nLine drawing type: ")
    if *imageAnalysis.ImageType.LineDrawingType == 1 {
        fmt.Println("Image is a line drawing.")
    }	else {
        fmt.Println("Image is not a line drawing.")
    }
    fmt.Println()
}

印刷されたテキストと手書きのテキストを読み取るRead printed and handwritten text

Computer Vision は、画像に映っているテキストを読み取って、文字ストリームに変換することができます。Computer Vision can read visible text in an image and convert it to a character stream. このセクションのコードでは RecognizeTextReadAPIRemoteImage 関数を定義しています。クライアント オブジェクトを使用して、印刷されたテキストや手書きのテキストを画像から検出して抽出するものです。The code in this section defines a function, RecognizeTextReadAPIRemoteImage, which uses the client object to detect and extract printed or handwritten text in the image.

main 関数にサンプル イメージ参照と関数呼び出しを追加します。Add the sample image reference and function call in your main function.

// Analyze text in an image, remote
BatchReadFileRemoteImage(computerVisionClient, printedImageURL)

注意

ローカルの画像からテキストを抽出することもできます。You can also extract text from a local image. ローカルの画像に関連したシナリオについては、GitHub 上のサンプル コードを参照してください。See the sample code on GitHub for scenarios involving local images.

Read API を呼び出すCall the Read API

テキストを読み取るための新しい関数 RecognizeTextReadAPIRemoteImage を定義します。Define the new function for reading text, RecognizeTextReadAPIRemoteImage. 以下のコードは、指定された画像に対して BatchReadFile メソッドを呼び出すものです。このコードを追加します。Add the code below, which calls the BatchReadFile method for the given image. このメソッドによって操作 ID が返され、画像の内容を読み取る非同期プロセスが開始されます。This method returns an operation ID and starts an asynchronous process to read the content of the image.

func BatchReadFileRemoteImage(client computervision.BaseClient, remoteImageURL string) {
    fmt.Println("-----------------------------------------")
    fmt.Println("BATCH READ FILE - remote")
    fmt.Println()
    var remoteImage computervision.ImageURL
    remoteImage.URL = &remoteImageURL

    // The response contains a field called "Operation-Location", 
    // which is a URL with an ID that you'll use for GetReadOperationResult to access OCR results.
    textHeaders, err := client.BatchReadFile(computerVisionContext, remoteImage)
    if err != nil { log.Fatal(err) }

    // Use ExtractHeader from the autorest library to get the Operation-Location URL
    operationLocation := autorest.ExtractHeaderValue("Operation-Location", textHeaders.Response)

    numberOfCharsInOperationId := 36
    operationId := string(operationLocation[len(operationLocation)-numberOfCharsInOperationId : len(operationLocation)])

読み取りの結果を取得するGet Read results

次に、BatchReadFile の呼び出しから返された操作 ID を取得し、 GetReadOperationResult と共に使用して操作の結果をサービスに照会します。Next, get the operation ID returned from the BatchReadFile call, and use it with the GetReadOperationResult method to query the service for operation results. 次のコードは、結果が返されるまで 1 秒間隔で操作をチェックします。The following code checks the operation at one-second intervals until the results are returned. 次に、抽出されたテキスト データをコンソールに出力します。It then prints the extracted text data to the console.

readOperationResult, err := client.GetReadOperationResult(computerVisionContext, operationId)
if err != nil { log.Fatal(err) }

// Wait for the operation to complete.
i := 0
maxRetries := 10

fmt.Println("Recognizing text in a remote image with the batch Read API ...")
for readOperationResult.Status != computervision.Failed &&
        readOperationResult.Status != computervision.Succeeded {
    if i >= maxRetries {
        break
    }
    i++

    fmt.Printf("Server status: %v, waiting %v seconds...\n", readOperationResult.Status, i)
    time.Sleep(1 * time.Second)

    readOperationResult, err = client.GetReadOperationResult(computerVisionContext, operationId)
    if err != nil { log.Fatal(err) }
}

読み取りの結果を表示するDisplay Read results

取得したテキスト データを解析して表示する次のコードを追加すれば、関数の定義は完了です。Add the following code to parse and display the retrieved text data, and finish the function definition.

// Display the results.
fmt.Println()
for _, recResult := range *(readOperationResult.RecognitionResults) {
    for _, line := range *recResult.Lines {
        fmt.Println(*line.Text)
    }
}

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

アプリケーション ディレクトリから go run コマンドを使用してアプリケーションを実行します。Run the application from your application directory with the go run command.

go run sample-app.go

リソースをクリーンアップするClean up resources

Cognitive Services サブスクリプションをクリーンアップして削除したい場合は、リソースまたはリソース グループを削除することができます。If you want to clean up and remove a Cognitive Services subscription, you can delete the resource or resource group. リソース グループを削除すると、それに関連付けられている他のリソースも削除されます。Deleting the resource group also deletes any other resources associated with it.

次のステップNext steps