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側で確認します。
ファイルが指定場所、指定したファイル名でアップロードされたことが確認できました。

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ファイルが作成できない場合は、ソースコードに直接書き込む方法もあります。推奨はされないようです。

2022年7月9日土曜日

プログラミングスキル向上のために

 プログラミングスキル向上のために、僕が考えていることを書いておきます。プログラミング言語は限定しませんが、オブジェクト指向型言語(C++, Java, Pythonなど)を想定しています。僕自身、プログラミングは苦手意識がありました。周りでプログラミングが上手な人を見て、「センスがないとプログラミングはできないのかな?」と考えたことがあります。けれども今では、下に書いたようなコツを掴めば、誰でも上達できると考えています。

[対象者]

・プログラミングに苦手意識がある

・プログラミングを勉強しているが、成長が感じられない

[プログラミングスキル向上のために]

1. 基本文法を身につける(構造化プログラミング:順次、選択、繰り返し)

最低限の基本文法は身につけないとプログラミングが始まりません。構造化プログラミングという、順次(上から下の順序で実行)、選択(if, switch文)、繰り返し(for, while文)の3要素を身につけましょう。これ以外の細かな文法は後からで十分です。薄めの参考書を利用して、例題をやってみてここまでの知識を身につけましょう。英語で言うと、基本的な単語、文法を覚えるのと同じです。

2. 上から下へのプログラムを書いてみる

構造化プログラミングを身につけたら、とにかく自分の力で、汚いプログラミングで良いので、プログラムを作ってみましょう。構造化プログラミングを使えば、基本的にどのようなプログラミングも書くことができます。冗長になったり、同じことが書いてあってもよいので、自分でプログラムを作れるようになりましょう。英語で言うと、英語で話かけられたときに、なんとか苦労しながら自分の言葉で返して、意味が通じた時の感覚です。この段階がクリアできれば、プログラムはどんどん書けるようになります。

3. プログラムをまとめる(関数化:ルールを見つける)

2でプログラムがなんとか書けるようになったら、それを機能的にまとめていきます。これは関数化すると良いです。関数化するときには、引数と戻り値を明確に示さなければなりません。プログラムを関数化するときには、ある種のルールを見つけることになります。例えば、同じ処理を何度もしている時、ループや引数を変えることでまとめることができます。同じ処理を関数化して、出来るだけプログラムをスリムにしていきましょう。関数化することができれば、後から再利用もできて便利です。英語で言うと、あいさつやいつも使う言い回しをまとめておくことと同じです。

プログラミング環境は、pythonでいうと1~3はJupyter Notebookにメモ的に書いて、実行を確認していくような形です。

4. プログラムをさらにまとめる(クラス化:システム的に処理できるように)

3で関数化してスリムになったプログラム同士を、ある目的のためにシステム化していきましょう。例えば、サイコロを指定回数投げた時に、指定された目の出る確率を実験的に求めると、指定回数、指定する目、各回でなんの目が出るか、今までに出た指定目の回数などいくつかの情報を組み合わせていきます。これらをシステム的にまとめたものがクラスになります。クラスには、複数の関数、インスタンス変数など目的に合わせて組み合わせていきます。システムとして提供できるプログラムとして、クラスを考えていくのが良いと考えています。英語で言うと、作文、論文、プレゼンなどで起承転結のような流れがあり、仮定から結論までの流れのようなものです。個人的には、この4ができるようになると、どのようなプログラミングでも組める気になります。ここまでできたプログラムは再利用できる価値が高いので、githubなどにアップして、自分のリポジトリにしましょう。

プログラミング環境は、4を実施するときは、1~3でJupyter Notebookで書いてきたものを、pythonファイル(.py)に書き換えながらやっていく形です。クラス化をすることで、役割分担が明確になり、プログラムの「型」に当てはめていく作業です。型に当てはめることで、プログラミングがわかりやすくなります。

5. データの扱い:呼び出し、保存ができる

4まででプログラミングの大枠ができるようになると、次はデータの扱いです。プログラミングにおいて、変数の値の保存や、データの取り込みは欠かせないものです。これを行うために、配列、リストなどデータの扱いに慣れておく必要があります。データの構造を考えると、配列構造もどのようにするか考える必要があります。データの更新タイミングも大事なポイントです。データの取り扱いを自由にできると、色々なプログラミングに応用ができます。

その他:Webシステムでのプログラミング

プログラミングというとコンソールでやっていくようなイメージがあり、何となく難しいイメージがあります。Webシステムでプログラムを作っていくと、外部設計と連動するので、実際にどのように動かすかがイメージしやすいです。Webシステムの場合は、データはデータベースと連携してやりとりする場合が多いです。データ構造(モデル)、ビュー(表示、表、グラフ)、コントローラ(プログラミング)のMVC環境で行っていくことで、自然にわかりやすいプログラムが書けるようになります。

以上、僕がプログラミングするときにやっている方法を書きました。プログラミングに苦手意識があった僕も、このような段階を踏んでいくことで、プログラミングに対して苦手意識がなくなり、どのようなプログラミングでもトライできるようになりました。特に、4で紹介した「型に当てはめる」ということで、大規模なプログラムもすっきり作れるようになります。中々細部まで説明が難しいですが、授業などで話す機会があれば触れていきます。頑張って下さい。


2022年4月17日日曜日

AWS Academyの登録方法(学生版)

AWS Academyに利用者(学生)として登録する方法です。

(1) メールを確認する。

教員がAWS Academyに学生を登録すると、以下のメールが来ます。

Get Started をクリックして、登録を行います。

(2) アカウントを作成する
Get Startedをクリックすると、次の画面になります。
ここでアカウント作成「Create My Account」をクリックします。
パスワードを設定:任意のパスワード
Time Zone : Tokyo (+09:00) を指定
利用規約(一番下のチェックボックス)にチェック

Register をクリック
招待されたコースに移ります。

これでアカウント作成は終了です。
次回以降ログインする場合は、https://www.awsacademy.com/LMS_Login
からログインします。(上の方から)


(3) Modulesを利用する
(注意)
Courses -> Modules -> Learner Lab Foundation ServicesLearner Lab - Foundational Services
と進んだとき、画面が出てこない場合があります。

この場合は、画面右上のアイコンが「third-party cookie blocking」となっています。


これを許可に変えると、通常の画面が出てきます。
Chromeの場合 -> Site not working?をクリック-> Allow cookies をクリック

最初にModuleを使おうとするとき、利用規約が出てきるので、I agree をクリックします。


この画面が出てくれば、実習が利用可能になります。