LoginSignup
3

More than 5 years have passed since last update.

GoogleのCloudVisionAPIを簡単に試してみる

Posted at

(著:塩崎)

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を試してみました。

sumo.jpg

結果は、以下の通り。

{
  "responses": [
    {
      "safeSearchAnnotation": {
        "adult": "VERY_LIKELY",
        "spoof": "VERY_UNLIKELY",
        "medical": "UNLIKELY",
        "violence": "UNLIKELY"
      }
    }
  ]
}

adultが"VERY_LIKELY"となっており、アダルト判定されました。。。
確かに見事な巨乳ですからね(笑)。。。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3