다중 모달 포함을 사용하여 이미지 검색 수행(버전 4.0)

다중 모달 포함 API를 사용하면 이미지 및 텍스트 쿼리를 벡터화할 수 있습니다. 이미지를 다차원 벡터 공간의 좌표로 변환합니다. 그런 다음 들어오는 텍스트 쿼리도 벡터로 변환할 수 있으며 의미 체계 근접성을 기반으로 이미지를 텍스트와 일치시킬 수 있습니다. 이를 통해 사용자는 이미지 태그나 기타 메타데이터를 사용할 필요 없이 텍스트를 사용하여 이미지 집합을 검색할 수 있습니다. 의미 체계 근접성은 검색에서 더 나은 결과를 생성하기도 합니다.

2024-02-01 API에는 102개 언어로 텍스트 검색을 지원하는 다국어 모델이 포함되어 있습니다. 원래의 영어 전용 모델도 여전히 사용할 수 있지만 동일한 검색 인덱스의 새 모델과 결합할 수는 없습니다. 영어 전용 모델을 사용하여 텍스트 및 이미지를 벡터화한 경우 이러한 벡터는 다국어 텍스트 및 이미지 벡터와 호환되지 않습니다.

Important

이러한 API는 미국 동부, 프랑스 중부, 한국 중부, 북유럽, 동남 아시아, 서유럽, 미국 서부 지역에서만 사용할 수 있습니다.

필수 조건

  • Azure 구독 - 체험 구독 만들기
  • Azure 구독을 만든 후에는 Azure Portal에서 Computer Vision 리소스를 만들어 키와 엔드포인트를 가져옵니다. 허용된 지리적 지역(미국 동부, 프랑스 중부, 한국 중부, 북유럽, 동남 아시아, 서유럽, 미국 서부) 중 하나에서 만들어야 합니다.
    • 배포 후 리소스로 이동을 선택합니다. 나중에 사용할 수 있도록 키와 엔드포인트를 임시 위치에 복사합니다.

다중 모달 포함 사용해 보기

Vision Studio를 사용하여 브라우저에서 다중 모달 포함 기능을 빠르고 쉽게 사용해 볼 수 있습니다.

Important

Vision Studio 환경은 500개 이미지로 제한됩니다. 더 큰 이미지 집합을 사용하려면 이 가이드의 API를 사용하여 사용자 고유의 검색 애플리케이션을 만듭니다.

이미지 벡터화 API 호출

retrieval:vectorizeImage API를 사용하면 이미지의 데이터를 벡터로 변환할 수 있습니다. 호출하려면 아래의 cURL 명령을 다음과 같이 변경합니다.

  1. <endpoint>을 Azure AI 비전 엔드포인트로 바꿉니다.
  2. <subscription-key>을 Azure AI 비전 키로 바꿉니다.
  3. 요청 본문에서 "url"을 사용하려는 원격 이미지의 URL로 설정합니다.
  4. 필요에 따라 model-version 매개 변수를 이전 버전으로 변경합니다. 2022-04-11은 영어 텍스트만 지원하는 레거시 모델입니다. 특정 모델로 벡터화된 이미지 및 텍스트는 다른 모델과 호환되지 않으므로 둘 다에 동일한 모델을 사용해야 합니다.
curl.exe -v -X POST "<endpoint>/computervision/retrieval:vectorizeImage?api-version=2024-02-01&model-version=2023-04-15" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: <subscription-key>" --data-ascii "
{
'url':'https://learn.microsoft.com/azure/ai-services/computer-vision/media/quickstarts/presentation.png'
}"

로컬 이미지를 벡터화하려면 HTTP 요청 본문에 이진 데이터를 넣습니다.

API 호출은 고차원 벡터 공간에서 이미지의 좌표를 정의하는 벡터 JSON 개체를 반환합니다.

{ 
  "modelVersion": "2022-04-11", 
  "vector": [ -0.09442752, -0.00067171326, -0.010985051, ... ] 
}

텍스트 벡터화 API 호출

retrieval:vectorizeText API를 사용하면 텍스트 문자열을 벡터로 변환할 수 있습니다. 호출하려면 아래의 cURL 명령을 다음과 같이 변경합니다.

  1. <endpoint>을 Azure AI 비전 엔드포인트로 바꿉니다.
  2. <subscription-key>을 Azure AI 비전 키로 바꿉니다.
  3. 요청 본문에서 "text"를 사용하려는 예제 검색어로 설정합니다.
  4. 필요에 따라 model-version 매개 변수를 이전 버전으로 변경합니다. 2022-04-11은 영어 텍스트만 지원하는 레거시 모델입니다. 특정 모델로 벡터화된 이미지 및 텍스트는 다른 모델과 호환되지 않으므로 둘 다에 동일한 모델을 사용해야 합니다.
curl.exe -v -X POST "<endpoint>/computervision/retrieval:vectorizeText?api-version=2024-02-01&model-version=2023-04-15" -H "Content-Type: application/json" -H "Ocp-Apim-Subscription-Key: <subscription-key>" --data-ascii "
{
'text':'cat jumping'
}"

API 호출은 고차원 벡터 공간에서 텍스트 문자열의 좌표를 정의하는 벡터 JSON 개체를 반환합니다.

{ 
  "modelVersion": "2022-04-11", 
  "vector": [ -0.09442752, -0.00067171326, -0.010985051, ... ] 
}

벡터 유사성 계산

코사인 유사성은 두 벡터의 유사성을 측정하는 방법입니다. 이미지 검색 시나리오에서는 검색 쿼리 벡터를 각 이미지의 벡터와 비교합니다. 특정 유사성 임계값을 초과하는 이미지를 검색 결과로 반환할 수 있습니다.

다음 예제 코드는 두 벡터 간의 코사인 유사성을 계산합니다. 이미지를 검색 결과로 반환하는 데 사용할 유사성 임계값을 결정하는 것은 사용자의 몫입니다.

public static float GetCosineSimilarity(float[] vector1, float[] vector2)
{ 
    float dotProduct = 0; 
    int length = Math.Min(vector1.Length, vector2.Length); 
    for (int i = 0; i < length; i++) 
    { 
        dotProduct += vector1[i] * vector2[i]; 
    } 
    float magnitude1 = Math.Sqrt(vector1.Select(x => x * x).Sum());
    float magnitude2 = Math.Sqrt(vector2.Select(x => x * x).Sum());
    
    return dotProduct / (magnitude1 * magnitude2);
}

다음 단계

이미지 검색 개념