クイック スタート:Face .NET SDK を使用して画像から顔を検出するQuickstart: Detect faces in an image using the Face .NET SDK

このクイック スタートでは、Face サービス SDK と C# を使用して、画像から人の顔を検出します。In this quickstart, you will use the Face service SDK with C# to detect human faces in an image. このクイック スタートで取り上げているコードの実例については、GitHub の Cognitive Services Vision csharp quickstarts リポジトリにある Face プロジェクトを参照してください。For a working example of the code in this quickstart, see the Face project in the Cognitive Services Vision csharp quickstarts repo on GitHub.

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。If you don't have an Azure subscription, create a free account before you begin.

前提条件Prerequisites

Visual Studio プロジェクトの作成Create the Visual Studio project

  1. Visual Studio で、新しいコンソール アプリ (.NET Framework) プロジェクトを作成し、FaceDetection という名前を付けます。In Visual Studio, create a new Console app (.NET Framework) project and name it FaceDetection.
  2. ソリューションに他のプロジェクトがある場合は、これを単一のスタートアップ プロジェクトとして選択します。If there are other projects in your solution, select this one as the single startup project.
  3. 必須の NuGet パッケージを入手します。Get the required NuGet packages. ソリューション エクスプローラーで目的のプロジェクトを右クリックし、 [NuGet パッケージの管理] を選択します。Right-click on your project in the Solution Explorer and select Manage NuGet Packages. [参照] タブをクリックし、 [プレリリースを含める] を選択した後、次のパッケージを検索してインストールします。Click the Browse tab and select Include prerelease; then find and install the following package:
  4. プロジェクトのすべての NuGet パッケージの最新バージョンをインストールしたことを確認します。Make sure you have installed the latest versions of all NuGet packages for your project. ソリューション エクスプローラーで目的のプロジェクトを右クリックし、 [NuGet パッケージの管理] を選択します。Right-click on your project in the Solution Explorer and select Manage NuGet Packages. [更新] タブをクリックして、表示されたすべてのパッケージの最新バージョンをインストールします。Click the Updates tab and install the latest versions of any packages that appear.

顔検出コードを追加するAdd face detection code

新しいプロジェクトの Program.cs ファイルを開きます。Open the new project's Program.cs file. 画像を読み込んで顔を検出するために必要なコードをここに追加します。Here, you will add the code needed to load images and detect faces.

名前空間を含めるInclude namespaces

Program.cs ファイルの先頭に次の using ステートメントを追加します。Add the following using statements to the top of your Program.cs file.

using Microsoft.Azure.CognitiveServices.Vision.Face;
using Microsoft.Azure.CognitiveServices.Vision.Face.Models;

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

必須フィールドを追加するAdd essential fields

次のフィールドを含む Program クラスを追加します。Add the Program class with the following fields. このデータによって、Face サービスへの接続方法と入力データの取得場所が指定されます。This data specifies how to connect to the Face service and where to get the input data. subscriptionKey フィールドは、実際のサブスクリプション キーの値で更新する必要があります。また faceEndpoint 文字列も、適切なリージョン識別子を含むように、必要に応じて変更してください。You'll need to update the subscriptionKey field with the value of your subscription key, and you may need to change the faceEndpoint string so that it contains the correct region identifier. localImagePathremoteImageUrl の値についても、実際の画像ファイルを指すパスに設定する必要があります。You'll also need to set the localImagePath and/or remoteImageUrl values to paths that point to actual image files.

faceAttributes フィールドは、簡単に言えば、特定の種類の属性を格納する配列です。The faceAttributes field is simply an array of certain types of attributes. 検出された顔について、どの情報を取得するかを指定します。It will specify which information to retrieve about the detected faces.

namespace DetectFace
{
    class Program
    {
        // subscriptionKey = "0123456789abcdef0123456789ABCDEF"
        private const string subscriptionKey = "<SubscriptionKey>";

        // You must use the same region as you used to get your subscription
        // keys. For example, if you got your subscription keys from westus,
        // replace "westcentralus" with "westus".
        //
        // Free trial subscription keys are generated in the westcentralus
        // region. If you use a free trial subscription key, you shouldn't
        // need to change the region.
        // Specify the Azure region
        private const string faceEndpoint =
            "https://westcentralus.api.cognitive.microsoft.com";

        // localImagePath = @"C:\Documents\LocalImage.jpg"
        private const string localImagePath = @"<LocalImage>";

        private const string remoteImageUrl =
            "https://upload.wikimedia.org/wikipedia/commons/3/37/Dagestani_man_and_woman.jpg";

