Googleの数あるAPIの中に「Cloud Vision API」があります。
画像の内容を分析してくれるAPIなのですが、その1つにアダルトや暴力的な表現が含まれてる不適切な画像を検出してくれる機能もあります。
今回はCloud Vision APIをPHPで利用する方法をご紹介します。
目次
Cloud Vision APIの使い方
以下の参考サイトには、Google APIの利用登録方法から、簡単な使い方まで掲載されていますので、もし登録がお済みでない方はぜひご覧ください。
Cloud Vision APIの使い方まとめ
Googleが提供する、開発者向けの画像認識サービス、Cloud Vision APIの使い方を説明します。
公式サイトでは、クライアントライブラリを利用していますが、今回はピュアなPHPでご紹介します。
Google APIを使ったサンプルコード
以下は、画像が不適切でないか判断をする関数を作成したものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
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を渡してあげます。
結果はTrue
かFalse
で返します。
判断方法は以下のようになります。
不適切な画像の観点と判断基準
関数は何となくわかりますが、では実際にどのようなパラメーターを設定したら良いか、また、Cloud Vision APIがどのように不適切だと判断しているかを説明します。
不適切な画像の観点
観点 | 説明 |
---|---|
Adult | 成人向けのエロい画像か |
Violence | 暴力的な表現を含む画像か |
Medical | 内臓が見える医療的なグロ画像か |
Spoof | 他の画像をパクった画像か |
Racy | いやらしい(猥褻な)表現を含む画像か ※Adultの強化カテゴリ |
サンプルコードでは、どれか1つでも不適切な可能性があればFalse
を返します。
不適切な画像の判断基準
可能性 | 説明 |
---|---|
UNKNOWN | 判断できません |
VERY_UNLIKELY | 不適切な画像である可能性はほとんどありません。 |
UNLIKELY | 不適切な画像であるとは考えにくいです。 |
POSSIBLE | 不適切な画像である可能性があります。 |
LIKELY | 不適切な画像である可能性が高いです。 |
VERY_LIKELY | >不適切な画像である可能性が非常に高いです。 |
サンプルコードを見て頂ければ分かる通り、コメントアウトをしていないPOSSIBLE
以下、つまり可能性があればFalse
。UNLIKELY
以上、つまり可能性が薄い場合はTrue
を返します。いかがでしたでしょうか?
Cloud Vision APIはリクエストに応じた有料サービスになりますが、無料枠もありますのでぜひ試してみてください。
著:株式会社grasys, 著:Google Cloud 西岡典生, 著:Google Cloud 田丸司
¥2,728 (2024/11/08 16:28時点 | Amazon調べ)
ポチップ
コメント
コメント一覧 (1件)
[…] Cloud Vision APIとPHPを利用して不適切な画像を判断https://minory.org/cloud-vision-api.htmlGoogleの数あるAPIの中に「Cloud Vision API」があります。画像の内容を分析してくれるAPIなのですが、その1つに […]