LoginSignup
1
0

[Vision API] Javaで画像のクロップヒントを検出する

Posted at

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

APIを使用し、画像をクロップするヒント(座標)を取得します。
画像のクロップとは、中心のROI矩形領域のみの部分画像の切り出すことで
画像の最適化を行います。

記事では、APIの実行、その結果についてのみを記載していますので、
画像クロップや画像処理周りについて気になる方は検索してください。

APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Vision API] Javaで画像内のいろいろなものを検出する
を参照ください。

No 目次
1 Feature.Typeの指定
2 実行結果の取得
1 レスポンスの出力
2 レスポンスの内容
3 結果の検証
1 繁華街
2 交通標識
3 ボーリング
4 人物
5 富士山
6 熊本城
7
8 野菜
9
10 デスク
11 景色
12 駐車場

1. Feature.Typeの指定

クロップヒントを検出する場合は、
Feature.Type.CROP_HINTS
を指定します。

以下の記事でexecApi()にタイプを指定します。
⧉[Vision API] Javaで画像内のいろいろなものを検出する

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;
        }

        CropHintsAnnotation annotation = res.getCropHintsAnnotation();
        for (CropHint hint : annotation.getCropHintsList()) {
            System.out.println(hint.getBoundingPoly());
        }
    }
}

2.2. レスポンスの内容

BatchAnnotateImagesResponseの
getResponsesListでAnnotateImageResponseリストが取得できます。
検出されなった場合は、空のリストが返ってきます。

AnnotateImageResponse

メソッド 戻り値 内容
getCropHintsAnnotation CropHintsAnnotation クロップを生成するために使用されるクロップ ヒントのセット

CropHintsAnnotation

メソッド 戻り値 内容
getCropHintsList CropHint 新しいクロップを生成するために使用されるクロップ ヒント

CropHint

メソッド 戻り値 内容
getConfidence float 検出の信頼性。範囲は0〜1
getImportanceFraction float 元の画像に対する重要度の割合
getBoundingPoly BoundingPoly クロップ領域の境界ポリゴン

BoundingPoly

メソッド 戻り値 内容
getVerticesList List<Vertex> 境界ポリゴンの頂点。
左上、右上、左下、右下の順

Vertex

メソッド 戻り値 内容
getX int X座標
getY int Y座標

3. 結果の検証

いろいろな画像でクロップヒントを検出して画像クロップしてみました。

3.1. 繁華街

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.9735 0.9777777 (x:0,y:64)(x:1919,y:64)(x:1919,y:1148)(x:0,y:1148)

3.2. 交通標識

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.59375 0.95999986 (x:185,y:0)(x:454,y:0)(x:454,y:479)(x:185,y:479)

3.3. ボーリング

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.70232564 1.0 (x:0,y:32)(x:639,y:32)(x:639,y:394)(x:0,y:394)

3.4. 人物

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.588094 1.0 (x:192,y:0)(x:405,y:0)(x:405,y:381)(x:192,y:381)

3.5. 富士山

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.6795335 1.0 (x:0,y:120)(x:639,y:120)(x:639,y:481)(x:0,y:481)

3.6. 熊本城

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.9714276 0.97139585 (x:0,y:110)(x:639,y:110)(x:639,y:471)(x:0,y:471)

3.7. 街

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.73807615 1.0 (x:0,y:42)(x:639,y:42)(x:639,y:404)(x:0,y:404)

3.8. 野菜

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.875 0.82115394 (x:96,y:0)(x:523,y:0)(x:523,y:426)(x:96,y:426)

3.9. 猫

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.68750006 0.55999994 (x:96,y:0)(x:364,y:0)(x:364,y:479)(x:96,y:479)

3.10. デスク

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.9375 0.8609094 (x:0,y:0)(x:639,y:0)(x:639,y:361)(x:0,y:361)

3.11. 景色

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.5444824 1.0 (x:0,y:59)(x:639,y:59)(x:639,y:420)(x:0,y:420)

3.12. 駐車場

検出させる元画像

クロップ結果

信頼性 重要度の割合 クロップヒント座標
0.7405825 1.0 (x:0,y:44)(x:639,y:44)(x:639,y:406)(x:0,y:406)


おしまい。。。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0