はじめに
今回は Amazon Rekognition の「イメージ内の安全でないコンテンツを検出する機能」を試します。
今回作成したAmazon Rekognition のイメージ内の安全でないコンテンツを検出する機能を試すページ
準備
[Lambda , API Gatewayの準備をします。]
(https://qiita.com/tanaka_takurou/items/3f93295de6cff060ec09)
[Amazon Rekognitionの資料]
Amazon Rekognition 開発者ガイド 安全でないイメージの検出
Amazon Rekognitionの概要
AWSでサーバレスな動画解析(Amazon Rekognition)
Amazon Rekognition
めちゃくちゃ簡単 Amazon Rekognition
WEBページ・API作成
GO言語のAWS Lambda関数ハンドラー aws-lambda-go を使用してHTMLやJSONを返す処理を作成します。
また、Rekognition を使用するため aws-sdk-go を利用します。
[参考資料]
AWS SDK for Go API Reference
イメージ内の安全でないコンテンツを検出するには DetectModerationLabels を使う。
func detectModeration(img string)(string, error) {
b64data := img[strings.IndexByte(img, ',')+1:]
data, err := base64.StdEncoding.DecodeString(b64data)
if err != nil {
log.Print(err)
return "", err
}
svc := rekognition.New(session.New(), &aws.Config{
Region: aws.String("ap-northeast-1"),
})
input := &rekognition.DetectModerationLabelsInput{
Image: &rekognition.Image{
Bytes: data,
},
}
res, err2 := svc.DetectModerationLabels(input)
if err2 != nil {
return "", err2
}
if len(res.ModerationLabels) < 1 {
return "No ModerationLabel", nil
}
results, err3 := json.Marshal(res.ModerationLabels)
if err3 != nil {
return "", err3
}
return string(results), nil
}
※ 6/7 追記
イメージ内のテキストを検出するには DetectText を使う。
func detectText(img string)(string, error) {
b64data := img[strings.IndexByte(img, ',')+1:]
data, err := base64.StdEncoding.DecodeString(b64data)
if err != nil {
log.Print(err)
return "", err
}
svc := rekognition.New(session.New(), &aws.Config{
Region: aws.String("ap-northeast-1"),
})
input := &rekognition.DetectTextInput{
Image: &rekognition.Image{
Bytes: data,
},
}
res, err2 := svc.DetectText(input)
if err2 != nil {
return "", err2
}
if len(res.TextDetections) < 1 {
return "No TextDetection", nil
}
results, err3 := json.Marshal(res.TextDetections)
if err3 != nil {
return "", err3
}
return string(results), nil
}
※ 6/7 追記
イメージ内の顔を検出するには DetectFaces を使う。
func detectFaces(img string)(string, error) {
b64data := img[strings.IndexByte(img, ',')+1:]
data, err := base64.StdEncoding.DecodeString(b64data)
if err != nil {
log.Print(err)
return "", err
}
svc := rekognition.New(session.New(), &aws.Config{
Region: aws.String("ap-northeast-1"),
})
input := &rekognition.DetectFacesInput{
Image: &rekognition.Image{
Bytes: data,
},
}
res, err2 := svc.DetectFaces(input)
if err2 != nil {
return "", err2
}
if len(res.FaceDetails) < 1 {
return "No FaceDetails", nil
}
results, err3 := json.Marshal(res.FaceDetails)
if err3 != nil {
return "", err3
}
return string(results), nil
}
※ 6/7 追記
イメージ内のラベルを検出するには DetectLabels を使う。
func detectLabels(img string)(string, error) {
b64data := img[strings.IndexByte(img, ',')+1:]
data, err := base64.StdEncoding.DecodeString(b64data)
if err != nil {
log.Print(err)
return "", err
}
svc := rekognition.New(session.New(), &aws.Config{
Region: aws.String("ap-northeast-1"),
})
input := &rekognition.DetectLabelsInput{
Image: &rekognition.Image{
Bytes: data,
},
MaxLabels: aws.Int64(10),
MinConfidence: aws.Float64(60.0),
}
res, err2 := svc.DetectLabels(input)
if err2 != nil {
return "", err2
}
if len(res.Labels) < 1 {
return "No Labels", nil
}
results, err3 := json.Marshal(res.Labels)
if err3 != nil {
return "", err3
}
return string(results), nil
}
終わりに
今回はAmazon Rekognitionの イメージ内の安全でないコンテンツを検出する機能を試しました。
他にもRekognitionの機能が利用できるため、今後試していきたいと思います。
※ 6/7 追記
イメージ内のテキスト・顔・ラベルを検出する機能を試しました。
テキストを検出する機能を試す
顔を検出する機能を試す
ラベルを検出する機能を試す