다중 모달 포함을 사용하여 이미지 검색 수행(버전 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 명령을 다음과 같이 변경합니다.
<endpoint>
을 Azure AI 비전 엔드포인트로 바꿉니다.<subscription-key>
을 Azure AI 비전 키로 바꿉니다.- 요청 본문에서
"url"
을 사용하려는 원격 이미지의 URL로 설정합니다. - 필요에 따라
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 명령을 다음과 같이 변경합니다.
<endpoint>
을 Azure AI 비전 엔드포인트로 바꿉니다.<subscription-key>
을 Azure AI 비전 키로 바꿉니다.- 요청 본문에서
"text"
를 사용하려는 예제 검색어로 설정합니다. - 필요에 따라
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);
}