0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS日記⑦ (Rekognition)

Last updated at Posted at 2020-05-31

はじめに

今回は 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 を使う。
main.go
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 を使う。
main.go
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 を使う。
main.go
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 を使う。
main.go
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 追記
イメージ内のテキスト・顔・ラベルを検出する機能を試しました。
テキストを検出する機能を試す
顔を検出する機能を試す
ラベルを検出する機能を試す

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?