자습서: 이미지에 있는 얼굴에서 감정을 인식합니다.Tutorial: Recognize emotions on a face in an image.

중요

Emotion API는 2019년 2월 15일부터 더 이상 사용되지 않습니다.The Emotion API will be deprecated on February 15, 2019. 이제 감정 인식 기능은 Face API의 일부로 일반 공급됩니다.The emotion recognition capability is now generally available as part of the Face API.

이미지의 얼굴에 의해 표현된 감정을 인식하려면 Emotion API를 사용하는 기본 Windows 응용 프로그램을 탐색합니다.Explore a basic Windows application that uses Emotion API to recognize the emotions expressed by the faces in an image. 아래 예제에서는 이미지 URL 또는 로컬로 저장된 파일을 제출할 수 있습니다.The below example lets you submit an image URL or a locally stored file. .NET Framework의 일부인 WPF(Windows Presentation Foundation) 및 Emotion API를 사용하여 고유한 Windows용 앱을 빌드하기 위한 템플릿으로 이 오픈 소스 예제를 사용할 수 있습니다.You can use this open source example as a template for building your own app for Windows using the Emotion API and WPF (Windows Presentation Foundation), a part of .NET Framework.

필수 구성 요소Prerequisites

플랫폼 요구 사항Platform requirements

아래 예제는 Visual Studio 2015 Community Edition을 사용하여 .NET Framework용으로 개발되었습니다.The below example has been developed for the .NET Framework using Visual Studio 2015, Community Edition.

Emotion API를 구독하고 구독 키를 받기Subscribe to Emotion API and get a subscription key

예제를 만들기 전에 Microsoft Cognitive Services의 일부인 Emotion API를 구독해야 합니다.Before creating the example, you must subscribe to Emotion API which is part of the Microsoft Cognitive Services. 구독을 참조하세요.See Subscriptions. 이 자습서에서는 기본 키와 및 보조 키를 둘 다 사용할 수 있습니다.Both the primary and secondary key can be used in this tutorial. API 키 비밀 및 보안 유지를 위해 모범 사례를 수행해야 합니다.Make sure to follow best practices for keeping your API key secret and secure.

클라이언트 라이브러리 및 예제 가져오기Get the client library and example

SDK를 통해 Emotion API 클라이언트 라이브러리를 다운로드할 수 있습니다.You may download the Emotion API client library via SDK. 다운로드한 zip 파일은 사용자가 선택한 폴더에 추출돼야 하며, 많은 사용자가 Visual Studio 2015 폴더를 선택합니다.The downloaded zip file needs to be extracted to a folder of your choice, many users choose the Visual Studio 2015 folder.

1단계: 예제 열기Step 1: Open the example

  1. Microsoft Visual Studio 2015를 시작하여 파일을 클릭하고 열기를 선택한 다음, 프로젝트/솔루션을 선택합니다.Start Microsoft Visual Studio 2015 and click File, select Open, then Project/Solution.
  2. 다운로드한 Emotion API 파일을 저장한 폴더를 찾습니다.Browse to the folder where you saved the downloaded Emotion API files. Emotion, Windows, 샘플- WPF 폴더를 차례로 클릭합니다.Click on Emotion, then Windows, and then the Sample-WPF folder.
  3. EmotionAPI-WPF-Samples.sln이라는 Visual Studio 2015 솔루션(.sln) 파일을 열려면 두 번 클릭합니다.Double-click to open the Visual Studio 2015 Solution (.sln) file named EmotionAPI-WPF-Samples.sln. 이렇게 하면 Visual Studio에서 솔루션이 열립니다.This will open the solution in Visual Studio.

2단계: 예제 빌드Step 2: Build the example

  1. 솔루션 탐색기에서 참조를 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리를 선택합니다.In Solution Explorer, right click References and select Manage NuGet Packages.

    NuGet 패키지 관리자 열기

  2. NuGet 패키지 관리자 창이 열립니다.The NuGet Package Manager window opens. 먼저 왼쪽 상단 구석에서 찾아보기를 선택한 다음, 검색 상자에 "Newtonsoft.Json"을 입력하고 Newtonsoft.Json 패키지를 선택하고 설치를 클릭합니다.First select Browse in the upper left corner, then in the search box type “Newtonsoft.Json”, select the Newtonsoft.Json package and click Install.

    NuGet 패키지 찾기

  3. Ctrl+Shift+B를 누르거나, 리본 메뉴에서 빌드를 클릭한 다음, 솔루션 빌드를 선택합니다.Press Ctrl+Shift+B, or click Build on the ribbon menu, then select Build Solution.

