빠른 시작: Computer Vision 클라이언트 라이브러리 사용Quickstart: Use the Computer Vision client library

Computer Vision 클라이언트 라이브러리를 시작합니다.Get started with the Computer Vision client library. Computer Vision 서비스는 이미지를 처리하고 시각적 기능에 대한 정보를 반환하는 AI 알고리즘을 제공합니다.The Computer Vision service provides you with AI algorithms for processing images and returning information on their visual features. 다음 단계에 따라 애플리케이션에 패키지를 설치하고 기본 작업에 대한 샘플 코드를 사용해 보세요.Follow these steps to install a package to your application and try out the sample code for basic tasks.

Computer Vision 클라이언트 라이브러리를 사용하여 다음을 수행합니다.Use the Computer Vision client library to:

  • 태그, 텍스트 설명, 얼굴, 성인 콘텐츠 등에 대한 이미지를 분석합니다.Analyze an image for tags, text description, faces, adult content, and more.
  • 읽기 API를 사용하여 인쇄 및 필기 텍스트를 읽습니다.Read printed and handwritten text with the Read API.

참조 설명서 | 라이브러리 소스 코드 | 패키지(NuGet) | 샘플Reference documentation | Library source code | Package (NuGet) | Samples

필수 구성 요소Prerequisites

  • Azure 구독 - 체험 구독 만들기An Azure subscription - Create one for free
  • Visual Studio IDE 또는 현재 버전의 .NET Core.The Visual Studio IDE or current version of .NET Core.
  • Azure 구독을 보유한 후에는 Azure Portal에서 Computer Vision 리소스 를 만들어 키와 엔드포인트를 가져옵니다.Once you have your Azure subscription, create a Computer Vision resource in the Azure portal to get your key and endpoint. 배포 후 리소스로 이동 을 클릭합니다.After it deploys, click Go to resource.
    • 애플리케이션을 Computer Vision 서비스에 연결하려면 만든 리소스의 키와 엔드포인트가 필요합니다.You will need the key and endpoint from the resource you create to connect your application to the Computer Vision service. 이 빠른 시작의 뒷부분에 나오는 코드에 키와 엔드포인트를 붙여넣습니다.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.

설치Setting up

새 C# 애플리케이션 만들기Create a new C# application

Visual Studio를 사용하여 새 .NET Core 애플리케이션을 만듭니다.Using Visual Studio, create a new .NET Core application.

클라이언트 라이브러리 설치Install the client library

새 프로젝트를 만든 후 솔루션 탐색기 에서 프로젝트 솔루션을 마우스 오른쪽 단추로 클릭하고 NuGet 패키지 관리 를 선택하여 클라이언트 라이브러리를 설치합니다.Once you've created a new project, install the client library by right-clicking on the project solution in the Solution Explorer and selecting Manage NuGet Packages. 열리는 패키지 관리자에서 찾아보기 를 선택하고, 시험판 포함 을 선택하고, Microsoft.Azure.CognitiveServices.Vision.ComputerVision를 검색합니다.In the package manager that opens select Browse, check Include prerelease, and search for Microsoft.Azure.CognitiveServices.Vision.ComputerVision. 6.0.0-preview.1 버전, 설치 를 차례로 선택합니다.Select version 6.0.0-preview.1, and then Install.

한 번에 전체 빠른 시작 코드 파일을 보시겠습니까?Want to view the whole quickstart code file at once? GitHub에서 찾을 수 있으며 이 빠른 시작의 코드 예제를 포함합니다.You can find it on GitHub, which contains the code examples in this quickstart.

프로젝트 디렉터리의 선호하는 편집기 또는 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;
using System.Threading;
using System.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
static string subscriptionKey = "COMPUTER_VISION_SUBSCRIPTION_KEY";
static string endpoint = "COMPUTER_VISION_ENDPOINT";

중요

Azure Portal로 이동합니다.Go to the Azure portal. 필수 구성 요소 섹션에서 만든 Computer Vision 리소스가 성공적으로 배포된 경우 다음 단계 아래에서 리소스로 이동 단추를 클릭합니다.If the Computer Vision resource you created in the Prerequisites section deployed successfully, click the Go to Resource button under Next Steps. 리소스 관리 아래에 있는 리소스의 키 및 엔드포인트 페이지에서 키 및 엔드포인트를 찾을 수 있습니다.You can find your key and endpoint in the resource's key and endpoint page, under resource management.

완료되면 코드에서 키를 제거하고 공개적으로 게시하지 마세요.Remember to remove the key from your code when you're done, and never post it publicly. 프로덕션의 경우 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용하는 것이 좋습니다.For production, consider using a secure way of storing and accessing your credentials. 자세한 내용은 Cognitive Services 보안 문서를 참조하세요.See the Cognitive Services security article for more information.

