🥂

【Amazon Rekognition】aws-sdk-goで有名人の画像を検出してみる

2021/11/22に公開

はじめに

Amazon Rekognitionについて少し調べたので、アウトプットしてみます。
今回は有名人を判定します。
判定する有名人は下記の4名です。特に意味はありません。

環境

  • go 1.17
  • github.com/aws/aws-sdk-go v1.42.9

今回検証する画像

載せるとややこしい事になりそうなので、名前だけ。
この4名の写真をAmazon Rekognitonにかけた時に、名前が検出されるを実験します。

では、早速やってみます。

ソースコード

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 path = "image/"

//ここで画像の名前を定義します
var imageName1 = path + "ガッキー.png"
var imageName2 = path + "星野源.png"
var imageName3 = path + "Jeff Bezos.png"
var imageName4 = path + "Andy Jassy.png"

func main() {
	//4枚ある為、スライスにします
	imageFiles := []string{
		imageName1,
		imageName2,
		imageName3,
		imageName4,
	}

	// AWSセッション作成
	sess := session.Must(session.NewSession())

	// Rekognitionクライアントを作成
	svc := rekognition.New(sess, aws.NewConfig().WithRegion("ap-northeast-1"))

	for _, image := range imageFiles {
		// 画像ファイルを取得
		file, err := os.Open(image)
		if err != nil {
			log.Fatal(err)
		}
		// 最後に画像ファイルを閉じます
		defer file.Close()

		// 画像ファイルのデータを読み込み
		bytes, err := ioutil.ReadAll(file)
		if err != nil {
			fmt.Println(err.Error())
			return
		}

		// svc.RecognizeCelebritiesに渡すパラメータを設定
		params := &rekognition.RecognizeCelebritiesInput{
			Image: &rekognition.Image{
				Bytes: bytes,
			},
		}

		// svc.RecognizeCelebritiesを実行
		result, err := svc.RecognizeCelebrities(params)
		if err != nil {
			fmt.Println(err.Error())
			return
		}
		//名前だけ出力
		fmt.Println(*result.CelebrityFaces[0].Name)
	}

}

出力結果

Yui Aragaki
Gen Hoshino
Jeff Bezos
Andy Jassy

ちゃんと有名人の名前が出力されました。
ちなみに、最後のfmt.PrintlnでNameの指定をしていますが、
resultだけで出力すると表情の判定などもズラズラと出ます。

さいごに

Rekognitonを使うと有名人の検出は簡単に出来ました。
次回はテキストの検出もやってみます。

参考

https://docs.aws.amazon.com/ja_jp/rekognition/latest/dg/API_Celebrity.html
https://dev.classmethod.jp/articles/get-image-using-amazon-rekognition/

Discussion