クイック スタート: 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 に画像をアップロードし、返される情報を表示します。 このアプリケーションは Python で記述されていますが、API はほとんどのプログラミング言語と互換性のある RESTful Web サービスです。
前提条件
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
パラメーターを "image" に設定し、filename
パラメーターをイメージのファイル名に設定します。 フォームの内容には、画像のバイナリ データが含まれます。 アップロードできる画像の最大サイズは 1 MB です。--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 応答を解析する
API 応答を受け入れる print_json()
というメソッドを作成し、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