애플리케이션의 Main 메서드에서 이 빠른 시작에 사용된 메서드에 대한 호출을 추가합니다.In the application's Main method, add calls for the methods used in this quickstart. 나중에 만들 것입니다.You will create these later.

// Create a client
ComputerVisionClient client = Authenticate(endpoint, subscriptionKey);
// Analyze an image to get features and other properties.
AnalyzeImageUrl(client, ANALYZE_URL_IMAGE).Wait();
// Extract text (OCR) from a URL image using the Read API
ReadFileUrl(client, READ_TEXT_URL_IMAGE).Wait();
// Extract text (OCR) from a local image using the Read API
ReadFileLocal(client, READ_TEXT_LOCAL_IMAGE).Wait();

개체 모델Object model

Computer Vision .NET SDK의 주요 기능 중 일부를 처리하는 클래스와 인터페이스는 다음과 같습니다.The following classes and interfaces handle some of the major features of the Computer Vision .NET SDK.

NameName DescriptionDescription
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 이 열거형은 표준 Analyze(분석) 작업에서 수행할 수 있는 다양한 유형의 이미지 분석을 정의합니다.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_KEYCOMPUTER_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;
}

이미지 분석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.

로컬 이미지를 분석할 수도 있습니다.You can also analyze a local image. ComputerVisionClient 메서드(예: AnalyzeImageInStreamAsync)를 참조하세요.See the ComputerVisionClient methods, such as AnalyzeImageInStreamAsync. 또는 로컬 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, see the sample code on GitHub for scenarios involving local images.

테스트 이미지 설정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";

시각적 기능 지정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. 텍스트 인식에 대한 자세한 내용은 OCR(광학 문자 인식) 개념 문서를 참조하세요. 이 섹션의 코드는 최신 Read 3.0용 Computer Vision SDK 릴리스를 사용하고, 클라이언트 개체를 사용하여 이미지의 텍스트를 감지하고 추출하는 BatchReadFileUrl 메서드를 정의합니다.For more information on text recognition, see the Optical character recognition (OCR) conceptual doc. The code in this section uses the latest Computer Vision SDK release for Read 3.0 and defines a method, BatchReadFileUrl, which uses the client object to detect and extract text in the image.

로컬 이미지에서 텍스트를 추출할 수도 있습니다.You can also extract text from a local image. ComputerVisionClient 메서드(예: ReadInStreamAsync)를 참조하세요.See the ComputerVisionClient methods, such as ReadInStreamAsync. 또는 로컬 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, see the sample code on GitHub for scenarios involving local images.

테스트 이미지 설정Set up test image

Program 클래스에서 텍스트를 추출하려는 이미지의 URL에 대한 참조를 저장합니다.In your Program class, save a reference to the URL of the image you want to extract text from. 이 코드 조각에는 인쇄된 텍스트 및 필기 텍스트 모두에 대한 샘플 이미지가 포함되어 있습니다.This snippet includes sample images for both printed and handwritten text.

private const string READ_TEXT_URL_IMAGE = "https://intelligentkioskstore.blob.core.windows.net/visionapi/suggestedphotos/3.png";

읽기 API 호출Call the Read API

텍스트를 읽기 위한 새 메서드를 정의합니다.Define the new method for reading text. 지정된 이미지에 대해 ReadAsync 메서드를 호출하는 아래 코드를 추가합니다.Add the code below, which calls the ReadAsync method for the given image. 그러면 작업 ID가 반환되고 이미지의 콘텐츠를 읽는 비동기 프로세스가 시작됩니다.This returns an operation ID and starts an asynchronous process to read the content of the image.

/*
 * READ FILE - URL 
 * Extracts text. 
 */
public static async Task ReadFileUrl(ComputerVisionClient client, string urlFile)
{
    Console.WriteLine("----------------------------------------------------------");
    Console.WriteLine("READ FILE FROM URL");
    Console.WriteLine();

    // Read text from URL
    var textHeaders = await client.ReadAsync(urlFile, language: "en");
    // After the request, get the operation location (operation ID)
    string operationLocation = textHeaders.OperationLocation;
    Thread.Sleep(2000);

    // Retrieve the URI where the extracted 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
    ReadOperationResult results;
    Console.WriteLine($"Extracting text from URL file {Path.GetFileName(urlFile)}...");
    Console.WriteLine();
    do
    {
        results = await client.GetReadResultAsync(Guid.Parse(operationId));
    }
    while ((results.Status == OperationStatusCodes.Running ||
        results.Status == OperationStatusCodes.NotStarted));

    // Display the found text.
    Console.WriteLine();
    var textUrlFileResults = results.AnalyzeResult.ReadResults;
    foreach (ReadResult page in textUrlFileResults)
    {
        foreach (Line line in page.Lines)
        {
            Console.WriteLine(line.Text);
        }
    }
    Console.WriteLine();
}


