Cloud Vison APIを触ってみた

# 概要

タイトル通り、GCPから提供されている[Cloud Vision API](https://cloud.google.com/vision/?hl=ja)で遊んでみたのでまと目てみます。

# Cloud Vision APIとは？

<b>GCPが提供している、学習済み機械学習モデルをAPIを通して利用できるもの！</b>

- ラベルの検出
- テキストの検出
- 場所の検出

等が出来ます。


# TEXT ANNOTATION

つかった画像はこちら

![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251929/57726fd0-2eb7-1bed-bdcd-801edd35ab85.png)


```php:text.php
<?php
    $apiKey = "Your API KEY";
    $imagePath = $argv[1] ;

    $json = json_encode([
        "requests" => [
            [
                "image" => [
                    "content" => base64_encode(file_get_contents($imagePath))
                ],
                "features" => [
                    [
                        "type" => "TEXT_DETECTION",// テキスト認識を選択
                    ]
                ]
            ]
        ]
    ]);

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "https://vision.googleapis.com/v1/images:annotate?key=" . $apiKey);
    curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

    $response = curl_exec($curl);
    $data = json_decode($response, true);
    curl_close($curl);

    echo $data["responses"][0]["fullTextAnnotation"]["text"];

```

コマンド上から下記のコマンドでレスポンスを得ることができます。

```
$ php text.php /path/to/image

画像から
文字起こし
```

きちんと、テキストを認識して返してくれました。

# LABEL ANNTATION


つかった画像はこちら

![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251929/57726fd0-2eb7-1bed-bdcd-801edd35ab85.png)


```php:label.php
<?php
    $apiKey = "Your API KEY";
    $imagePath = $argv[1] ;

    $json = json_encode([
        "requests" => [
            [
                "image" => [
                    "content" => base64_encode(file_get_contents($imagePath))
                ],
                "features" => [
                    [
                        "type" => "LABEL_DETECTION",// ラベル認識を選択
                        "maxResults" => 10,// 最大結果件数を選択
                    ]
                ]
            ]
        ]
    ]);

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "https://vision.googleapis.com/v1/images:annotate?key=" . $apiKey);
    curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

    $response = curl_exec($curl);
    $data = json_decode($response, true);
    curl_close($curl);

    foreach ($data["responses"][0]["labelAnnotations"] as $key => $value) {
        echo "descropiton: " . $value["description"] . "\n" . "score: " . $value["score"] . "\n\n";
    }

```



```
$ php label.php /path/to/image

descropiton: Font
score: 0.9693762

descropiton: Text
score: 0.9655209

descropiton: Calligraphy
score: 0.58965546

descropiton: Graphics
score: 0.5272959
```

ラベルの内容とスコア(信頼度)をセットで表示しています。

# LANDMARK ANNTATION


つかった画像はこちら


その１：エッフェル塔
![eiffel.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251929/6345a707-ffab-ea8e-0751-1a049e629d7a.jpeg)


その２：東京タワー
![tokyo-tower.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/251929/556f108b-a4ef-7341-7731-0da8be21cd49.jpeg)



```php:landmark.php
<?php
    $apiKey = "Your API KEY";
    $imagePath = $argv[1] ;

    $json = json_encode([
        "requests" => [
            [
                "image" => [
                    "content" => base64_encode(file_get_contents($imagePath))
                ],
                "features" => [
                    [
                        "type" => "LANDMARK_DETECTION",// ランドマーク認識を選択
                    ]
                ]
            ]
        ]
    ]);

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, "https://vision.googleapis.com/v1/images:annotate?key=" . $apiKey);
    curl_setopt($curl, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

    $response = curl_exec($curl);
    $data = json_decode($response, true);
    curl_close($curl);

    foreach ($data["responses"][0]["landmarkAnnotations"] as $key => $value) {
        echo "descropiton: " . $value["description"] . "\n" . "score: " . $value["score"] . "\n\n";
    }

```



```
$ php landmark.php /path/to/image/エッフェル塔

descropiton: Eiffel Tower
score: 0.8110765

$ php landmark.php /path/to/image/東京タワー


```

エッフェル塔は81％の信頼度で認識してくれました。
しかし東京タワーは認識できず、空の配列が返って来てしまいました。
また、ここには出していませんが、その場所の座標を取得したりすることもできます。

# まとめ

他にも色々な画像を試しましたが、文字起こしは画像の光の当たり具合で変に認識されたりしてしまったりします。
しかし、かなり高い制度でラベルをつけてくれたり、場所を特定してくれたりと<b>Googleすごい</b>と思いました。
ぜひやってみてください！