すぐ影響される 大学院生

昨日とは違う自分を目指して

golangとAWS Rekognitionで表情分析してみた

はじめに

HCB Advent Clendar 2021の13日目を担当するケイタです。

前回はラズパイで自分を監視するカメラを設置した話を書いたのですが設置しただけでは味気ないと思いますよね?

なので今回は監視カメラから取得した画像を使ってgolangAWS Rekognitionで感情を推定する方法について紹介したいと思います。

注意!用意する画像は顔が写っている必要があります!

用意するもの

  • AWSアカウント
  • IAMユーザ

IAMロールの用意

AmazonRekognitionReadOnlyAccessポリシーを付与したIAMユーザを作成しましょう。

コード

package main

import (
    "fmt"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/rekognition"
    "io/ioutil"
    "log"
)

func main() {

    imagePath := "face.jpg"
    imageBytes, err := ioutil.ReadFile(imagePath)
    if err != nil {
        log.Println(err)
    }

  //IAMユーザ作成時に確認できるアクセスキーとシークレットアクセスキーを入れてください
    accessKeyId := "アクセスキー"
    secretAccessKey := "シークレットアクセスキー"
    sess := session.Must(session.NewSession(&aws.Config{
        Region:      aws.String("ap-northeast-1"),
        Credentials: credentials.NewStaticCredentials(accessKeyId, secretAccessKey, ""),
    }))

    reko := rekognition.New(sess)

    params := &rekognition.DetectFacesInput{
        Image: &rekognition.Image{
            Bytes: imageBytes,
        },
        Attributes: []*string{
            aws.String("ALL"),
        },
    }

    res, err := reko.DetectFaces(params)
    if err != nil {
        fmt.Println(err.Error())
        return
    }
    for _, face := range res.FaceDetails {

        if *face.Smile.Value == true {
            fmt.Printf("ナイスSmile!!\n")
        } else {
            fmt.Printf("どしたん?話聞こか?\n")
        }
    }

}

結果

表情が笑顔の時

ナイスSmile!!

表情が暗い時

どしたん?話聞こか?

分析結果の信頼度を確認したいときは以下のコードをfor分の中に記述してみてください。

fmt.Printf("信頼度%f\n",*face.Smile.Confidence)

さいごに

今回はgolangAWS Rekognitionで感情を推定する方法について書きました。 今回紹介したコードでは笑顔だけですがAWS Rekognitionはさまざまな感情を推定することができるのでいろいろ試してみてください。 デスマーチしている時や研究で泣いている時の感情をslackのtimesに流したいと思います。

次の記事は、Kei Kimさんが書いてくれる予定なので、お楽しみに!