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
BUCKET : 作成したバケット名
KEY:ラベル抽出したいファイル名(S3にアップしたもの)
REGION : リージョン名「us-east-1」など
は自分の環境に合わせて入力します
これでラベル抽出ができました。猫以外にも画面に入っている物体抽出ができています。何らかの理由でcredentialsファイルが作成できない場合は、ソースコードに直接書き込む方法もあります。推奨はされないようです。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)) |
0 件のコメント:
コメントを投稿