Vision API

Google Vision APIのレスポンス結果のJSONをPHPで表示する方法

google-cloud-vision-アイキャッチ

こんにちは!

最近、というか昨日からGoogle Cloud Platformで提供されている画像認識ツール【Vision API】にハマっているゆーたろうです。

前回の記事で、Vision APIの解析プログラムをロリポップレンタルサーバーに設置し、動作を確認するところまで行いました。

そこで個人的に気になったのが「JSONの中身」です。

この構成を知っておくことで、どんな情報が取得されているのかが分かりますので、この記事ではVision APIから送られてくるレスポンスjsonの中身を見る方法を紹介していきます。

そもそもjsonとは?

最近のWeb業界をはじめとして、モダンなデータ送受信方法として多用されているファイル形式のことです。要はデータの集まりですね。

keyとなる名称と、dataとなる値のセットで保管されています。

※詳細は他のサイトでたくさん開設されていますので、そちらをご確認ください。

生のレスポンス結果を見てみる

jsonはただの文字列の集まりになっている配列です。

なので、PHPのvar_dump()やprint_r()を使うことで簡単にその中身を見ることができます。

if ($labels) {
    echo("Labels:" . PHP_EOL);
    foreach ($labels as $label) {
        echo($label->getDescription() . PHP_EOL);
    }

    print_r($label);
}

とした結果が以下の画像です。

google-vision-api-json-original

すごいですね、本当に生の値って感じがします。

そうなのです、Vision APIの場合送られてくるのはオブジェクト形式なのです。

もちろん、解読できればいいですが、人間には少しわかりずらいですし、何よりもっと見やすく表示させたいです。整形したりとかですね。

jsonをデコード→エンコードしたら表示できた

ネットでPHPを使いjsonを整形して表示させる方法を調べてみました。

検索ワード:php json 表示 整形

このサイトの方法を少し改変したところうまく行ったので紹介します。

jsonの文字列を整形した状態でviewに表示 – teratail

うまく表示できたソースです。

print "<pre>";
json_encode(json_decode(print_r($labels)), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);

print_r(json_encode(json_decode($labels), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_FORCE_OBJECT));

「$labels」にはVision APIのレスポンス結果がオブジェクト形式で入っているので、それを一度配列に変換します。

なぜなら、json_dencode()の第一引数は文字列であるからです。

もし、「json_decode($labels),・・・」というようにそのまま指定してしまうとこのようなワーニングが発生します。

Warning:  json_decode() expects parameter 1 to be string, object given in /home/users/0/pecori.jp-test0515/web/vision-api-test-25.php on line 25

このエラーは「引数には文字列型を指定してほしいけど、オブジェクト型がセットされているよ!」というものです。

参考:PHPエラー:json_decode() expects parameter 1 to be string, array given?

なのでprint_rで一度文字列型に直してから、引数にセットしています。

さて、それでは全体のプログラムです。

<?php
ini_set( 'display_errors', 1 );
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . __dir__ . '/*********.json');

require __DIR__ . '/vendor/autoload.php';
use Google\Cloud\Vision\V1\ImageAnnotatorClient;
 
$imageAnnotator = new ImageAnnotatorClient();

$imagepath="画像のフルパス.jpg";

$image = file_get_contents($imagepath);// file name

$response = $imageAnnotator->labelDetection($image);
$labels = $response->getLabelAnnotations();
 
if ($labels) {
    echo("Labels:" . PHP_EOL);
    foreach ($labels as $label) {
        echo($label->getDescription() . PHP_EOL);
    }

echo "<hr>";

//jsonを見やすく整形するHTMLタグ
print "<pre>";

//デコードして、エンコードすることで、表示できる
json_encode(json_decode(print_r($labels)), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);
print_r(json_encode(json_decode($labels), JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_FORCE_OBJECT));

print "</pre>";

} else {
    echo('No label found' . PHP_EOL);
}

実行してみるとこのようになります。

google-vision-api-json-after-decode-encode

いいですね!とても見やすいです。

まとめ

いかがだったでしょうか。

今回は、Vision APIのレスポンス結果であるjsonの中身を、形を整えて表示する方法を紹介しました。

PHPに備わっているメソッドを使うだけで簡単にjsonの整形ができます。

これからも益々、ICT業界では必須アイテムとなるjsonですので、使い方を覚えておくと便利だと思います。