읽기 결과 가져오기Get Read results

그런 다음, ReadAsync 호출에서 반환된 작업 ID를 가져와서 서비스의 작업 결과를 쿼리합니다.Next, get the operation ID returned from the ReadAsync call, and use it to query the service for operation results. 다음 코드는 결과가 반환될 때까지 작업을 검사합니다.The following code checks the operation until the results are returned. 그런 다음, 추출된 텍스트 데이터를 콘솔에 출력합니다.It then prints the extracted text data to the console.

// Retrieve the URI where the extracted 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
ReadOperationResult results;
Console.WriteLine($"Extracting text from URL file {Path.GetFileName(urlFile)}...");
Console.WriteLine();
do
{
    results = await client.GetReadResultAsync(Guid.Parse(operationId));
}
while ((results.Status == OperationStatusCodes.Running ||
    results.Status == OperationStatusCodes.NotStarted));

읽기 결과 표시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 textUrlFileResults = results.AnalyzeResult.ReadResults;
foreach (ReadResult page in textUrlFileResults)
{
    foreach (Line line in page.Lines)
    {
        Console.WriteLine(line.Text);
    }
}

애플리케이션 실행Run the application

IDE 창의 위쪽에서 디버그 단추를 클릭하여 애플리케이션을 실행합니다.Run the application by clicking the Debug button at the top of the IDE window.

리소스 정리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 | Library source code |Artifact (Maven) | Samples

필수 구성 요소Prerequisites

  • Azure 구독 - 체험 구독 만들기An Azure subscription - Create one for free
  • JDK(Java Development Kit)의 현재 버전The current version of the Java Development Kit (JDK)
  • Gradle 빌드 도구 또는 다른 종속성 관리자The Gradle build tool, or another dependency manager.
  • Azure 구독을 보유한 후에는 Azure Portal에서 Computer Vision 리소스 를 만들어 키와 엔드포인트를 가져옵니다.Once you have your Azure subscription, create a Computer Vision resource in the Azure portal to get your key and endpoint. 배포 후 리소스로 이동 을 클릭합니다.After it deploys, click Go to resource.
    • 애플리케이션을 Computer Vision 서비스에 연결하려면 만든 리소스의 키와 엔드포인트가 필요합니다.You will need the key and endpoint from the resource you create to connect your application to the Computer Vision service. 이 빠른 시작의 뒷부분에 나오는 코드에 키와 엔드포인트를 붙여넣습니다.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.

설치Setting up

새 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.

클라이언트 라이브러리 설치Install the client library

이 빠른 시작에서는 Gradle 종속성 관리자를 사용합니다.This quickstart uses the Gradle dependency manager. 다른 종속성 관리자에 대한 클라이언트 라이브러리 및 정보는 Maven 중앙 리포지토리에서 찾을 수 있습니다.You can find the client library and information for other dependency managers on the Maven Central Repository.

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. 이 구성은 프로젝트를 Java 애플리케이션(진입점이 ComputerVisionQuickstarts 클래스임)으로 정의합니다.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()
}
dependencies {
    compile(group = "com.microsoft.azure.cognitiveservices", name = "azure-cognitiveservices-computervision", version = "1.0.4-beta")
}

Java 파일 만들기Create a Java file

작업 디렉터리에서 다음 명령을 실행하여 프로젝트 원본 폴더를 만듭니다.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.implementation.ComputerVisionImpl;
import com.microsoft.azure.cognitiveservices.vision.computervision.models.*;

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

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

한 번에 전체 빠른 시작 코드 파일을 보시겠습니까?Want to view the whole quickstart code file at once? GitHub에서 찾을 수 있으며 이 빠른 시작의 코드 예제를 포함합니다.You can find it on GitHub, which contains the code examples in this quickstart.

애플리케이션의 ComputerVisionQuickstarts 클래스에서 리소스의 키 및 엔드포인트에 대한 변수를 만듭니다.In the application's ComputerVisionQuickstarts class, create variables for your resource's key and endpoint.

static String subscriptionKey = "<your-subscription-key>";
static String endpoint = "<your-api-endpoint>";

중요

Azure Portal로 이동합니다.Go to the Azure portal. 필수 구성 요소 섹션에서 만든 [제품 이름] 리소스가 성공적으로 배포된 경우 다음 단계 아래에서 리소스로 이동 단추를 클릭합니다.If the [Product name] resource you created in the Prerequisites section deployed successfully, click the Go to Resource button under Next Steps. 리소스 관리 아래에 있는 리소스의 키 및 엔드포인트 페이지에서 키 및 엔드포인트를 찾을 수 있습니다.You can find your key and endpoint in the resource's key and endpoint page, under resource management.

