다음을 통해 공유


자습서: 이미지 인사이트 토큰을 사용하여 이전 검색에서 유사한 이미지 찾기

경고

2020년 10월 30일에 Bing Search API가 Azure AI 서비스에서 Bing Search Services로 이동되었습니다. 이 문서는 참조용으로만 제공됩니다. 업데이트된 문서는 Bing search API 문서를 참조하세요. Bing 검색을 위한 새 Azure 리소스 만들기에 대한 지침은 Azure Marketplace를 통해 Bing Search 리소스 만들기를 참조하세요.

Visual Search 클라이언트 라이브러리를 통해 ImageInsightsToken을 반환하는 이전 검색에서 온라인으로 이미지를 찾을 수 있습니다. 이 애플리케이션은 ImageInsightsToken을 가져와 후속 검색에서 토큰을 사용합니다. 그런 다음, ImageInsightsToken을 Bing에 보내고 Bing Search URL 및 온라인에서 찾은 비슷한 이미지의 URL을 포함하는 결과를 반환합니다.

이 자습서에 대한 전체 소스 코드는 추가 오류 처리 및 주석과 함께 GitHub에서 찾을 수 있습니다.

사전 요구 사항

  • Visual Studio 2019의 모든 버전.
  • Linux/MacOS를 사용하는 경우 Mono를 사용하여 이 애플리케이션을 실행할 수 있습니다.
  • NuGet Visual Search 및 Image Search 패키지입니다.
    • Visual Studio의 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 메뉴에서 NuGet 패키지 관리를 선택합니다. Microsoft.Azure.CognitiveServices.Search.CustomSearch 패키지 및 Microsoft.Azure.CognitiveServices.Search.ImageSearch 패키지를 차례로 설치합니다. NuGet 패키지를 설치하면 다음도 설치됩니다.
      • Microsoft.Rest.ClientRuntime
      • Microsoft.Rest.ClientRuntime.Azure
      • Newtonsoft.Json

Azure 리소스 만들기

다음 Azure 리소스 중 하나를 만들어 Bing Visual Search API 사용을 시작합니다.

Bing Search v7 리소스

  • 리소스를 삭제할 때까지 Azure Portal을 통해 사용할 수 있습니다.
  • S9 가격 책정 계층을 선택합니다.

다중 서비스 리소스

  • 리소스를 삭제할 때까지 Azure Portal을 통해 사용할 수 있습니다.
  • 여러 Azure AI 서비스에서 애플리케이션에 동일한 키와 엔드포인트를 사용합니다.

Bing Image Search 클라이언트 라이브러리에서 ImageInsightsToken 가져오기

이 애플리케이션은 Bing Image Search 클라이언트 라이브러리를 통해 가져온 ImageInsightsToken을 사용합니다. 새 C# 콘솔 애플리케이션에서 클라이언트를 만들어 ImageSearchClient()를 사용하는 API를 호출합니다. 그런 다음, 쿼리와 함께 SearchAsync()를 사용합니다.

var client = new ImageSearchClient(new Microsoft.Azure.CognitiveServices.Search.ImageSearch.ApiKeyServiceClientCredentials(subKey));
var imageResults = client.Images.SearchAsync(query: "canadian rockies").Result;
Console.WriteLine("Search images for query \"canadian rockies\"");

imageResults.Value.First()를 사용하여 첫 번째 검색 결과를 저장한 다음, 이미지 인사이트의 ImageInsightsToken을 저장합니다.

String insightTok = "None";
if (imageResults.Value.Count > 0)
{
    var firstImageResult = imageResults.Value.First();
    insightTok = firstImageResult.ImageInsightsToken;
}
else
{
    insightTok = "None found";
    Console.WriteLine("Couldn't find image results!");
}

ImageInsightsToken은 요청에서 Bing Visual Search에 전송됩니다.

Visual Search 요청에 ImageInsightsToken 추가

