2022年8月12日金曜日

AWS Rekognition (1) : 簡単なラベル抽出

 AWSのRekognitionを使って画像からラベル抽出までをやってみます。今回は全てAWSの環境の中で完結するようにやっていきます。利用する環境は以下の通りです。

プログラミング言語:Python3

プログラミング実行環境:AWS Sagemaker

画像認識API : AWS Rekognition

画像保管用ストレージ:AWS S3

※今回は授業での利用を考えて、AWS AcademyのLearnerLabの環境で作っていきます

※ Javaで実施する場合は、https://smizunolab.blogspot.com/2019/11/aws-educate-3-rekognition.html

(1) AWS Sagemakerの立ち上げ

Amazon Sagemakerを開き、ノートブックインスタンスを一つ立ち上げます。名前を入力して、デフォルトのままで起動します。IAMロールで新規作成する必要があれば、新規作成して下さい。

作成をしたら、PendingからStartになるまで待ち、Jupyterを立ち上げてます。

(2) credentialファイルの作成 (~/.aws/credentials)
次にRekognitionを使えるように、credentialファイルを作成します。Jupyter右側のNewからTerminalを開きます。
Terminalを開いたら、
$ ls -la
を実施して、「.aws」があるか確認します。Sagemakerでは自動的に作られるようですが、自分で立てた環境などでは自分で「.aws」を作る必要があります。
$ cd .aws
$ vi credentials
credentialsファイルには以下の内容を書き込みます。

[default]
aws_access_key_id=XXXXXXXXXXXXXXXXX
aws_secret_access_key=YYYYYYYYYYYYYYYY
aws_session_token=ZZZZZZZZZZZZZZZZZZZZZZZ

AWS AcademyのLearnerLabの場合は、モジュールから「AWS Details」を押して、「AWS CLI : 」のshowを押すと出てきます。ただしAWS Academyの場合は4時間の期限があります。

この内容をcredentialsファイルに書き込み、保存をします。
(3) S3に対象となる画像を用意する
次に、S3を開き、bucketを作成します。バケット名を決めて、あとはデフォルトの内容で作成します。

作成したバケットに画像を入れておきます。猫の画像を一つ入れておきました。
(4) Rekognition APIを利用
Sagemakerに戻って、Rekognition APIを使って、S3にアップした画像のラベル抽出をしてみます。Jupyterでファイルを作成して名前を付けておきます。今回は「conda_python3」の環境で作りました。
boto3のインストール
Terminalか作成したjupyterファイルで、以下のコマンドを発行します。
pip install boto3
jupyterで実施する場合は、!pip install boto3. 「!」が先頭に必要
Rekognition APIで指定したラベル抽出を行います。
BUCKET : 作成したバケット名
KEY:ラベル抽出したいファイル名(S3にアップしたもの)
REGION : リージョン名「us-east-1」など
は自分の環境に合わせて入力します
これでラベル抽出ができました。猫以外にも画面に入っている物体抽出ができています。

何らかの理由でcredentialsファイルが作成できない場合は、ソースコードに直接書き込む方法もあります。推奨はされないようです。
import boto3
client = boto3.client(
'rekognition',
aws_access_key_id='********************',
aws_secret_access_key='*************************',
aws_session_token='**************************',
region_name='us-east-1'
)
BUCKET = "*************"
KEY = '****************'
def detect_labels(bucket, key, max_labels=10, min_confidence=90):
response = client.detect_labels(
Image={
"S3Object": {
"Bucket": bucket,
"Name": key,
}
},
MaxLabels=max_labels,
MinConfidence=min_confidence,
)
return response['Labels']
for label in detect_labels(BUCKET, KEY):
print("{Name} - {Confidence}%".format(**label))
view raw gistfile1.txt hosted with ❤ by GitHub

0 件のコメント:

コメントを投稿