완료되면 코드에서 키를 제거하고 공개적으로 게시하지 마세요.Remember to remove the key from your code when you're done, and never post it publicly. 프로덕션의 경우 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용하는 것이 좋습니다.For production, consider using a secure way of storing and accessing your credentials. 자세한 내용은 Cognitive Services 보안 문서를 참조하세요.See the Cognitive Services security article for more information.

애플리케이션의 main 메서드에서 이 빠른 시작에서 사용되는 메서드에 대한 호출을 추가합니다.In the application's main method, add calls for the methods used in this quickstart. 나중에 이를 정의합니다.You'll define these later.

public static void main(String[] args) {
    
    System.out.println("\nAzure Cognitive Services Computer Vision - Java Quickstart Sample");

    // Create an authenticated Computer Vision client.
    ComputerVisionClient compVisClient = Authenticate(subscriptionKey, endpoint); 

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

    // Read from local file
    ReadFromFile(compVisClient);
}

개체 모델Object model

Computer Vision Java SDK의 주요 기능 중 일부를 처리하는 클래스와 인터페이스는 다음과 같습니다.The following classes and interfaces handle some of the major features of the Computer Vision Java SDK.

NameName DescriptionDescription
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 이 열거형은 표준 Analyze(분석) 작업에서 수행할 수 있는 다양한 유형의 이미지 분석을 정의합니다.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

새 메서드에서 엔드포인트와 키를 사용하여 ComputerVisionClient 개체를 인스턴스화합니다.In a new method, instantiate a ComputerVisionClient object with your endpoint and key.

public static ComputerVisionClient Authenticate(String subscriptionKey, String endpoint){
    return ComputerVisionManager.authenticate(subscriptionKey).withEndpoint(endpoint);
}

이미지 분석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.

URL을 사용하여 원격 이미지를 분석할 수도 있습니다.You can also analyze a remote image using its URL. ComputerVision 메서드(예: AnalyzeImage)를 참조하세요.See the ComputerVision methods, such as AnalyzeImage. 또는 원격 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, see the sample code on GitHub for scenarios involving remote images.

테스트 이미지 설정Set up test image

먼저, resources/ 폴더를 프로젝트의 src/main/ 폴더에 만들고, 분석하려는 이미지를 추가합니다.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의 값을 변경합니다.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.png";

시각적 기능 지정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. 이 섹션에서는 로컬 파일 경로를 사용하고 이미지의 텍스트를 콘솔에 인쇄하는 ReadFromFile 메서드를 정의합니다.This section defines a method, ReadFromFile, that takes a local file path and prints the image's text to the console.

URL에서 참조하는 원격 이미지의 텍스트를 읽을 수도 있습니다.You can also read text in a remote image referenced by URL. ComputerVision 메서드(예: read)를 참조하세요.See the ComputerVision methods, such as read. 또는 원격 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, see the sample code on GitHub for scenarios involving remote images.

테스트 이미지 설정Set up test image

resources/ 폴더를 프로젝트의 src/main/ 폴더에 만들고, 텍스트를 읽을 이미지를 추가합니다.Create a resources/ folder in the src/main/ folder of your project, and add an image you'd like to read text from. 샘플 이미지를 다운로드하여 여기에서 사용할 수 있습니다.You can download a sample image to use here.

그런 다음, 다음 메서드 정의를 ComputerVisionQuickstarts 클래스에 추가합니다.Then add the following method definition to your ComputerVisionQuickstarts class. 이미지 파일과 일치하도록 localFilePath의 값을 변경합니다.Change the value of the localFilePath to match your image file.

/**
 * READ : Performs a Read Operation on a local image
 * @param client instantiated vision client
 * @param localFilePath local file path from which to perform the read operation against
 */
private static void ReadFromFile(ComputerVisionClient client) {
    System.out.println("-----------------------------------------------");
    
    String localFilePath = "src\\main\\resources\\myImage.png";
    System.out.println("Read with local file: " + localFilePath);

읽기 API 호출Call the Read API

그런 후, 다음 코드를 추가하여 지정된 이미지에 대해 readInStreamWithServiceResponseAsync 메서드를 호출합니다.Then, add the following code to call the readInStreamWithServiceResponseAsync method for the given image.


try {
    File rawImage = new File(localFilePath);
    byte[] localImageBytes = Files.readAllBytes(rawImage.toPath());

    // Cast Computer Vision to its implementation to expose the required methods
    ComputerVisionImpl vision = (ComputerVisionImpl) client.computerVision();

    // Read in remote image and response header
    ReadInStreamHeaders responseHeader =
            vision.readInStreamWithServiceResponseAsync(localImageBytes, OcrDetectionLanguage.FR)
                .toBlocking()
                .single()
                .headers();

다음 코드 블록은 읽기 호출의 응답에서 작업 ID를 추출합니다.The following block of code extracts the operation ID from the response of the Read call. 이 ID를 도우미 메서드와 함께 사용하여 텍스트 읽기 결과를 콘솔에 인쇄합니다.It uses this ID with a helper method to print the text read results to the console.

// Extract the operationLocation from the response header
String operationLocation = responseHeader.operationLocation();
System.out.println("Operation Location:" + operationLocation);

getAndPrintReadResult(vision, operationLocation);

try/catch 블록과 메서드 정의를 닫습니다.Close out the try/catch block and the method definition.


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

읽기 결과 가져오기Get Read results

그런 다음, 도우미 메서드에 대한 정의를 추가합니다.Then, add a definition for the helper method. 이 메서드는 이전 단계의 작업 ID를 사용하여 읽기 작업을 쿼리하고 사용할 수 있을 때 OCR 결과를 가져옵니다.This method uses the operation ID from the previous step to query the read operation and get OCR results when they're available.

/**
 * Polls for Read result and prints results to console
 * @param vision Computer Vision instance
 * @return operationLocation returned in the POST Read response header
 */
private static void getAndPrintReadResult(ComputerVision vision, String operationLocation) throws InterruptedException {
    System.out.println("Polling for Read results ...");

    // Extract OperationId from Operation Location
    String operationId = extractOperationIdFromOpLocation(operationLocation);

    boolean pollForResult = true;
    ReadOperationResult readResults = null;

    while (pollForResult) {
        // Poll for result every second
        Thread.sleep(1000);
        readResults = vision.getReadResult(UUID.fromString(operationId));

        // The results will no longer be null when the service has finished processing the request.
        if (readResults != null) {
            // Get request status
            OperationStatusCodes status = readResults.status();

            if (status == OperationStatusCodes.FAILED || status == OperationStatusCodes.SUCCEEDED) {
                pollForResult = false;
            }
        }
    }

나머지 메서드는 OCR 결과를 구문 분석하여 콘솔에 인쇄합니다.The rest of the method parses the OCR results and prints them to the console.

    // Print read results, page per page
    for (ReadResult pageResult : readResults.analyzeResult().readResults()) {
        System.out.println("");
        System.out.println("Printing Read results for page " + pageResult.page());
        StringBuilder builder = new StringBuilder();

        for (Line line : pageResult.lines()) {
            builder.append(line.text());
            builder.append("\n");
        }

        System.out.println(builder.toString());
    }
}

마지막으로, 위에서 사용된 다른 도우미 메서드를 추가합니다. 이 메서드는 초기 응답에서 작업 ID를 추출합니다.Finally, add the other helper method used above, which extracts the operation ID from the initial response.

/**
 * Extracts the OperationId from a Operation-Location returned by the POST Read operation
 * @param operationLocation
 * @return operationId
 */
private static String extractOperationIdFromOpLocation(String operationLocation) {
    if (operationLocation != null && !operationLocation.isEmpty()) {
        String[] splits = operationLocation.split("/");

        if (splits != null && splits.length > 0) {
            return splits[splits.length - 1];
        }
    }
    throw new IllegalStateException("Something went wrong: Couldn't extract the operation id from the operation location");
}

애플리케이션 실행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

  • Azure 구독 - 체험 구독 만들기An Azure subscription - Create one for free
  • 현재 버전의 Node.jsThe current version of Node.js
  • Azure 구독을 보유한 후에는 Azure Portal에서 Computer Vision 리소스 를 만들어 키와 엔드포인트를 가져옵니다.Once you have your Azure subscription, create a Computer Vision resource in the Azure portal to get your key and endpoint. 배포 후 리소스로 이동 을 클릭합니다.After it deploys, click Go to resource.
    • 애플리케이션을 Computer Vision 서비스에 연결하려면 만든 리소스의 키와 엔드포인트가 필요합니다.You will need the key and endpoint from the resource you create to connect your application to the Computer Vision service. 이 빠른 시작의 뒷부분에 나오는 코드에 키와 엔드포인트를 붙여넣습니다.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.

설치Setting up

새 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

package.json 파일을 사용하여 노드 애플리케이션을 만들려면 npm init 명령을 실행합니다.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 package:

npm install @azure/cognitiveservices-computervision

종속성이 있는 앱의 package.json 파일이 업데이트됩니다.Your app's package.json file will be updated with the dependencies.

새 파일, 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 https = require('https');
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;

한 번에 전체 빠른 시작 코드 파일을 보시겠습니까?Want to view the whole quickstart code file at once? GitHub에서 찾을 수 있으며 이 빠른 시작의 코드 예제를 포함합니다.You can find it on GitHub, which contains the code examples in this quickstart.

리소스의 Azure 엔드포인트 및 키에 대한 변수를 만듭니다.Create variables for your resource's Azure endpoint and key.

/**
 * AUTHENTICATE
 * This single client is used for all examples.
 */
const key = '<your subscription key>';
const endpoint = '<your api endpoint>';

중요

Azure Portal로 이동합니다.Go to the Azure portal. 필수 구성 요소 섹션에서 만든 [제품 이름] 리소스가 성공적으로 배포된 경우 다음 단계 아래에서 리소스로 이동 단추를 클릭합니다.If the [Product name] resource you created in the Prerequisites section deployed successfully, click the Go to Resource button under Next Steps. 리소스 관리 아래에 있는 리소스의 키 및 엔드포인트 페이지에서 키 및 엔드포인트를 찾을 수 있습니다.You can find your key and endpoint in the resource's key and endpoint page, under resource management.

완료되면 코드에서 키를 제거하고 공개적으로 게시하지 마세요.Remember to remove the key from your code when you're done, and never post it publicly. 프로덕션의 경우 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용하는 것이 좋습니다.For production, consider using a secure way of storing and accessing your credentials. 자세한 내용은 Cognitive Services 보안 문서를 참조하세요.See the Cognitive Services security article for more information.

개체 모델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.

NameName DescriptionDescription
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 이 열거형은 표준 Analyze(분석) 작업에서 수행할 수 있는 다양한 유형의 이미지 분석을 정의합니다.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

엔드포인트 및 키를 사용하여 클라이언트를 인스턴스화합니다.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.

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

그런 다음, computerVision 함수를 정의하고 기본 함수 및 콜백 함수를 사용하여 비동기 계열을 선언합니다.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. 이 빠른 시작의 나머지 코드는 computerVision 함수 안으로 이동합니다.The rest of the code in this quickstart goes inside the computerVision function.

function computerVision() {
  async.series([
    async function () {

    },
    function () {
      return new Promise((resolve) => {
        resolve();
      })
    }
  ], (err) => {
    throw (err);
  });
}

computerVision();

이미지 분석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. ComputerVisionClient 메서드(예: analyzeImageInStream)를 참조하세요.See the ComputerVisionClient methods, such as analyzeImageInStream. 또는 로컬 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, 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:

const describeURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/celebrities.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());
const 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());
const 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());
const 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());
const 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 (const 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 to return the top, left, bottom, and right coordinates, along with the width and height.

// 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());
const 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 (const 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.
const 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 (const 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());
const 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();
const 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());
const 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 (const 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());
const 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 extract the visible text in an image and convert it to a character stream. 이 샘플에서는 읽기 작업을 사용합니다.This sample uses the Read operations.

테스트 이미지 설정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/or handwritten text. 
// The URL can point to image files (.jpg/.png/.bmp) or multi-page files (.pdf, .tiff).
const printedTextSampleURL = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample2.jpg';
const multiLingualTextURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/MultiLingual.png';
const mixedMultiPagePDFURL = 'https://raw.githubusercontent.com/Azure-Samples/cognitive-services-sample-data-files/master/ComputerVision/Images/MultiPageHandwrittenForm.pdf';

참고

로컬 이미지에서 텍스트를 읽을 수도 있습니다.You can also read text from a local image. ComputerVisionClient 메서드(예: readInStream)를 참조하세요.See the ComputerVisionClient methods, such as readInStream. 또는 로컬 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, see the sample code on GitHub for scenarios involving local images.

읽기 API 호출Call the Read API

함수에서 다음 필드를 정의하여 읽기 호출 상태 값을 표시합니다.Define the following fields in your function to denote the Read call status values.

// Status strings returned from Read API. NOTE: CASING IS SIGNIFICANT.
// Before Read 3.0, these are "Succeeded" and "Failed"
const STATUS_SUCCEEDED = "succeeded";
const STATUS_FAILED = "failed"

지정된 이미지에 대해 readTextFromURL 함수를 호출하는 아래 코드를 추가합니다.Add the code below, which calls the readTextFromURL function for the given images.

// Recognize text in printed image from a URL
console.log('Read printed text from URL...', printedTextSampleURL.split('/').pop());
const printedResult = await readTextFromURL(computerVisionClient, printedTextSampleURL);
printRecText(printedResult);

// Recognize multi-lingual text in a PNG from a URL
console.log('\nRead printed multi-lingual text in a PNG from URL...', multiLingualTextURL.split('/').pop());
const multiLingualResult = await readTextFromURL(computerVisionClient, multiLingualTextURL);
printRecText(multiLingualResult);

// Recognize printed text and handwritten text in a PDF from a URL
console.log('\nRead printed and handwritten text from a PDF from URL...', mixedMultiPagePDFURL.split('/').pop());
const mixedPdfResult = await readTextFromURL(computerVisionClient, mixedMultiPagePDFURL);
printRecText(mixedPdfResult);

readTextFromURL 함수를 정의합니다.Define the readTextFromURL function. 클라이언트 개체에서 read 메서드를 호출합니다. 이는 작업 ID를 반환하고 이미지의 콘텐츠를 읽는 비동기 프로세스를 시작합니다.This call thes read method on the client object, which returns an operation ID and starts an asynchronous process to read the content of the image. 그런 다음, 작업 ID를 사용하여 결과가 반환될 때까지 작업 상태를 확인합니다.Then it uses the operation ID to check the operation status until the results are returned. 추출된 결과를 반환합니다.They it returns the extracted results.

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

  // Wait for read recognition to complete
  // result.status is initially undefined, since it's the result of read
  while (result.status !== STATUS_SUCCEEDED) { await sleep(1000); result = await client.getReadResult(operation); }
  return result.analyzeResult.readResults; // Return the first page of result. Replace [0] with the desired page if this is a multi-page file such as .pdf or .tiff.
}

