[AWS] Rekognitionで"けしからん"画像か判定する

前回試したAmazon Rekognitionには、画像に不適切な内容が含まれるかチェックする機能が搭載されています。

今回もNode.jsからRekognitionを利用するコードを書いてみます。SDKを利用してRekognitionへ画像を送ると0〜100の間でどの程度けしからんか判定してくれます。

最終的なソースコード

最終的なコードをGitHub上にアップしました。サンプル画像はBANされちゃう可能性があるので残念ながらつけることができませんw 画像検索するなどして各自でご用意ください。 github.com

前提

前回のお話

理屈や実行環境は前回とほぼ同じです。まずはこちらの内容をざっくりご覧ください。 blog.katsubemakito.net

準備

前回と同様にIAMを設定、.envにIAMのアクセスキーIDとシークレットなどを記載、Node.js用のプロジェクトを作成してください(今回はcanvasモジュールは利用しません)

実際に解析してみる

クライアント

前回との違いは呼び出すメソッドがdetectLabels()から.detectModerationLabels()になり、一部パラメーターの指定が変わるだけです。

detectModerationLabelsは画像内の「けしからん」箇所を複数見つけてその一覧を返してくれます。20行目のMinConfidenceにはどの程度「けしからん」か0〜100の数値を指定します。確実性の低い物は返さない足切り(フィルタリング)が行えます。

const AWS = require('aws-sdk')
const fs = require('fs')

// .envの内容を環境変数化
require('dotenv').config()

// IAM設定
AWS.config.update({
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  region: process.env.AWS_REGION
})

// Rekognitionに渡す値を準備
const client = new AWS.Rekognition();
const params = {
  Image: {
    Bytes: fs.readFileSync('sample.jpg')   // 解析対象の画像データ
  },
  MinConfidence: 60
}

// Rekognitionで解析
client.detectModerationLabels(params, (err, response) =>{
  // エラー時
  if (err) {
    console.log(err, err.stack)
  }
  //解析結果を表示
  else {
    const str = JSON.stringify(response, null, 2)
    console.log(str)
  }
})

レスポンス

レスポンスはJSONで返ってきます。Nameにどういった理由でけしからんか、Confidenceは的中率のようなものですね。100に近いほど確実にけしからん画像と言えます。

{
  "ModerationLabels": [
    {
      "Confidence": 99.85330200195312,
      "Name": "Explicit Nudity",
      "ParentName": ""
    },
    {
      "Confidence": 99.85330200195312,
      "Name": "Illustrated Explicit Nudity",
      "ParentName": "Explicit Nudity"
    }
  ],
  "ModerationModelVersion": "4.0"
}

この例だと99%けしからん画像と判定されたことになります。

参考ページ