3단계: 예제 실행Step 3: Run the example

  1. 빌드가 완료된 후 F5 키를 누르거나, 리본 메뉴에서 시작을 클릭하여 예제를 실행합니다.After the build is complete, press F5 or click Start on the ribbon menu to run the example.
  2. "시작하려면 여기에 구독 키를 붙여넣으세요"라는 텍스트 상자가 있는 Emotion API 창을 찾습니다.Locate the Emotion API window with the text box reading "Paste your subscription key here to start". 아래 스크린샷에 표시된 것처럼 구독 키를 텍스트 상자에 붙여넣습니다.Paste your subscription key into the text box as shown in below screenshot. “키 저장” 단추를 클릭하여 PC 또는 노트북에 구독 키를 저장하도록 선택할 수 있습니다.You can choose to persist your subscription key on your PC or laptop by clicking the "Save Key" button. 시스템에서 구독 키를 삭제하려면 “키 삭제”를 클릭하여 PC 또는 노트북에서 제거합니다.When you want to delete the subscription key from the system, click "Delete Key" to remove it from your PC or laptop.

    Emotion 기능 인터페이스

  3. "시나리오 선택" 아래에서 "스트림을 사용하여 감정 감지" 또는 "URL을 사용하여 감정 감지"의 두 가지 시나리오 중 하나를 사용하려면 클릭한 다음, 화면의 지침을 따릅니다.Under "Select Scenario" click to use either of the two scenarios, “Detect emotion using a stream” or “Detect emotion using a URL”, then follow the instructions on the screen. Microsoft는 업로드되는 이미지를 수신하며, 해당 이미지를 사용하여 Emotion API 및 관련 서비스를 개선할 수 있습니다.Microsoft receives the images you upload and may use them to improve Emotion API and related services. 이미지를 제출하면 개발자 준수 사항을 따랐음을 확인하는 것입니다.By submitting an image, you confirm that you have followed our Developer Code of Conduct.

  4. 이 예제 응용 프로그램에서 사용할 예제 이미지가 있습니다.There are example images to be used with this example application. 데이터 폴더 아래 Face API Github 리포지토리에서 이러한 이미지를 찾을 수 있습니다.You can find these images on the Face API Github repo under the Data folder. 이러한 이미지의 사용은 이 예제를 테스트하기 위해 사용하는 것은 문제 없지만 다시 게시하는 것은 안 된다는 공정한 사용 계약에 따라 라이선스됐습니다.Please note the use of these images is licensed under Fair Use agreement meaning they are OK to use for testing this example, but not for republishing.

검토 및 학습Review and Learn

이제 실행 중인 응용 프로그램이 있으므로 이 예제 앱이 Microsoft Cognitive Services와 어떻게 통합되는지를 살펴보겠습니다.Now that you have a running application, let us review how this example app integrates with Microsoft Cognitive Services. 이렇게 하면 계속해서 이 앱에 빌드하거나 Microsoft Emotion API를 사용하여 고유한 앱을 개발하는 작업이 더 쉬워집니다.This will make it easier to either continue building onto this app or develop your own app using Microsoft Emotion API.

이 예제 앱은 Microsoft Emotion API용 씬 C# 클라이언트 래퍼인 Emotion API 클라이언트 라이브러리를 사용합니다.This example app makes use of the Emotion API Client Library, a thin C# client wrapper for the Microsoft Emotion API. 위에서 설명한 대로 예제 앱을 빌드한 경우 NuGet 패키지에서 클라이언트 라이브러리를 가져왔습니다.When you built the example app as described above, you got the Client Library from a NuGet package. Emotion, Windows, 클라이언트 라이브러리 아래의 “클라이언트 라이브러리” 폴더에서, 위의 필수 조건에 언급된 다운로드된 파일 리포지토리의 일부인 클라이언트 라이브러리 소스 코드를 검토할 수 있습니다.You can review the Client Library source code in the folder titled “Client Library” under Emotion, Windows, Client Library, which is part of the downloaded file repository mentioned above in Prerequisites.

솔루션 탐색기에서 클라이언트 라이브러리 코드를 사용하는 방법을 찾을 수 있습니다. 즉, EmotionAPI-WPF_Samples 아래에서 DetectEmotionUsingStreamPage.xaml을 확장하여 로컬로 저장된 파일을 찾아보는 데 사용되는 DetectEmotionUsingStreamPage.xaml.cs를 찾거나, DetectEmotionUsingURLPage.xaml을 확장하여 이미지 URL을 업로드하는 경우 사용되는 DetectEmotionUsingURLPage.xaml.cs를 찾습니다.You can also find out how to use the Client Library code in Solution Explorer: Under EmotionAPI-WPF_Samples, expand DetectEmotionUsingStreamPage.xaml to locate DetectEmotionUsingStreamPage.xaml.cs, which is used for browsing to a locally stored file, or expand DetectEmotionUsingURLPage.xaml to find DetectEmotionUsingURLPage.xaml.cs, which is used when uploading an image URL. .xaml.cs 파일을 두 번 클릭하여 Visual Studio의 새 창에서 엽니다.Double-click the .xaml.cs files to have them open in new windows in Visual Studio.