그런 다음, 읽기 작업의 결과를 콘솔에 출력하는 printRecText 도우미 함수를 정의합니다.Then, define the helper function printRecText, which prints the results of the Read operations to the console.

// Prints all text from Read result
function printRecText(readResults) {
  console.log('Recognized text:');
  for (const page in readResults) {
    if (readResults.length > 1) {
      console.log(`==== Page: ${page}`);
    }
    const result = readResults[page];
    if (result.lines.length) {
      for (const line of result.lines) {
        console.log(line.words.map(w => w.text).join(' '));
      }
    }
    else { console.log('No recognized text.'); }
  }
}

애플리케이션 실행Run the application

quickstart 파일의 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

  • Azure 구독 - 체험 구독 만들기An Azure subscription - Create one for free
  • Python 3.xPython 3.x
  • Azure 구독을 보유한 후에는 Azure Portal에서 Computer Vision 리소스 를 만들어 키와 엔드포인트를 가져옵니다.Once you have your Azure subscription, create a Computer Vision resource in the Azure portal to get your key and endpoint. 배포 후 리소스로 이동 을 클릭합니다.After it deploys, click Go to resource.
    • 애플리케이션을 Computer Vision 서비스에 연결하려면 만든 리소스의 키와 엔드포인트가 필요합니다.You will need the key and endpoint from the resource you create to connect your application to the Computer Vision service. 이 빠른 시작의 뒷부분에 나오는 코드에 키와 엔드포인트를 붙여넣습니다.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.

