(著:塩崎)
GoogleCloudVisionAPIの簡単な使い方です。
オフィシャルなドキュメントだと画像ファイルのパスとAPI種別を記載した
CSVを作成してそれを読み込んで処理するようになっているのですが、
とりあえずすぐに試したい場合は回りくどいので、直接画像ファイルを
指定してすぐに結果が試せるようにしてみました。
事前準備
1.コンソールにてアカウント作成
2.APIをイネーブル化
3.APIキーを取得
詳細は下記サイトなどの情報を参考にしてください。
・GoogleCloudVisionをPythonで試すための最初の手順
[https://qiita.com/bobu_web/items/0fe215a26ecd4c883aab]
APIを叩いてみる
APIキーを取得できたら、画像を用意して下記のコードを
実行すれば、結果のJSONファイルが表示されます。
画像はコードと同じフォルダに置いてください。
処理の流れとしては、画像ファイルを読み込んで
Base64でエンコードし、APIコール用のJSONファイルを
作成してPOSTするだけのシンプルなコードです。
'''
Google Cloud Vision API T.shiozaki
'''
import base64
import datetime
import json
import requests
def makeJson(fpath, feature=0, max_results=10):
with open(fpath, 'rb') as image_file:
content_json = {
'content': base64.b64encode(image_file.read()).decode('UTF-8')
}
feature_json = {
'type': get_detection_type(feature),
'maxResults': int(max_results),
}
request = {
'features': feature_json,
'image': content_json,
}
return {'requests': request}
#検出APIの種類一覧(0~10で指定)
DETECTION_TYPES = [
'TYPE_UNSPECIFIED',
'FACE_DETECTION',
'LANDMARK_DETECTION',
'LOGO_DETECTION',
'LABEL_DETECTION',
'TEXT_DETECTION',
'SAFE_SEARCH_DETECTION',
'DOCUMENT_TEXT_DETECTION',
'IMAGE_PROPERTIES',
'CROP_HINTS',
'WEB_DETECTION'
]
def get_detection_type(detect_num):
detect_num = int(detect_num)
if 0 < detect_num < len(DETECTION_TYPES):
return DETECTION_TYPES[detect_num]
else:
return DETECTION_TYPES[0]
def detect(fpath, feature=0, max_results=10):
api_key = '***********' #ここに自分で取得したAPIキーを記載する
api_url = 'https://vision.googleapis.com/v1/images:annotate?key=' + api_key
json_data = json.dumps(makeJson(fpath, feature, max_results))
headers = {'Content-Type': 'application/json'}
response = requests.post(url=api_url, data=json_data, headers=headers)
return response.text
if __name__ == '__main__':
print(detect('sample.jpg', 4, 50)) #引数:画像へのパス、検出用API種別ID、最大件数
結果
試しに、下記の力士の画像でSAFE_SEARCH_DETECTIONを試してみました。
結果は、以下の通り。
{
"responses": [
{
"safeSearchAnnotation": {
"adult": "VERY_LIKELY",
"spoof": "VERY_UNLIKELY",
"medical": "UNLIKELY",
"violence": "UNLIKELY"
}
}
]
}
adultが"VERY_LIKELY"となっており、アダルト判定されました。。。
確かに見事な巨乳ですからね(笑)。。。