2022年9月14日水曜日

AWS Rekognition (5) : カスタムラベルの利用

物体抽出したい画像が集まったら、オリジナルの学習モデルをカスタムラベルで作成します。

(1) Custom Labelsのプロジェクトを作成

Amazon RekognitionからCustom Labels -> Use Custom Labels -> Get Started -> S3バケットの作成をしていきます。このS3バケットに画像を入れて学習をしていきます。



ProjectsからCreate Projectをして作成していきます。
プロジェクト名を指定して、プロジェクトを作成します。

(2) 学習用データセットを作成
プロジェクトが作成されると下の図のように、順番に何をするかが示されます。最初はデータセットを作成していきます。

1のcreate datasetをクリックします。
いくつかの選択肢がありますが、今回は
「Start with a single dataset」:学習データ、テストデータには自動で分割
「Import images from S3 bucket」:S3にアップロードしたデータを利用
の2つを選んで実施します。

いったんここでS3に移動して、画像をアップロードします。
今回は imageフォルダの中の3つのフォルダに入っている画像30枚を利用します。Custom Labelで強制的に作られたS3バケットの中にimageフォルダをアップロードしておきます。
アップロードが終わると、下記の画面が見えます。

右上にある「Copy S3 URI」でリンクをコピーします。
コピーしたら、もう一度Custom Labelsに戻ります。
S3 URIをコピーし、「Automatically assign image-level labels to images based on the folder name」にチェックを入れます。これでフォルダ名がラベル名となります。

ここまでできたら、Create Datasetをクリックします。画像が取り込まれると、ラベルのついた画像があることがわかります。

注意:AWS Academyで上記を実行すると、Network エラーになるかもしれません。なった場合は、S3からの同期ではなく、自分のPCからアップロードを選択して、一つひとつやってみて下さい。

(3) 学習の実行
「3. Train model」でボタンを押し実行します。

trainが始まり、進行中だと表示されます。数時間、学習に時間がかかります。
表示が変わり、精度など確認できれば学習完了です。


(4) 学習モデルの利用
作成した学習モデルを使っていきます。学習済みのプロジェクトから上のメニューで「Use Model」を選択します。下の API Code でPythonを選択すると、pythonコードが出てきます。

ソースコードには、Start Model、Analyze Image、Stop Modelがあります。Start、Stopはプロジェクトのボタンでもできます。Startは時間がかかります。Stopはすぐにできます。利用しないときはStopしましょう。ここではAnalyze Imageを見ていきます。PythonコードをSageMakerで実行していくので、SageMakerを開きます。
!pip install boto3
でライブラリをインストールしておきます。モデルをStartした後、以下を実行します。AWS Academyの場合はセッション情報も必要です。

図のように検出ができればOKです。

色々書きましたが、AWS RekognitionにあるTutorialの動画4本がわかりやすいので、そちらを参照して下さい。

2022年9月9日金曜日

AWS Rekognition (4) : 教師画像の収集

 自分がターゲットにしたい対象物を認識させるためには、その対象物の教師画像を用意して学習させなければなりません。今回はFlickrという画像収集サイトのAPIを使って、まとめて画像を取得してきます。どのようなpython環境(Google Colab)でもできますが、ここではSageMakerで実施していきます。

(1) Flickr APIの用意

Flickrでは様々な画像を取得できますが、一度に取得するためには、APIを使った方が便利です。詳しいページもたくさんあるので、下記を参考にしてFlickr APIキーを取得して下さい。

https://worktoolsmith.com/flickr-api-key/


http://kwski.net/api/807/

(2) ライブラリのインストール

最初にFlickr APIを使うためのライブラリをインストールしておきます。Jupyterファイルを用意して、ファイル名を付けて保存しておきます。そのファイルに下記2つのコマンドを書き、インストールします。

!pip install flickrapi

!pip install retry

(3) プログラムの実行

最初に画像を格納するフォルダを作成します。今回は「image」とします。これをjupyterファイルと同じ階層に用意します。imageの中にキーワードをフォルダ名として作成し、そのキーワードフォルダの中に画像を10枚程度保存していきます。以下のプログラムを実行します。


プログラムをキーワードを富士山として実行すると、./image/富士山/ フォルダができ、その中に画像が格納されます。

他のキーワードでも検索を行うと、フォルダが作成され画像が格納されます。

このような形で教師画像を取得することができました。

(4) 取得画像のダウンロード

S3にプログラムで転送してもいいのですが、ちょっと面倒なのでここでは、手元にダウンロードしてから、改めてS3にアップロードします。jupyterファイルに次を追加します。jupyterファイルと同じディレクトリにあるimageフォルダの中身を全てzip化します。

!zip -r image.zip ./image/*

zipファイルが作成されますので、ダウンロードして中身を確認して下さい。

これでS3にアップする準備ができました。

2022年8月15日月曜日

AWS Rekognition (3) : 動画からのラベル抽出

 Amazon Rekognitionを利用した、動画からのラベル抽出をやってみます。

(1) S3に解析用動画を準備する

動画からのラベル抽出をRekognitionをするには、S3に動画を保存する必要があります。短めの動画をS3にアップロードしておきます。前回作ったバケットに「video」というフォルダを作り、その中に動画をアップロードしておきます。動画はmp4かmovのようです。

(2)SagemakerでRekognition Video APIを利用
前回作成したSagemakerのノートブックインスタンスを立て上げます。
今回の動画認識をするノートブックを作成しておきます。

(i) rekognitionインスタンスの作成
credentialファイルまたは直接アクセスキーを書いておきます。

バケットや動画のファイル名は自分の環境に合わせておきます。

(ii) start_label_detection関数の呼び出し
画像と違い、動画の場合はstart_label_detection関数を最初に呼び出す必要があります。

Job IDを確認します。

(iii) get_label_detection関数を実行
次にラベル取得を行います。

SUCCEEDEDが出れば分析が完了です。
print(getObjectDetection) とするとjson形式で見ることができます。
みやすくしてみます。

得られた情報を格納したり、動画とリンクして表示することで、有効に使えそうです。

2022年8月13日土曜日

AWS Rekognition (2) : 画像をS3に転送する

 前回S3上にアップした画像のラベル抽出ができました(https://smizunolab.blogspot.com/2022/08/aws-rekognition-1.html)。ただ、毎回S3に画像を直接アップロードするのは大変ですので、既に蓄えられている画像をS3にアップロードして、ラベル抽出をしやすくしたいと思います。環境はSagemakerでやりますが、boto3がインストールされていれば、自分の環境でも同様にできます。

(1) Sagemaker上に画像フォルダ「image」を用意します。

このimageの中にラベル抽出したいファイルを入れておきます。
(2) S3上に転送されたファイルを格納するフォルダ「image」を用意します。
自分のバケットの中にフォルダ「image」を作成します。
この「image」にファイルを転送します。

(3) pythonでS3にファイル転送
前回利用したjupyterファイルに追加していきます。今回はcredentialsファイルを使わない形式で書いていきます。


今回はファイル名をリスト化していますが、適宜変更して下さい。ファイルがアップロードされたかS3側で確認します。
ファイルが指定場所、指定したファイル名でアップロードされたことが確認できました。