Cloud Vision APIとPHPを利用して不適切な画像を判断

cloud-vision-api

Googleの数あるAPIの中に「Cloud Vision API」があります。
画像の内容を分析してくれるAPIなのですが、その1つにアダルトや暴力的な表現が含まれてる不適切画像を検出してくれる機能もあります。
今回はCloud Vision APIPHPで利用する方法をご紹介します。

Cloud Vision APIの使い方

以下の参考サイトには、Google APIの利用登録方法から、簡単な使い方まで掲載されていますので、もし登録がお済みでない方はぜひご覧ください。

公式サイトでは、クライアントライブラリを利用していますが、今回はピュアなPHPでご紹介します。

サンプルコード

以下は、画像が不適切でないか判断をする関数を作成したものです。

public function is_safe_image($url)
{
    // API Key
    $api_key = [GOOGLE_API_KEY];
    $app_url = [YOUR_SITE_URL];
    $likelihoods = [
        /*
        'UNKNOWN', 
        'VERY_UNLIKELY', 
        'UNLIKELY',
        */
        'POSSIBLE',
        'LIKELY', 
        'VERY_LIKELY'
    ];
    
    // Set parameters
    $param = ["requests" => [
        "image" => [
            "content" => base64_encode($contents)
        ],
        "features" => [
            "type" => 'SAFE_SEARCH_DETECTION',
            "maxResults" => 1
        ]
    ]];
    $json = json_encode($param);
    
    // Request
    $curl = curl_init() ;
    curl_setopt($curl, CURLOPT_URL, "https://vision.googleapis.com/v1/images:annotate?key=" . $api_key);
    curl_setopt($curl, CURLOPT_HEADER, true);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 10);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
    curl_setopt($curl, CURLOPT_REFERER, [YOUR_SITE_URL]);
    $res1 = curl_exec($curl);
    $res2 = curl_getinfo($curl);
    curl_close($curl);
    
    // Get data
    $json = substr($res1, $res2["header_size"]);
    $data = json_decode($json, true);
    
    // Output
    if (is_array($data) && count($data) > 0) {
        if (isset($data['responses'])) {
            foreach ($likelihoods as $likelihood) {
                if (array_search($likelihood, $data['responses'][0]['safeSearchAnnotation'])) {
                    return false;
                }
            }
        }
    }    return true;
}

解説

[GOOGLE_API_KEY]にあなたが取得したAPIキーを。[YOUR_SITE_URL]にあなたのサイトのURLを入力してください。
後は、この関数の引数に検出したい画像のURLを渡してあげます。
結果はTrueFalseで返します。
判断方法は以下のようになります。

不適切な画像の観点

観点 説明
Adult 成人向けのエロい画像か
Violence 暴力的な表現を含む画像か
Medical 内臓が見える医療的なグロ画像か
Spoof 他の画像をパクった画像か
Racy いやらしい(猥褻な)表現を含む画像か
※Adultの強化カテゴリ

サンプルコードでは、どれか1つでも不適切な可能性があればFalseを返します。

不適切な画像の判断基準

可能性 説明
UNKNOWN 判断できません
VERY_UNLIKELY 不適切な画像である可能性はほとんどありません。
UNLIKELY 不適切な画像であるとは考えにくいです。
POSSIBLE 不適切な画像である可能性があります。
LIKELY 不適切な画像である可能性が高いです。
VERY_LIKELY >不適切な画像である可能性が非常に高いです。

サンプルコードを見て頂ければ分かる通り、コメントアウトをしていないPOSSIBLE以下、つまり可能性があればFalse
UNLIKELY以上、つまり可能性が薄い場合はTrueを返します。いかがでしたでしょうか?
Cloud Vision APIはリクエストに応じた有料サービスになりますが、無料枠もありますのでぜひ試してみてください。


Amazonベストセラー

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA