Google Cloud Vision APIを使って画像解析を試してみた(with PHP)

スポンサーリンク

2016年2月19日にgoogleからGoogle Cloud Vision APIのベータ版がリリースされたので早速試してみました。Google Cloud Vision APIの仕様は https://cloud.google.com/vision/docs/getting-started で詳しく解説されていました。この公式ドキュメントを参考に構築していきたいと思います。

Google Cloud Vision APIとは?

Google Cloud Vision API 公式HP:https://cloud.google.com/vision/

Google Cloud Vision API は、強力な機械学習モデルの能力を活用することで、画像の内容を理解できるアプリケーションの開発を可能にします。Cloud Vision API は、画像を数千のカテゴリ(たとえば、「ヨット」「ライオン」「エッフェル塔」など)にすばやく分類する機能や、画像に映る個々の物体や人物の顔を検知する機能、画像に含まれる活字体の文字を認識して読み取る機能などを提供します。

画像を数千のカテゴリから解析。しかもその画像に映る人物の顔や文字を認識するとは、、、読んだだけで物凄い技術だと想像がつきます。どれくらいの精度があるのか気になるところです。

プロジェクトの作成

Google Cloud Vision APIを使用するためのプロジェクトを作成します。

まずは、下記URLへアクセスします。
https://console.cloud.google.com/home/

URLへアクセスすると下記画面に遷移するので、適当なプロジェクト名を入力します。ここでは「vision-project」とします。入力したら「作成」ボタンをクリックします。
スクリーンショット_2016-02-24_12_49_25

数秒待つとプロジェクトが出来上がります。
スクリーンショット_2016-02-24_12_52_54

これでGoogle Cloud Vision APIを設置するプロジェクトが出来上がりました。

Google Cloud Vision APIを使用可能状態にする

引き続き先ほど作成したプロジェクト上にGoogle Cloud Vision APIを使用する為の設定を行っていきます。

ページ上部にある検索ボックスに「vision」と入力します。すると候補として「Cloud Vision API」が出てくるので選択します。
スクリーンショット_2016-02-24_12_56_19

Cloud Vision APIのメイン画面が表示されますので、「Enable」をクリックして Google Cloud Vision APIを有効化します。
スクリーンショット_2016-02-19_16_17_27

Google Cloud Vision APIの有効化が終わったら「認証情報」をクリックして認証に進みます。
スクリーンショット_2016-02-19_16_17_55

認証情報を追加していきます。
使用するAPIに「Cloud Vision API」を、Google App Engine か Google Compute Engineを使用しましか?は、僕の場合は「いいえ」を選択しました。
スクリーンショット_2016-02-19_16_18_11

次にサービスアカウントの作成を行います。
「名前」に適当な名前を入力します。
「サービス アカウントID」は「名前」に追従して作成されます。
「キーのタイプ」にJSONを選択します。
スクリーンショット_2016-02-19_16_18_43

キーがダウンロードされます。
スクリーンショット_2016-02-19_16_19_12

これで Google Cloud Vision API の前準備が整いました。

APIキーの作成

次にGoogle Cloud Vision APIをWebから使うようにする為のAPIを発行します。

まずは、プロジェクトのトップ画面にアクセスして左上のバーガーマークをクリックします。
スクリーンショット_2016-02-24_12_52_54

メニューの一覧が表示されるので「API Manager」をクリックします。
スクリーンショット_2016-02-24_13_12_52

API Managerが表示されるので、左メニューに表示される「認証情報」をクリックします。
スクリーンショット_2016-02-24_13_15_26

認証情報ページに遷移したら青いボタンの「Create credentials」をクリック。クリックしたら表示される「API キー」をクリックします。
スクリーンショット_2016-02-24_13_17_51

続いて「ブラウザ キー」をクリックします。
認証情報_-_vision-project_と_Desktop