        private static readonly FaceAttributeType[] faceAttributes =
            { FaceAttributeType.Age, FaceAttributeType.Gender };

Face クライアントを作成して使用するCreate and use the Face client

次に、次のコードを含む Program クラスの Main メソッドを追加します。Next, add the Main method of the Program class with the following code. これは、Face API クライアントを設定するものです。This sets up a Face API client.

static void Main(string[] args)
{
    FaceClient faceClient = new FaceClient(
        new ApiKeyServiceClientCredentials(subscriptionKey),
        new System.Net.Http.DelegatingHandler[] { });
    faceClient.Endpoint = faceEndpoint;

また、Main メソッドには、リモートとローカルの画像から顔を検出するために、新たに作成した Face クライアントを使用するように、以下のコードも追加します。Also in the Main method, add the following code to use the newly created Face client to detect faces in a remote and local image. 実際の検出メソッドは、この後で定義します。The detection methods will be defined next.

    Console.WriteLine("Faces being detected ...");
    var t1 = DetectRemoteAsync(faceClient, remoteImageUrl);
    var t2 = DetectLocalAsync(faceClient, localImagePath);

    Task.WhenAll(t1, t2).Wait(5000);
    Console.WriteLine("Press any key to exit");
    Console.ReadLine();
}

顔を検出するDetect faces

Program クラスに次のメソッドを追加します。Add the following method to the Program class. Face サービス クライアントを使用してリモートの画像から顔を検出するもので、対象となる画像は URL で参照します。It uses the Face service client to detect faces in a remote image, referenced by a URL. ここでは、faceAttributes フィールドが使用されます—faceList に追加された DetectedFace オブジェクトには、指定された属性 (この例では、年齢と性別) があります。It uses the faceAttributes field—the DetectedFace objects added to faceList will have the specified attributes (in this case, age and gender).

// Detect faces in a remote image
private static async Task DetectRemoteAsync(
    FaceClient faceClient, string imageUrl)
{
    if (!Uri.IsWellFormedUriString(imageUrl, UriKind.Absolute))
    {
        Console.WriteLine("\nInvalid remoteImageUrl:\n{0} \n", imageUrl);
        return;
    }

    try
    {
        IList<DetectedFace> faceList =
            await faceClient.Face.DetectWithUrlAsync(
                imageUrl, true, false, faceAttributes);

        DisplayAttributes(GetFaceAttributes(faceList, imageUrl), imageUrl);
    }
    catch (APIErrorException e)
    {
        Console.WriteLine(imageUrl + ": " + e.Message);
    }
}

同様に、DetectLocalAsync メソッドを追加します。Similarly, add the DetectLocalAsync method. Face サービス クライアントを使用してローカルの画像から顔を検出するもので、対象となる画像はファイル パスで参照します。It uses the Face service client to detect faces in a local image, referenced by a file path.

// Detect faces in a local image
private static async Task DetectLocalAsync(FaceClient faceClient, string imagePath)
{
    if (!File.Exists(imagePath))
    {
        Console.WriteLine(
            "\nUnable to open or read localImagePath:\n{0} \n", imagePath);
        return;
    }

    try
    {
        using (Stream imageStream = File.OpenRead(imagePath))
        {
            IList<DetectedFace> faceList =
                    await faceClient.Face.DetectWithStreamAsync(
                        imageStream, true, false, faceAttributes);
            DisplayAttributes(
                GetFaceAttributes(faceList, imagePath), imagePath);
        }
    }
    catch (APIErrorException e)
    {
        Console.WriteLine(imagePath + ": " + e.Message);
    }
}

顔の属性を取得して表示するRetrieve and display face attributes

次に、GetFaceAttributes メソッドを定義します。Next, define the GetFaceAttributes method. これは、該当する属性情報を含んだ文字列を返します。It returns a string with the relevant attribute information.

private static string GetFaceAttributes(
    IList<DetectedFace> faceList, string imagePath)
{
    string attributes = string.Empty;

    foreach (DetectedFace face in faceList)
    {
        double? age = face.FaceAttributes.Age;
        string gender = face.FaceAttributes.Gender.ToString();
        attributes += gender + " " + age + "   ";
    }

    return attributes;
}

最後に、顔の属性データをコンソール出力に書き込む DisplayAttributes メソッドを定義します。Finally, define the DisplayAttributes method to write face attribute data to the console output. その後、クラスと名前空間を閉じることができます。You can then close the class and namespace.

        // Display the face attributes
        private static void DisplayAttributes(string attributes, string imageUri)
        {
            Console.WriteLine(imageUri);
            Console.WriteLine(attributes + "\n");
        }
    }
}

アプリの実行Run the app

成功応答には、画像内の個々の顔の性別と年齢が表示されます。A successful response will display the gender and age for each face in the image. 例:For example:

https://upload.wikimedia.org/wikipedia/commons/3/37/Dagestani_man_and_woman.jpg
Male 37   Female 56

次の手順Next steps

このクイック スタートでは、Face API サービスを使ってローカルとリモートの両方の画像から顔を検出する簡単な .NET コンソール アプリケーションを作成しました。In this quickstart, you created a simple .NET console application that can use the Face API service to detect faces in both local and remote images. この後は、一歩進んだチュートリアルに取り組んでみましょう。顔の情報を直感的な方法でユーザーに見せる方法をご覧いただけます。Next, follow a more in-depth tutorial to see how you can present face information to the user in an intuitive way.