Googleが提供しているVision APIをJavaで使ってみました。
APIを使用し、画像をクロップするヒント(座標)を取得します。
画像のクロップとは、中心のROI矩形領域のみの部分画像の切り出すことで
画像の最適化を行います。
記事では、APIの実行、その結果についてのみを記載していますので、
画像クロップや画像処理周りについて気になる方は検索してください。
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
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) |
おしまい。。。