2
2

[Vision API] Javaで不適切なコンテンツを検出する(セーフサーチ検出)

Posted at

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

APIを使用し、画像のセーフサーチ検出を行います。

セーフサーチ検出は、画像に含まれる不適切なコンテンツを検出します。
以下の5つのカテゴリが、画像にどの程度の可能性で存在するかチェックします。

カテゴリ
アダルトコンテンツの可能性
医療画像である可能性
際どい内容が含まれている可能性
なりすましの可能性
暴力的なコンテンツが含まれている可能性

それぞれの上記のカテゴリに対して以下の5段階で評価します。

レベル 可能性
1 可能性は非常に低い
2 可能性は低い
3 可能性はある
4 可能性は高い
5 可能性は非常に高い

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

        SafeSearchAnnotation annotation = res.getSafeSearchAnnotation();
        System.out.format(
            "adult: %s%nmedical: %s%nspoofed: %s%nviolence: %s%nracy: %s%n",
            annotation.getAdult(),
            annotation.getMedical(),
            annotation.getSpoof(),
            annotation.getViolence(),
            annotation.getRacy());
    }
}

2.2. レスポンスの内容

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

AnnotateImageResponse

メソッド 戻り値 内容
getSafeSearchAnnotation SafeSearchAnnotation 画像に関連する一連の特徴

SafeSearchAnnotation

メソッド 戻り値 内容
getAdult Likelihood(enum) アダルトコンテンツの可能性
getMedical Likelihood(enum) 医療画像である可能性
getRacy Likelihood(enum) 際どい内容が含まれている可能性
getSpoof Likelihood(enum) なりすましの可能性
getViolence Likelihood(enum) 暴力的なコンテンツが含まれている可能性

Likelihood

可能性を定義値(文字列)で返します。一覧の下の方がより可能性が高くなります。

定義値 内容
UNKNOWN 可能性は不明
VERY_UNLIKELY 可能性は非常に低い
UNLIKELY 可能性は低い
POSSIBLE 可能性はある
LIKELY 可能性は高い
VERY_LIKELY 可能性は非常に高い

3. 結果の検証

いろいろな画像の可能性を検出してみました。
完全にアウトな画像はさすがに使えなかったので判定にかかりそうなものを差し込んでみました。
中にはそうだろうなというのも、意外なものもありました。

3.1. 繁華街

検出させる元画像

検出結果
アダルトと際どい可能性が「低い」と検出されました。
看板の文字を見ると完全にアダルティーですけどね。

アダルト 医療 際どい なりすまし 暴力
低い 非常に低い 低い 非常に低い 非常に低い

3.2. ボーリング

検出させる元画像

検出結果
楽しそうに遊んでいるので特に問題はありませんでした。

アダルト 医療 際どい なりすまし 暴力
非常に低い 非常に低い 非常に低い 非常に低い 非常に低い

3.3. 人物

検出させる元画像

検出結果
医療と際どい可能性が「低い」と検出されました。

アダルト 医療 際どい なりすまし 暴力
非常に低い 低い 低い 非常に低い 非常に低い

3.4. 街

検出させる元画像

検出結果
特に何も検出されませんでした。

アダルト 医療 際どい なりすまし 暴力
非常に低い 非常に低い 非常に低い 非常に低い 非常に低い

3.5. 野菜

検出させる元画像

検出結果
医療と際どい可能性が「低い」と検出されました。

アダルト 医療 際どい なりすまし 暴力
非常に低い 低い 低い 非常に低い 非常に低い

3.6. 猫

検出させる元画像

検出結果
なりすましの可能性が「低い」と検出されました。

アダルト 医療 際どい なりすまし 暴力
非常に低い 非常に低い 非常に低い 低い 非常に低い

3.7. デスク

検出させる元画像

検出結果
アダルトで医療で際どい可能性が「低い」と検出されました。

アダルト 医療 際どい なりすまし 暴力
低い 低い 低い 非常に低い 非常に低い

3.8. ハロウィン

検出結果
医療、際どいの可能性が「低い」、なりすましが「可能性はある」、
暴力の可能性が「高い」と検出されました。
見たままですね。

アダルト 医療 際どい なりすまし 暴力
非常に低い 低い 低い 可能性はある 高い

3.9. 錠剤

検出結果
意外にも医療の可能性が「低い」と検出されました。

アダルト 医療 際どい なりすまし 暴力
非常に低い 低い 非常に低い 非常に低い 非常に低い

3.10. ダイエット

検出結果
医療の可能性が「低い」、際どい可能性が低いより高い「可能性がある」になりました。

アダルト 医療 際どい なりすまし 暴力
非常に低い 低い 可能性はある 非常に低い 非常に低い

3.11. マッチョ

検出結果
医療と暴力の可能性が「低い」、際どい可能性が「非常に高い」と検出されました。

アダルト 医療 際どい なりすまし 暴力
非常に低い 低い 非常に高い 非常に低い 低い

3.12. サップヨガ

検出結果
医療の可能性が「低い」、アダルトの可能性が「可能性はある」、
際どい可能性が「非常に高い」と検出されました。

アダルト 医療 際どい なりすまし 暴力
可能性はある 低い 非常に高い 非常に低い 非常に低い


おしまい。。。
2
2
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
2
2