認証情報を入力します。
名前にはkey。受付URLは「*.iwasakiyouhei.com/*」とし、リクエスト元のURLをワイルドカード(アスタリスク)を使って設定しました。入力後「作成」ボタンをクリックします。
ブラウザ_API_キーの作成_-_vision-project

APIが出来上がりました。
認証情報_-_vision-project

これでGoogle Cloud Vision APIを使う準備が整いました。

PHPでGoogle Cloud Vision APIにリクエスト

PHPを使ってGoogle Cloud Vision APIにリクエストをしてみます。
※詳しくは公式ページに仕様書があります。https://cloud.google.com/vision/reference/rest/

Cloud Vision APIのPOST先は下記。

スタートアドレスは、https://vision.googleapis.com
POST先は、/v1/images:annotate
パラメーターとして、?key={先ほど作成したブラウザ キー}

つまり、https://vision.googleapis.com/v1/images:annotate?key={先ほど作成したブラウザ キー}をURLとしてPOSTリクエストをcurlを使って投げます。

下記のような感じでPHPでcurlを使ったリクエストプログラムを作ってみました。

$path = '{解析したい画像のパス}';

$result = curl_init();
// curl url
curl_setopt($result, CURLOPT_URL, "https://vision.googleapis.com/v1/images:annotate?key={先ほど作成したブラウザ キー}");
// post
curl_setopt($result,  CURLOPT_CUSTOMREQUEST, 'POST');
// --data-binary
curl_setopt($result, CURLOPT_BINARYTRANSFER, true);
// header
curl_setopt($result, CURLOPT_HTTPHEADER, array( "Content-Type: application/json" ));
// get response with text
curl_setopt($result, CURLOPT_RETURNTRANSFER, true);
// image file
$file_contents = base64_encode(file_get_contents($path));
$request = '{
             "requests": [
               {
                 "image": {
                   "content": "'. $file_contents .'"
                   },
                    "features": [
                      {
                        "type": "LABEL_DETECTION"
                        }
                     ]
               }
              ]
}';
curl_setopt($result, CURLOPT_POSTFIELDS, $request);

// result
$response = curl_exec($result);

16行目でgoogleさん側に送るリクエストのbodyを作成します。bodyの形式は決まっており、知りたい情報によって書き方は変わってきます。今回は画像認識を試すため、typeにLABEL_DETECTIONを指定しました。詳しくはMethod images.annotateに形式やパラメーターについて書かれています。
因みにリクエストは月に1,000まで無料のようです。

解析した結果は$responseに格納されます。

Google Cloud Vision APIで画像を解析してみる

実際に幾つかの画像を解析してみます。

まずは、先日の懇親会で食べたピザを。
IMG_4110

実行結果が下記。

string(656) "{
  "responses": [
    {
      "labelAnnotations": [
        {
          "mid": "/m/068_x",
          "description": "pizza cheese",
          "score": 0.99278331
        },
        {
          "mid": "/m/02q08p0",
          "description": "dish",
          "score": 0.99248034
        },
        {
          "mid": "/m/02wbm",
          "description": "food",
          "score": 0.97342283
        },
        {
          "mid": "/m/0663v",
          "description": "pizza",
          "score": 0.94042975
        },
        {
          "mid": "/m/09y2k2",
          "description": "italian food",
          "score": 0.8526212
        }
      ]
    }
  ]
}
"

おぉ、、「ピザ」って認識しています。他にも「イタリアンフード」までも。

続いて先日の勉強会の雰囲気を解析してみます。
12742442_1127407057270921_6165198724947006103_n

実行結果が下記。

string(424) "{
  "responses": [
    {
      "labelAnnotations": [
        {
          "mid": "/m/0191f8",
          "description": "learning",
          "score": 0.62902218
        },
        {
          "mid": "/m/07hs4p",
          "description": "course",
          "score": 0.57114625
        },
        {
          "mid": "/m/02jfc",
          "description": "education",
          "score": 0.54496908
        }
      ]
    }
  ]
}
"

「教育」や「学習」という結果が返ってきています。すごい。
この他にも画像から文字を読み取ったり、顔情報を取ったりしましたが、かなり精度は高かったです。ここまで精度が高いと色々なサービスに使えそうです。

Google Cloud Vision APIを試せる簡易システムを組んでみたので興味のある方は使ってみてください:)

※その月のリクエストが1,000を超えた場合はすみません。:( 無料枠が終了した為、一時クローズしました。

参考文献

CLOUD VISION API
Google Cloud Vision APIドキュメント

スポンサーリンク
スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク