golangとAWS Rekognitionで表情分析してみた
はじめに
HCB Advent Clendar 2021の13日目を担当するケイタです。
前回はラズパイで自分を監視するカメラを設置した話を書いたのですが設置しただけでは味気ないと思いますよね?
なので今回は監視カメラから取得した画像を使ってgolangとAWS 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)
さいごに
今回はgolangとAWS Rekognitionで感情を推定する方法について書きました。 今回紹介したコードでは笑顔だけですがAWS Rekognitionはさまざまな感情を推定することができるのでいろいろ試してみてください。 デスマーチしている時や研究で泣いている時の感情をslackのtimesに流したいと思います。
次の記事は、Kei Kimさんが書いてくれる予定なので、お楽しみに!