[Vision API] Javaで画像内のラベルを検出する

Googleが提供しているVision APIをJavaで使ってみました。

APIを使用し、画像内に含まれているラベルを検出します。

ラベルは、画像にどのようなものが写っているのかをAIで判定し、
文字列(英語)で返してくれます。

本記事の[3. 結果の検証](#3-結果の検証)でどのようなものが検出されるか試していますが、
「ジーンズ」「猫」「自然食品」なども認識されます。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Vision API] Javaで画像内のいろいろなものを検出する](https://qiita.com/doran/items/444cb6231b7dffb9ddac)
を参照ください。
:::

|No||目次|
|---|---|---|
|1||[Feature.Typeの指定](#1-featuretypeの指定)|
|2||[実行結果の取得](#2-実行結果の取得)|
||1|[レスポンスの出力](#21-レスポンスの出力)|
||2|[レスポンスの内容](#22-レスポンスの内容)|
|3||[結果の検証](#3-結果の検証)|
||1|[ロゴ](#31-ロゴ)|
||2|[街の風景](#32-街の風景)|
||3|[自然の風景](#33-自然の風景)|
||4|[繁華街](#34-繁華街)|
||5|[人物](#35-人物)|
||6|[動物](#36-動物)|
||7|[野菜](#37-野菜)|

# 1. Feature.Typeの指定
ラベルを検出する場合は、
**Feature.Type.LABEL_DETECTION**
を指定します。

以下の記事でexecApi()にタイプを指定します。
[⧉[Vision API] Javaで画像内のいろいろなものを検出する](https://qiita.com/doran/items/444cb6231b7dffb9ddac#25-apiを呼び出す)

# 2. 実行結果の取得
### 2.1. レスポンスの出力
取得した結果をコンソールに出力します。
```
private static void output(BatchAnnotateImagesResponse response){
    List<AnnotateImageResponse> responses = response.getResponsesList();
    
    for (AnnotateImageResponse res : responses) {
        if (res.hasError()) {
            System.out.format("Error: %s%n", res.getError().getMessage());
            return;
        }
    
        for (EntityAnnotation annotation : res.getLabelAnnotationsList()) {
            annotation.getAllFields()
            .forEach((k, v) -> System.out.format("%s : %s%n", k, v.toString()));
        }
    }
}
```
### 2.2. レスポンスの内容
BatchAnnotateImagesResponseの
getResponsesListでAnnotateImageResponseリストが取得できます。
検出されなった場合は、空のリストが返ってきます。
#### AnnotateImageResponse
|メソッド|戻り値|内容|
|---|---|---|
|getLabelAnnotationsList|List\<[EntityAnnotation](#entityannotation)\>|検出されたラベル|
#### EntityAnnotation
|メソッド|戻り値|内容|
|---|---|---|
|getMid|string|OpaqueエンティティID|
|getDescription|string|検出されたラベルの説明文|
|getScore|float|検出結果の信頼度。範囲は0〜1|
|getTopicality|float|ICAラベルと画像の関連性|

## 3. 結果の検証
いろいろな画像でラベルを検出してみました。
画像に映り込んだ情報が多いほど、レスポンスが遅かったです。
（たとえば、[3.4.繁華街](#34-繁華街)の画像は得に遅かった）

### 3.1. ロゴ
**検出させる元画像**
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/4cb5c6fd-2ec8-83b5-161b-cb8996721997.jpeg">
**実行結果**
|説明|訳|検出結果の信頼度|画像との関連性|
|---|---|---|---|
|Purple|紫|0.85702777|0.85702777|
|Font|フォント|0.8366547|0.8366547|
|Magenta|赤紫色|0.7750041|0.7750041|
|Electric blue|エレクトリックブルー|0.73360777|0.73360777|
|Event|イベント|0.72941405|0.72941405|
|Ceiling|シーリング|0.72912264|0.72912264|
|Graphics|グラフィックス|0.68004316|0.68004316|
|Logo|ロゴ|0.67122936|0.67122936|
|Display device|表示装置|0.6700307|0.6700307|
|Signage|看板|0.6506733|0.6506733|

### 3.2. 街の風景
**検出させる元画像**
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/2adde904-da1c-f897-9627-4baf213c4bc6.jpeg">
**実行結果**
|説明|訳|検出結果の信頼度|画像との関連性|
|---|---|---|---|
|Cloud|雲|0.9719424|0.9719424|
|Skyscraper|超高層ビル|0.9708496|0.9708496|
|Building|建物|0.9690578|0.9690578|
|Sky|空|0.9642791|0.9642791|
|Daytime|昼間|0.94603235|0.94603235|
|Blue|青|0.9025435|0.9025435|
|Tower block|高層ビル|0.85141665|0.85141665|
|Urban design|都市デザイン|0.84370995|0.84370995|
|Tower|タワー|0.84239924|0.84239924|
|Neighbourhood|近所|0.8330505|0.8330505|

### 3.3. 自然の風景
**検出させる元画像**
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/e7932672-4e3e-c29f-f2b9-6ba5ad213372.jpeg">
**実行結果**
|説明|訳|検出結果の信頼度|画像との関連性|
|---|---|---|---|
|Sky|空|0.9716211|0.9716211|
|Mountain|山|0.94789594|0.94789594|
|Ecoregion|エコリージョン|0.9245183|0.9245183|
|Water|水|0.89134187|0.89134187|
|Highland|ハイランド|0.8774106|0.8774106|
|Body of water|水域|0.8644991|0.8644991|
|Snow|雪|0.86270267|0.86270267|
|Natural landscape|自然景観|0.85074323|0.85074323|
|Landscape|風景|0.8070087|0.8070087|
|Mountainous landforms|山岳地形|0.7913905|0.7913905|

### 3.4. 繁華街
**検出させる元画像**
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/5cef424e-b2bc-9914-51e1-813a571f6dd8.jpeg">
**実行結果**
|説明|訳|検出結果の信頼度|画像との関連性|
|---|---|---|---|
|Font|フォント|0.8283585|0.8283585|
|City|市|0.7705533|0.7705533|
|Art|美術|0.7546429|0.7546429|
|Metropolis|大都市|0.7389245|0.7389245|
|Tints and shades|色合いと色合い|0.72601813|0.72601813|
|Signage|看板|0.6861472|0.6861472|
|Event|イベント|0.6188593|0.6188593|
|Advertising|広告|0.5911735|0.5911735|
|Electronic signage|電子看板|0.55702543|0.55702543|
|Street|通り|0.5229703|0.5229703|

### 3.5. 人物
**検出させる元画像**
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/fec71310-f11e-002e-607a-793d90d7a2c9.jpeg">
**実行結果**
|説明|訳|検出結果の信頼度|画像との関連性|
|---|---|---|---|
|Footwear|履物|0.9816828|0.9816828|
|Jeans|ジーンズ|0.9776394|0.9776394|
|Trousers|ズボン|0.9643992|0.9643992|
|Shoe|靴|0.9607125|0.9607125|
|Smile|笑顔|0.94449294|0.94449294|
|Yellow|黄色|0.8447503|0.8447503|
|Sneakers|スニーカー|0.83880615|0.83880615|
|Ball|ボール|0.82979566|0.82979566|
|Leisure|レジャー|0.8157|0.8157|
|Fun|楽しい|0.7758143|0.7758143|

### 3.6. 動物
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/7d0831fa-0288-928a-a196-97b89cfea8d6.jpeg">

**実行結果**
|説明|訳|検出結果の信頼度|画像との関連性|
|---|---|---|---|
|Cat|猫|0.96098435|0.96098435|
|Eye|目|0.9361381|0.9361381|
|Vertebrate|脊椎動物|0.92139554|0.92139554|
|Carnivore|肉食動物|0.87543076|0.87543076|
|Felidae|ネコ科|0.85701525|0.85701525|
|Mammal|哺乳類|0.85497636|0.85497636|
|Small to medium-sized cats|小型から中型の猫|0.83198994|0.83198994|
|Comfort|快適|0.8193583|0.8193583|
|Whiskers|ひげ|0.8148246|0.8148246|
|Ear|耳|0.7827573|0.7827573|

### 3.7. 野菜
<img width="480" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/114621/411c3ef2-9395-0fdb-d074-2837ada5dad7.jpeg">

**実行結果**
|説明|訳|検出結果の信頼度|画像との関連性|
|---|---|---|---|
|Food|食べ物|0.9882819|0.9882819|
|Ingredient|材料|0.91791373|0.91791373|
|Natural foods|自然食品|0.902798|0.902798|
|Cuisine|料理|0.858267|0.858267|
|Whole food|自然食品|0.852474|0.852474|
|Leaf vegetable|葉物野菜|0.8498862|0.8498862|
|Food group|フードグループ|0.8497838|0.8497838|
|Staple food|主食|0.83365625|0.83365625|
|Dish|皿|0.8220238|0.8220238|
|Produce|生産する|0.8082219|0.8082219|

<BR>
<BR>
おしまい。。。