👙
【Amazon Rekognition】 aws-sdk-goで不適切な画像(卑猥画像など)を検出する
はじめに
業務でRekognitionを使いましたので、アウトプットの為に、記事にします。
最近はだいたいどんなアプリでも画像が出てくるので、意図していない画像を検出する為に、Rekognitionをどんどん使っていきましょう。
Amazon Rekognitionの概要
Amazon Rekognitionを使用すると、画像と動画の物体、人物、テキスト、シーン、活動を特定し、不適切なコンテンツを検出できます。
Amazon Rekognitionで検出出来る不適切画像一覧はこちら
今回は不適切な画像のSuggestiveとViolenceを検出していきます。
今回検証する画像
は載せません。
本当は載せた方が分かりやすいんやけど。
著作権云々言われるの怖いし、なにより卑猥な画像を載せれない為。
こんな感じで、
- gun.png
- human.jpg
- sakura.jpeg
- 水着.png
の4枚を検証しようと思います。
gunの写真がviolenceとなり、水着の写真がSuggestiveになるはず。
環境
macOS 11.5.2
go 1.16
github.com/aws/aws-sdk-go v1.40.45
準備
.awsの設定
credentialsやconfigの設定を行なってください。
今回はこちらでは説明致しません。
設定されている事を前提として話を進めます。
まだ設定できていない人は、こちらを参考に設定してみてください。
aws-sdk-goをインストールします。
//go mod を入れます。今回はexample.comにしてます。皆様はGitHubなどのリポジトリになると思います。
$ go mod init example.com
//aws-sdk-go をインストールします。
$ go get -u github.com/aws/aws-sdk-go
//go mod を更新します。
$ go mod tidy
インストールが終わりましたら、早速コードを書いていきます。
以下のソースコードが完成形です。
ソースコード
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/rekognition"
)
const imagePath = "image/"
//ここで画像を雑に定義してます。
var imageName1 = "gun.png"
var imageName2 = "human.jpg"
var imageName3 = "sakura.jpeg"
var imageName4 = "水着.png"
func main() {
// imageNameを変更して実行することで、画像を変更します。
// ここ雑です。すいません。
file := imagePath + imageName1
// 画像ファイルを取得
imageFile, err := os.Open(file)
if err != nil {
log.Fatal(err)
}
// 最後に画像ファイルを閉じます
defer imageFile.Close()
// 画像ファイルのデータを読み込み
bytes, err := ioutil.ReadAll(imageFile)
if err != nil {
fmt.Println(err.Error())
return
}
// セッション作成
sess := session.Must(session.NewSession())
// Rekognitionクライアントを作成
svc := rekognition.New(sess, aws.NewConfig().WithRegion("us-east-1"))
// パラメータを設定
params := &rekognition.DetectModerationLabelsInput{
Image: &rekognition.Image{
Bytes: bytes,
},
}
// DetectModerationLabelsを実行。resultに結果のLabelが入ります。
result, err := svc.DetectModerationLabels(params)
// 結果を出力
fmt.Println(result)
}
実行
go run main.go
結果
- gun.png
{
ModerationLabels: [{
Confidence: 94.91090393066406,
Name: "Weapons",
ParentName: "Violence"
},{
Confidence: 94.91090393066406,
Name: "Violence",
ParentName: ""
}],
ModerationModelVersion: "4.0"
}
想定通りviolenceになってます。
- human.jpg
{
ModerationLabels: [],
ModerationModelVersion: "4.0"
}
ラベルなしです。
- sakura.jpeg
{
ModerationLabels: [],
ModerationModelVersion: "4.0"
}
humanと同じ結果
- 水着.png
{
ModerationLabels: [{
Confidence: 80.94490051269531,
Name: "Suggestive",
ParentName: ""
},{
Confidence: 80.94490051269531,
Name: "Revealing Clothes",
ParentName: "Suggestive"
},{
Confidence: 76.50199890136719,
Name: "Female Swimwear Or Underwear",
ParentName: "Suggestive"
}],
ModerationModelVersion: "4.0"
}
想定通り、Suggestiveになりました。
さいごに
これであなたも卑猥画像マスターですね。
いろんな画像を試してみてください。
参考
Discussion