Bing Visual Search의 응답에 포함된 ImageInsightsToken에서 ImageInfo 개체를 만들어 Visual Search 요청에 대한 ImageInsightsToken을 지정합니다.

ImageInfo ImageInfo = new ImageInfo(imageInsightsToken: insightsTok);

Bing Visual Search를 사용하여 ImageInsightsToken에서 이미지 찾기

VisualSearchRequest 개체는 검색할 ImageInfo의 이미지에 대한 정보를 포함합니다. VisualSearchMethodAsync() 메서드가 결과를 가져옵니다. 이미지는 토큰으로 표시되므로 이미지 이진을 제공할 필요가 없습니다.

VisualSearchRequest VisualSearchRequest = new VisualSearchRequest(ImageInfo);

var visualSearchResults = client.Images.VisualSearchMethodAsync(knowledgeRequest: VisualSearchRequest).Result;

Visual Search 결과 반복

Visual Search 결과는 ImageTag 개체입니다. 각 태그에는 ImageAction 개체의 목록이 포함됩니다. 각 ImageAction에는 작업 유형에 종속되는 값의 목록인 Data 필드가 포함됩니다. 예를 들어 visualSearchResults.Tags에서 ImageTag 개체를 반복하고, ImageAction 태그를 가져올 수 있습니다. 아래 샘플은 PagesIncluding 작업의 세부 정보를 출력합니다.

if (visualSearchResults.Tags.Count > 0)
{
    // List of tags
    foreach (ImageTag t in visualSearchResults.Tags)
    {
        foreach (ImageAction i in t.Actions)
        {
            Console.WriteLine("\r\n" + "ActionType: " + i.ActionType + " WebSearchURL: " + i.WebSearchUrl);

            if (i.ActionType == "PagesIncluding")
            {
                foreach (ImageObject o in (i as ImageModuleAction).Data.Value)
                {
                    Console.WriteLine("ContentURL: " + o.ContentUrl);
                }
            }
        }
    }
}

PagesIncluding ActionTypes

작업 유형에서 실제 이미지 URL을 가져오려면 값 목록이 있는 Data 요소를 포함하는 ImageModuleAction으로 ActionType을 읽는 캐스트가 필요합니다. 각 값은 이미지의 URL입니다. 다음은 PagesIncluding 동작 유형을 ImageModuleAction으로 캐스트하고 값을 읽습니다.

    if (i.ActionType == "PagesIncluding")
    {
        foreach(ImageObject o in (i as ImageModuleAction).Data.Value)
        {
            Console.WriteLine("ContentURL: " + o.ContentUrl);
        }
    }

이러한 데이터 형식에 대한 자세한 내용은 이미지 - Visual Search를 참조합니다.

반환된 URL

전체 애플리케이션은 다음 URL을 반환합니다.

ActionType URL
MoreSizes -> WebSearchUrl
VisualSearch -> WebSearchUrl
ImageById -> WebSearchUrl
RelatedSearches -> WebSearchUrl:
DocumentLevelSuggestions -> WebSearchUrl:
TopicResults -> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9& CID=1BA795A21EAF6A63175699B71FC36B7C&rd=1&h=BcQifmzdKFyyBusjLxxgO42kzq1Geh7RucVVqvH-900&v=1&r=https%3a%2f%2fwww.bing.com%2fdiscover%2fcanadian%2brocky&p=DevEx,5823.1
ImageResults -> WebSearchUrl https://www.bing.com/cr?IG=3E32CC6CA5934FBBA14ABC3B2E4651F9& CID=1BA795A21EAF6A63175699B71FC36B7C&rd=1&h=PV9GzMFOI0AHZp2gKeWJ8DcveSDRE3fP2jHDKMpJSU 8&v=1&r=https%3a%2f%2fwww.bing.com%2fimages%2fsearch%3fq%3doutdoor&p=DevEx,5831.1

위에 표시된 대로 TopicResultsImageResults 유형에는 관련 이미지에 대한 쿼리가 포함됩니다. Bing Search 결과에 대한 URL 링크입니다.

다음 단계