설치Setting up

클라이언트 라이브러리 설치Install the client library

다음을 사용하여 클라이언트 라이브러리를 설치할 수 있습니다.You can install the client library with:

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

새 Python 애플리케이션 만들기Create a new Python application

예를 들어 새 Python 파일(—quickstart-file.py)을 만듭니다.Create a new Python file—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 OperationStatusCodes
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

한 번에 전체 빠른 시작 코드 파일을 보시겠습니까?Want to view the whole quickstart code file at once? GitHub에서 찾을 수 있으며 이 빠른 시작의 코드 예제를 포함합니다.You can find it on GitHub, which contains the code examples in this quickstart.

그런 다음, 리소스의 Azure 엔드포인트 및 키에 대한 변수를 만듭니다.Then, create variables for your resource's Azure endpoint and key.

subscription_key = "<your subscription key>"
endpoint = "<your API endpoint>"

중요

Azure Portal로 이동합니다.Go to the Azure portal. 필수 구성 요소 섹션에서 만든 Computer Vision 리소스가 성공적으로 배포된 경우 다음 단계 아래에서 리소스로 이동 단추를 클릭합니다.If the Computer Vision resource you created in the Prerequisites section deployed successfully, click the Go to Resource button under Next Steps. 리소스 관리 아래에 있는 리소스의 키 및 엔드포인트 페이지에서 키 및 엔드포인트를 찾을 수 있습니다.You can find your key and endpoint in the resource's key and endpoint page, under resource management.

완료되면 코드에서 키를 제거하고 공개적으로 게시하지 마세요.Remember to remove the key from your code when you're done, and never post it publicly. 프로덕션의 경우 자격 증명을 안전하게 저장하고 액세스하는 방법을 사용하는 것이 좋습니다.For production, consider using a secure way of storing and accessing your credentials. 예를 들어 Azure Key Vault입니다.For example, Azure key vault.

개체 모델Object model

Computer Vision Python SDK의 주요 기능 중 일부를 처리하는 클래스와 인터페이스는 다음과 같습니다.The following classes and interfaces handle some of the major features of the Computer Vision Python SDK.

NameName DescriptionDescription
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 이 열거형은 표준 Analyze(분석) 작업에서 수행할 수 있는 다양한 유형의 이미지 분석을 정의합니다.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

엔드포인트 및 키를 사용하여 클라이언트를 인스턴스화합니다.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

클라이언트 개체를 사용하여 원격 이미지의 시각적 기능을 분석합니다.Use your client object to analyze the visual features of a remote image. 먼저 분석하려는 이미지의 URL에 대한 참조를 저장합니다.First 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"

로컬 이미지를 분석할 수도 있습니다.You can also analyze a local image. ComputerVisionClientOperationsMixin 메서드(예: analyze_image_in_stream)를 참조하세요.See the ComputerVisionClientOperationsMixin methods, such as analyze_image_in_stream. 또는 로컬 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, 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.

'''
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. 이 작업을 두 부분에서 수행합니다.You do this in two parts.

읽기 API 호출Call the Read API

먼저 다음 코드를 사용하여 지정된 이미지에 대한 읽기 메서드를 호출합니다.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 handwritten text - remote
This example will extract handwritten 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 handwritten text
remote_image_handw_text_url = "https://raw.githubusercontent.com/MicrosoftDocs/azure-docs/master/articles/cognitive-services/Computer-vision/Images/readsample.jpg"

# Call API with URL and raw response (allows you to get the operation location)
recognize_handw_results = computervision_client.read(remote_image_handw_text_url,  raw=True)

로컬 이미지에서 텍스트를 읽을 수도 있습니다.You can also read text from a local image. ComputerVisionClientOperationsMixin 메서드(예: read_in_stream)를 참조하세요.See the ComputerVisionClientOperationsMixin methods, such as read_in_stream. 또는 로컬 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, see the sample code on GitHub for scenarios involving local images.

읽기 결과 가져오기Get Read results

그런 다음, 읽기 호출에서 반환된 작업 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_handw_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_handw_text_results = computervision_client.get_read_result(operation_id)
    if get_handw_text_results.status not in ['notStarted', 'running']:
        break
    time.sleep(1)

# Print the detected text, line by line
if get_handw_text_results.status == OperationStatusCodes.succeeded:
    for text_result in get_handw_text_results.analyze_result.read_results:
        for line in text_result.lines:
            print(line.text)
            print(line.bounding_box)
print()

애플리케이션 실행Run the application

quickstart 파일의 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

  • Azure 구독 - 체험 구독 만들기An Azure subscription - Create one for free
  • 최신 버전의 GoThe latest version of Go
  • Azure 구독을 보유한 후에는 Azure Portal에서 Computer Vision 리소스 를 만들어 키와 엔드포인트를 가져옵니다.Once you have your Azure subscription, create a Computer Vision resource in the Azure portal to get your key and endpoint. 배포 후 리소스로 이동 을 클릭합니다.After it deploys, click Go to resource.
    • 애플리케이션을 Computer Vision 서비스에 연결하려면 만든 리소스의 키와 엔드포인트가 필요합니다.You will need the key and endpoint from the resource you create to connect your application to the Computer Vision service. 이 빠른 시작의 뒷부분에 나오는 코드에 키와 엔드포인트를 붙여넣습니다.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.
  • 각각 COMPUTER_VISION_SUBSCRIPTION_KEYCOMPUTER_VISION_ENDPOINT라는 키 및 서비스 엔드포인트 URL에 대한 환경 변수를 만듭니다.Create environment variables for the key and endpoint URL, named COMPUTER_VISION_SUBSCRIPTION_KEY and COMPUTER_VISION_ENDPOINT, respectively.

설치Setting up

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

작업 영역에는 다음 세 개의 폴더가 있습니다.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.

NameName DescriptionDescription
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 이 형식에는 AnalyzeImage 함수 호출의 결과가 포함됩니다.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_KEYCOMPUTER_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. 이 URL을 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. BaseClient 메서드(예: DescribeImageInStream)를 참조하세요.See the BaseClient methods, such as DescribeImageInStream. 또는 로컬 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, 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. BaseClient 메서드(예: BatchReadFileInStream)를 참조하세요.See the BaseClient methods, such as BatchReadFileInStream. 또는 로컬 이미지와 관련된 시나리오는 GitHub의 샘플 코드를 참조하세요.Or, see the sample code on GitHub for scenarios involving local images.

읽기 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