Emotion 클라이언트 라이브러리가 예제 앱에서 사용되는 방법을 검토하려면 DetectEmotionUsingStreamPage.xaml.csDetectEmotionUsingURLPage.xaml.cs의 두 코드 조각을 살펴보겠습니다.Reviewing how the Emotion Client Library gets used in our example app, let's look at two code snippets from DetectEmotionUsingStreamPage.xaml.cs and DetectEmotionUsingURLPage.xaml.cs. 각 파일에는 아래에 재현된 코드 조각을 찾는 데 도움이 되도록 “KEY SAMPLE CODE STARTS HERE” 및 “KEY SAMPLE CODE ENDS HERE”를 표시하는 코드 주석이 포함되어 있습니다.Each file contains code comments indicating “KEY SAMPLE CODE STARTS HERE” and “KEY SAMPLE CODE ENDS HERE” to help you locate the code snippets reproduced below.

Emotion API는 이미지 URL 또는 이진 이미지 데이터(8진수 스트림 형식)를 입력으로 사용할 수 있습니다.The Emotion API is able to work with either an image URL or binary image data (in form of an octet stream) as input. 아래의 두 옵션을 검토합니다.The two options are reviewed below. 두 사례에서 먼저 Emotion 클라이언트 라이브러리를 사용할 수 있게 해주는 using 지시문을 찾습니다.In both cases, you first find a using directive, which lets you use the Emotion Client Library.


            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE STARTS HERE
            // Use the following namespace for EmotionServiceClient
            // -----------------------------------------------------------------------
            using Microsoft.ProjectOxford.Emotion;
            using Microsoft.ProjectOxford.Emotion.Contract;
            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE ENDS HERE
            // -----------------------------------------------------------------------

DetectEmotionUsingURLPage.xaml.csDetectEmotionUsingURLPage.xaml.cs

이 코드 조각은 등록 키 및 사진 URL을 Emotion API 서비스에 제출하려면 클라이언트 라이브러리를 사용하는 방법을 보여줍니다.This code snippet shows how to use the Client Library to submit your subscription key and a photo URL to the Emotion API service.


            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE STARTS HERE
            // -----------------------------------------------------------------------

            window.Log("EmotionServiceClient is created");

            //
            // Create Project Oxford Emotion API Service client
            //
            EmotionServiceClient emotionServiceClient = new EmotionServiceClient(subscriptionKey);

            window.Log("Calling EmotionServiceClient.RecognizeAsync()...");
            try
            {
                //
                // Detect the emotions in the URL
                //
                Emotion[] emotionResult = await emotionServiceClient.RecognizeAsync(url);
                return emotionResult;
            }
            catch (Exception exception)
            {
                window.Log("Detection failed. Please make sure that you have the right subscription key and proper URL to detect.");
                window.Log(exception.ToString());
                return null;
            }
            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE ENDS HERE
            // -----------------------------------------------------------------------

DetectEmotionUsingStreamPage.xaml.csDetectEmotionUsingStreamPage.xaml.cs

구독 키와 로컬로 저장된 이미지를 Emotion API에 제출하는 방법이 아래에 표시됩니다.Shown below is how to submit your subscription key and a locally stored image to the Emotion API.



            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE STARTS HERE
            // -----------------------------------------------------------------------

            //
            // Create Project Oxford Emotion API Service client
            //
            EmotionServiceClient emotionServiceClient = new EmotionServiceClient(subscriptionKey);

            window.Log("Calling EmotionServiceClient.RecognizeAsync()...");
            try
            {
                Emotion[] emotionResult;
                using (Stream imageFileStream = File.OpenRead(imageFilePath))
                {
                    //
                    // Detect the emotions in the URL
                    //
                    emotionResult = await emotionServiceClient.RecognizeAsync(imageFileStream);
                    return emotionResult;
                }
            }
            catch (Exception exception)
            {
                window.Log(exception.ToString());
                return null;
            }
            // -----------------------------------------------------------------------
            // KEY SAMPLE CODE ENDS HERE
            // -----------------------------------------------------------------------