Googleの数あるAPIの中に「Cloud Vision API」があります。
画像の内容を分析してくれるAPIなのですが、その1つにアダルトや暴力的な表現が含まれてる不適切な画像を検出してくれる機能もあります。
今回はCloud Vision APIをPHPで利用する方法をご紹介します。
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を渡してあげます。
結果はTrue
かFalse
で返します。
判断方法は以下のようになります。
不適切な画像の観点
観点 | 説明 |
---|---|
Adult | 成人向けのエロい画像か |
Violence | 暴力的な表現を含む画像か |
Medical | 内臓が見える医療的なグロ画像か |
Spoof | 他の画像をパクった画像か |
Racy | いやらしい(猥褻な)表現を含む画像か ※Adultの強化カテゴリ |
サンプルコードでは、どれか1つでも不適切な可能性があればFalse
を返します。
不適切な画像の判断基準
可能性 | 説明 |
---|---|
UNKNOWN | 判断できません |
VERY_UNLIKELY | 不適切な画像である可能性はほとんどありません。 |
UNLIKELY | 不適切な画像であるとは考えにくいです。 |
POSSIBLE | 不適切な画像である可能性があります。 |
LIKELY | 不適切な画像である可能性が高いです。 |
VERY_LIKELY | >不適切な画像である可能性が非常に高いです。 |
サンプルコードを見て頂ければ分かる通り、コメントアウトをしていないPOSSIBLE
以下、つまり可能性があればFalse
。
UNLIKELY
以上、つまり可能性が薄い場合はTrue
を返します。いかがでしたでしょうか?
Cloud Vision APIはリクエストに応じた有料サービスになりますが、無料枠もありますのでぜひ試してみてください。
- Original:https://minory.org/cloud-vision-api.html
- Source:Minory
- Author:管理者