前回試した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%けしからん画像と判定されたことになります。