Googleが提供しているVision APIをJavaで使ってみました。
APIを使用し、画像内に含まれているロゴを検出します。
APIを利用する環境の準備から始める場合や、コードを実行する際は、
⧉[Vision API] Javaで画像内のいろいろなものを検出する
を参照ください。
No | 目次 | |
---|---|---|
1 | Feature.Typeの指定 | |
2 | 実行結果の取得 | |
1 | レスポンスの出力 | |
2 | レスポンスの内容 | |
3 | 結果の検証 | |
1 | Googleの場合 | |
2 | 楽天の場合 | |
3 | トヨタの場合 | |
4 | Bandai Visualの場合 |
1. Feature.Typeの指定
ロゴを検出する場合は、
Feature.Type.LOGO_DETECTION
を指定します。
以下の記事で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;
}
for (EntityAnnotation annotation : res.getLogoAnnotationsList()) {
System.out.println(annotation.getDescription());
}
}
}
2.2. レスポンスの内容
BatchAnnotateImagesResponseの
getResponsesListでAnnotateImageResponseリストが取得できます。
検出されなった場合は、空のリストが返ってきます。
AnnotateImageResponse
メソッド | 戻り値 | 内容 |
---|---|---|
getLogoAnnotationsList | List<EntityAnnotation> | 検出された情報 |
EntityAnnotation
メソッド | 戻り値 | 内容 |
---|---|---|
getMid | string | OpaqueエンティティID |
getDescription | string | 検出されたロゴの説明文 |
getScore | float | 検出結果の信頼度。範囲は0〜1 |
getBoundingPoly | BoundingPoly | ロゴの画像領域 |
BoundingPoly
メソッド | 戻り値 | 内容 |
---|---|---|
getVerticesList | List<Vertex> | 境界ポリゴンの頂点。 左上、右上、左下、右下の順 |
Vertex
メソッド | 戻り値 | 内容 |
---|---|---|
getX | int | X座標 |
getY | int | Y座標 |
3. 結果の検証
画像に含まれるロゴが検出されるか検証してみました。
企業のロゴは扱いが難しいのでGoogle以外、元画像は貼り付けていません。
どれも有名なロゴなので検索すればすぐに出てきます
(Googleの場合はチュートリアルで使っていいよ。と書いてあったので)
3.1. Googleの場合
検出させる元画像
検出された結果
検出信頼度:0.8186716
ロゴ: Google
ちゃんと読み取れました。
3.2. 楽天の場合
検出させる元画像
赤文字「R」だけで、下に線があるロゴ
検出された結果
検出信頼度:0.56306803
ロゴ: Chrome Hearts
なんと、クロムハーツが出てきました。
楽天、RAKUTENとか書いてある方のロゴが正式なのでしょう。
3.3. トヨタの場合
検出させる元画像
誰でも知っているトヨタのマーク(文字がないやつ)
検出された結果
検出信頼度:0.977188
ロゴ: Toyota
さすが世界のトヨタ。
3.4. Bandai Visualの場合
検出させる元画像
モアイの絵に、EMOTIONと書いてるやつ
検出された結果
検出信頼度:0.7809801
ロゴ: Bandai Visual
バンダイとはどこにも書いていないのにしっかりと検出されました。
おしまい。。。