자습서: 이미지 인사이트 토큰을 사용하여 이전 검색에서 유사한 이미지 찾기
경고
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
- Visual Studio의 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 메뉴에서 NuGet 패키지 관리를 선택합니다.
Azure 리소스 만들기
다음 Azure 리소스 중 하나를 만들어 Bing Visual Search API 사용을 시작합니다.
- 리소스를 삭제할 때까지 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 |
위에 표시된 대로 TopicResults
및 ImageResults
유형에는 관련 이미지에 대한 쿼리가 포함됩니다. Bing Search 결과에 대한 URL 링크입니다.