なっく日報

技術やら生活やらのメモ

Google Cloud Vision APIを試してみた

画像を送ったら、画像の中身を解析して、顔とか物とかを判別してJSONで返してくれるというヤツです。

昼休みにざっくりと触ってみたのでメモ。

下準備

こちらのブログが詳しく、大変参考にさせていただいたのでみてください(雑)

syncer.jp

ざっくりいうと

  1. GCPのプロジェクトを作成
  2. API ManagerからCloud Vision APIを有効化
  3. API キーを作成

というくらい。

料金表によると、月1000リクエストまでは無料っぽいですが、クラウド破産が怖い場合、上記の記事を参考にアラートを飛ぶようにしたほうがよいでしょう(私はアラートが飛ぶようにしましたw)

プログラム

APIキーを付けたCloud Vision APIのURLにbase64エンコードした画像ファイルをJSON形式でPOSTするだけです。

ワンライナーでもいけますが、見づらいのでシェルスクリプトにしておきました。

今回使用した画像はこちら(私のネット上でのアイコンです。スクリプト中のyukidarake.jpeg

f:id:nakimura:20160511192234j:plain

なお、風景写真から物を認識させるとか、人物写真から顔を認識させるのはfeaturesに指定した項目で変わるよう。

今回はLABEL_DETECTIONにしてみました(顔っぽいので、FACE_DETECTIONにしたら結果は空だった・・・)

#!/bin/bash
set -ue

BODY=$(cat <<JSON
{
  "requests": {
    "image":{
      "content": "$(base64 yukidarake.jpeg)"
    },
    "features": [
      {
        "type": "LABEL_DETECTION",
        "maxResults": 20
      }
    ]
  }
}
JSON
)

echo $BODY | curl \
  -H "Accept: application/json" \
  -H "Content-type: application/json" \
  -X POST \
  -d @- \
  https://vision.googleapis.com/v1/images:annotate?key=API_KEY

実行すると・・・

./vision.sh

こんな結果が。

{
  "responses": [
    {
      "labelAnnotations": [
        {
          "mid": "/m/0j272k5",
          "description": "eyewear",
          "score": 0.95789468
        },
        {
          "mid": "/m/0h8jxfl",
          "description": "vision care",
          "score": 0.93333292
        },
        {
          "mid": "/m/0jyfg",
          "description": "glasses",
          "score": 0.89535505
        },
        {
          "mid": "/m/0c_jw",
          "description": "furniture",
          "score": 0.84084433
        },
        {
          "mid": "/m/0b_rs",
          "description": "swimming pool",
          "score": 0.82729644
        },
        {
          "mid": "/m/04f6rz",
          "description": "turquoise",
          "score": 0.82495272
        },
        {
          "mid": "/m/0h8lg0g",
          "description": "eye glass accessory",
          "score": 0.799998
        },
        {
          "mid": "/m/02_n6y",
          "description": "goggles",
          "score": 0.77193254
        },
        {
          "mid": "/m/02crq1",
          "description": "couch",
          "score": 0.62357479
        },
        {
          "mid": "/m/01mzpv",
          "description": "chair",
          "score": 0.59412205
        }
      ]
    }
  ]
}

メガネは認識できているよう。

swimming pool って・・・

青っぽい画像のシマシマがスイムレーンだと誤って検出されたのでしょう。

まとめ

あんま例がよくなかった気がしますが、いろんな可能性が感じられて楽しいです。

実は、他の画像ではもうちょいうまく検出できました(著作権が気になったので自分のアイコンにしてしまいました。。)

興味持った方は、ぜひ、一度お試しください。