빠른 시작: Bing Visual Search REST API 및 Python을 사용하여 이미지 인사이트 가져오기
경고
2020년 10월 30일에 Bing Search API가 Azure AI 서비스에서 Bing Search Services로 이동되었습니다. 이 문서는 참조용으로만 제공됩니다. 업데이트된 문서는 Bing search API 문서를 참조하세요. Bing 검색을 위한 새 Azure 리소스 만들기에 대한 지침은 Azure Marketplace를 통해 Bing Search 리소스 만들기를 참조하세요.
이 빠른 시작을 사용하여 Bing Visual Search API에 대한 첫 번째 호출을 수행할 수 있습니다. 이 Python 애플리케이션은 API에 이미지를 업로드하고 API에서 반환하는 정보를 표시합니다. 이 애플리케이션은 Python으로 작성되었지만, API는 대부분의 프로그래밍 언어와 호환되는 RESTful 웹 서비스입니다.
사전 요구 사항
Azure 리소스 만들기
다음 Azure 리소스 중 하나를 만들어 Bing Visual Search API 사용을 시작합니다.
- 리소스를 삭제할 때까지 Azure Portal을 통해 사용할 수 있습니다.
-
S9
가격 책정 계층을 선택합니다.
- 리소스를 삭제할 때까지 Azure Portal을 통해 사용할 수 있습니다.
- 여러 Azure AI 서비스에서 애플리케이션에 동일한 키와 엔드포인트를 사용합니다.
애플리케이션 초기화
선호하는 IDE 또는 편집기에서 새 Python 파일을 만들고, 다음
import
문을 추가합니다.import requests, json
구독 키, 엔드포인트 및 업로드할 이미지의 경로에 대한 변수를 만듭니다.
BASE_URI
값의 경우 다음 코드에서 글로벌 엔드포인트를 사용하거나 리소스의 Azure Portal에 표시되는 사용자 지정 하위 도메인 엔드포인트를 사용할 수 있습니다.BASE_URI = 'https://api.cognitive.microsoft.com/bing/v7.0/images/visualsearch' SUBSCRIPTION_KEY = 'your-subscription-key' imagePath = 'your-image-path'
로컬 이미지를 업로드할 때 양식 데이터에
Content-Disposition
헤더가 포함되어야 합니다. 해당name
매개 변수를 "이미지"로 설정하고filename
매개 변수를 이미지의 파일 이름으로 설정합니다. 양식의 콘텐츠는 이미지의 이진 데이터를 포함합니다. 업로드할 수 있는 최대 이미지 크기는 1MB입니다.--boundary_1234-abcd Content-Disposition: form-data; name="image"; filename="myimagefile.jpg" ÿØÿà JFIF ÖÆ68g-¤CWŸþ29ÌÄøÖ‘º«™æ±èuZiÀ)"óÓß°Î= ØJ9á+*G¦... --boundary_1234-abcd--
요청의 헤더 정보를 보관할 사전 개체를 만듭니다. 구독 키를 문자열
Ocp-Apim-Subscription-Key
에 바인딩합니다.HEADERS = {'Ocp-Apim-Subscription-Key': SUBSCRIPTION_KEY}
이미지를 포함할 또 다른 사전을 만듭니다. 이 사전은 사용자가 요청을 보낼 때 열리고 업로드됩니다.
file = {'image' : ('myfile', open(imagePath, 'rb'))}
JSON 응답 구문 분석
print_json()
이라는 메서드를 만들어 API 응답을 수락하고 JSON을 인쇄합니다.
def print_json(obj):
"""Print the object as json"""
print(json.dumps(obj, sort_keys=True, indent=2, separators=(',', ': ')))
요청 보내기
requests.post()
명령을 사용하여 Bing Visual Search API로 요청을 보냅니다. 엔드포인트, 헤더 및 파일 정보에 대한 문자열을 포함합니다.
print_json()
을 사용하여 response.json()
을 인쇄합니다.
try:
response = requests.post(BASE_URI, headers=HEADERS, files=file)
response.raise_for_status()
print_json(response.json())
except Exception as ex:
raise ex