빠른 시작: REST API 및 Java를 사용하여 이미지에서 얼굴 감지Quickstart: Detect faces in an image using the REST API and Java

이 빠른 시작에서는 이미지에서 사람 얼굴을 감지하기 위해 Java와 함께 Azure Face REST API를 사용합니다.In this quickstart, you'll use the Azure Face REST API with Java to detect human faces in an image.

Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.If you don't have an Azure subscription, create a free account before you begin.

사전 요구 사항Prerequisites

  • Azure 구독 - 체험 구독 만들기Azure subscription - Create one for free
  • Azure 구독을 보유한 후에는 Azure Portal에서 Face 리소스 를 만들어 키와 엔드포인트를 가져옵니다.Once you have your Azure subscription, create a Face resource in the Azure portal to get your key and endpoint. 배포 후 리소스로 이동을 클릭합니다.After it deploys, click Go to resource.
    • 애플리케이션을 Face API에 연결하려면 만든 리소스의 키와 엔드포인트가 필요합니다.You will need the key and endpoint from the resource you create to connect your application to the Face API. 이 빠른 시작의 뒷부분에 나오는 코드에 키와 엔드포인트를 붙여넣습니다.You'll paste your key and endpoint into the code below later in the quickstart.
    • 평가판 가격 책정 계층(F0)을 통해 서비스를 사용해보고, 나중에 프로덕션용 유료 계층으로 업그레이드할 수 있습니다.You can use the free pricing tier (F0) to try the service, and upgrade later to a paid tier for production.
  • 원하는 Java IDEAny Java IDE of your choice.

Java 프로젝트 만들기Create the Java project

  1. IDE에서 새 명령줄 Java 앱을 만들고 main 메서드와 함께 Main 클래스를 추가합니다.Create a new command-line Java app in your IDE and add a Main class with a main method.
  2. Java 프로젝트로 다음 라이브러리를 가져옵니다.Import the following libraries into your Java project. Maven을 사용하는 경우 각 라이브러리에 대한 Maven 좌표가 제공됩니다.If you're using Maven, the Maven coordinates are provided for each library.

얼굴 감지 코드 추가Add face detection code

프로젝트의 기본 클래스를 엽니다.Open the main class of your project. 여기에 이미지를 로드하고 얼굴을 감지하는 데 필요한 코드를 추가합니다.Here, you will add the code needed to load images and detect faces.

패키지 가져오기Import packages

파일 맨 위에 다음 import 문을 추가합니다.Add the following import statements to the top of the file.

// This sample uses Apache HttpComponents:
// http://hc.apache.org/httpcomponents-core-ga/httpcore/apidocs/
// https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/

import java.net.URI;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;

필수 필드 추가Add essential fields

Main 클래스를 다음 코드로 바꿉니다.Replace the Main class with the following code. 이 데이터는 Face 서비스에 연결하는 방법과 입력 데이터를 가져올 위치를 지정합니다.This data specifies how to connect to the Face service and where to get the input data. subscriptionKey 필드를 구독 키의 값으로 업데이트하고, 올바른 엔드포인트 문자열이 포함되도록 uriBase 문자열을 변경해야 합니다.You'll need to update the subscriptionKey field with the value of your subscription key, and change the uriBase string so that it contains the correct endpoint string. imageWithFaces 값을 다른 이미지 파일을 가리키는 경로로 설정할 수도 있습니다.You may also wish to set the imageWithFaces value to a path that points to a different image file.

참고

2019년 7월 1일 이후에 만들어진 새 리소스는 사용자 지정 하위 도메인 이름을 사용합니다.New resources created after July 1, 2019, will use custom subdomain names. 자세한 내용 및 지역별 엔드포인트의 전체 목록은 Cognitive Services에 대한 사용자 지정 하위 도메인 이름을 참조하세요.For more information and a complete list of regional endpoints, see Custom subdomain names for Cognitive Services.

faceAttributes 필드는 단순히 특정 유형의 특성 목록입니다.The faceAttributes field is simply a list of certain types of attributes. 감지된 얼굴에 대해 검색할 정보를 지정합니다.It will specify which information to retrieve about the detected faces.

public class Main {
    // Replace <Subscription Key> with your valid subscription key.
    private static final String subscriptionKey = "<Subscription Key>";

    private static final String uriBase =
        "https://<My Endpoint String>.com/face/v1.0/detect";

    private static final String imageWithFaces =
        "{\"url\":\"https://upload.wikimedia.org/wikipedia/commons/c/c3/RH_Louise_Lillian_Gish.jpg\"}";

    private static final String faceAttributes =
        "age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise";

얼굴 감지 REST API 호출Call the face detection REST API

다음 코드로 main 메서드를 추가합니다.Add the main method with the following code. Face API에 대한 REST 호출을 구성하여 원격 이미지의 얼굴 정보를 감지합니다(검색할 얼굴 특성을 지정하는 faceAttributes 문자열).It constructs a REST call to the Face API to detect face information in the remote image (the faceAttributes string specifies which face attributes to retrieve). 그런 다음, 출력 데이터를 JSON 문자열에 기록합니다.Then it writes the output data to a JSON string.

    public static void main(String[] args) {
        HttpClient httpclient = HttpClientBuilder.create().build();

        try
        {
            URIBuilder builder = new URIBuilder(uriBase);

            // Request parameters. All of them are optional.
            builder.setParameter("returnFaceId", "true");
            builder.setParameter("returnFaceLandmarks", "false");
            builder.setParameter("returnFaceAttributes", faceAttributes);

            // Prepare the URI for the REST API call.
            URI uri = builder.build();
            HttpPost request = new HttpPost(uri);

            // Request headers.
            request.setHeader("Content-Type", "application/json");
            request.setHeader("Ocp-Apim-Subscription-Key", subscriptionKey);

            // Request body.
            StringEntity reqEntity = new StringEntity(imageWithFaces);
            request.setEntity(reqEntity);

            // Execute the REST API call and get the response entity.
            HttpResponse response = httpclient.execute(request);
            HttpEntity entity = response.getEntity();

JSON 응답 구문 분석Parse the JSON response

이전 코드 바로 아래에 다음 블록을 추가합니다. 그러면 반환된 JSON 데이터가 콘솔에 인쇄되기 전에 보다 쉽게 읽을 수 있는 형식으로 변환합니다.Directly below the previous code, add the following block, which converts the returned JSON data into a more easily readable format before printing it to the console. 마지막으로 try-catch 블록, main 메서드 및 Main 클래스를 닫습니다.Finally, close out the try-catch block, the main method, and the Main class.

            if (entity != null)
            {
                // Format and display the JSON response.
                System.out.println("REST Response:\n");

                String jsonString = EntityUtils.toString(entity).trim();
                if (jsonString.charAt(0) == '[') {
                    JSONArray jsonArray = new JSONArray(jsonString);
                    System.out.println(jsonArray.toString(2));
                }
                else if (jsonString.charAt(0) == '{') {
                    JSONObject jsonObject = new JSONObject(jsonString);
                    System.out.println(jsonObject.toString(2));
                } else {
                    System.out.println(jsonString);
                }
            }
        }
        catch (Exception e)
        {
            // Display error message.
            System.out.println(e.getMessage());
        }
    }
}

앱 실행Run the app

코드를 컴파일하고 실행합니다.Compile the code and run it. 성공적인 응답은 얼굴 데이터를 쉽게 읽을 수 있는 JSON 형식으로 콘솔 창에서 표시합니다.A successful response will display Face data in easily readable JSON format in the console window. 예를 들면 다음과 같습니다.For example:

[{
  "faceRectangle": {
    "top": 131,
    "left": 177,
    "width": 162,
    "height": 162
  },
  "faceAttributes": {
    "makeup": {
      "eyeMakeup": true,
      "lipMakeup": true
    },
    "facialHair": {
      "sideburns": 0,
      "beard": 0,
      "moustache": 0
    },
    "gender": "female",
    "accessories": [],
    "blur": {
      "blurLevel": "low",
      "value": 0.06
    },
    "headPose": {
      "roll": 0.1,
      "pitch": 0,
      "yaw": -32.9
    },
    "smile": 0,
    "glasses": "NoGlasses",
    "hair": {
      "bald": 0,
      "invisible": false,
      "hairColor": [
        {
          "color": "brown",
          "confidence": 1
        },
        {
          "color": "black",
          "confidence": 0.87
        },
        {
          "color": "other",
          "confidence": 0.51
        },
        {
          "color": "blond",
          "confidence": 0.08
        },
        {
          "color": "red",
          "confidence": 0.08
        },
        {
          "color": "gray",
          "confidence": 0.02
        }
      ]
    },
    "emotion": {
      "contempt": 0,
      "surprise": 0.005,
      "happiness": 0,
      "neutral": 0.986,
      "sadness": 0.009,
      "disgust": 0,
      "anger": 0,
      "fear": 0
    },
    "exposure": {
      "value": 0.67,
      "exposureLevel": "goodExposure"
    },
    "occlusion": {
      "eyeOccluded": false,
      "mouthOccluded": false,
      "foreheadOccluded": false
    },
    "noise": {
      "noiseLevel": "low",
      "value": 0
    },
    "age": 22.9
  },
  "faceId": "49d55c17-e018-4a42-ba7b-8cbbdfae7c6f"
}]

다음 단계Next steps

이 빠른 시작에서는 Azure Face API에 대한 REST 호출을 사용하여 이미지의 얼굴을 감지하고 해당 특성을 반환하는 간단한 Java 콘솔 애플리케이션을 만들었습니다.In this quickstart, you created a simple Java console application that uses REST calls to the Azure Face API to detect faces in an image and return their attributes. 다음으로, Face API 참조 설명서를 살펴보고 지원되는 시나리오에 대해 자세히 알아보세요.Next, explore the Face API reference documentation to learn more about the supported scenarios.