Amazon Rekognition+Python3で顔認識と顔検索

最近流行りのAWSに顔認識が出来るAmazon Rekognitionというものが出来ていたので、Python3を駆使して軽く使ってみましょう。

・必要な知識

・Pythonの簡単な知識

・SSH,FTP出来るぐらいの知識

・ググれる能力

  ・EC2 は少し出来る様になっているとスムーズ

まず最初にAmazon AWSに登録します。

そしてその登録したユーザでログインをする訳ですが、そのユーザはいわゆる「ルートユーザ」な訳で、もしそのアカウントを常用していて漏洩でもしてしまったら目も当てられない大変なことになるのは必死な訳です。

そこでAWSにはIAMという機能がついております。

簡単に言えば権限が絞られたユーザを作る機能です。

今回はEC2,S3,Rekognitionの三つだけ使えれば良いので、そんな感じに設定します。

Amazon Rekognitionで画像認識 Python(Boto3)編

このサイト様が非常に分かりやすく手順を追っているのでこちらを参考にEC2インスタンスを作成します。

今回は僕の環境ではAmazon Linux 2 AMIを米国東部 (オハイオ)としてインスタンスを作りました。(t2 micro)

無料でやりたい人はほぼ同じ構成になると思います。

SSHでつないでPython3.7をインストールしておきましょう。

Amazon Linux2にvenv/Anacondaで隔離されたPython3環境を構築

ここのPython3 のインストールまでやればおkです。

次に画像認識する為に使う画像をS3にアップロードします。

Amazon S3を開きバケットを作成。バケット名はご自由にどうぞ。

バケットを作成後、そこに画像認識する為に使う画像をアップロードしましょう。

アップロード出来たら、S3上の画像をAmazon Rekognitionを使って顔写真を抽出し、コレクションに格納しましょう。

ですが、GUIだと出来ない感じなので、Pythonを使ってS3からコレクションを抽出する必要があります。

まずはS3にアップロードした画像を別途FTPを使ってEC2インスタンスにアップロードします。

その前にGitをインストールしておきましょう。

この記事が参考になると思います。gitをyumでインストール

ここから私の作成したリポジトリを用いてAmazon Rekognitionを使ってコレクションを作成します。

インストールできたら

$git clone https://github.com/reud/RekognitionTest.git

でRekognitionTestを入手します。

その後、RekognitionTestフォルダの中にimagesフォルダを作成します。

imagesフォルダに先ほどEC2インスタンスにアップロードした画像を全て移動させます。

その後RekognitionTestフォルダに戻り、コレクションを作成するCollectionMaker.pyを動かします。

$sudo python3 CollectionMaker.py (名付けたいcollectionID名)

でコレクションを作成できます。

例: $sudo python3 CollectionMaker.py hogehoge

hogehogeという名前のコレクションが作成されます。

ちゃんとコレクションが作成されていたか確認しましょう。

$sudo python3 CollectionList.py

これで、先ほど作成したコレクションIDが書いてあったらおkです。

次にコレクションに画像を追加していくのですが、imagesフォルダからファイル名を取得して、そこからコレクションに追加していきます。

$sudo python3 filenameToText.py filenames.txt

これでカレントディレクトリにfilenames.txtが出力されます。

filenames.txtには画像ファイル名が羅列されています。

次に

$sudo python3 indexFaces.py filenames.txt (S3のバケット名) (collectionID名)

でコレクションに格納します。

例えばS3にhoge1というバケットがあって、hogecoleというコレクションを作成したなら、

$sudo python3 indexFaces.py filenames.txt hoge1 hogecole

になります。

ここまで来たら勝利(設定終了)も目前です。

あとはS3内の検索したい画像のファイル名を使って、

$sudo python3 searching-test.py (S3のバケット名) (そのバケット中の検索したいファイル名) (collectionID名)

例:hoge1バケットのhoge2.jpgをhogecoleコレクションで検索したい時

$sudo python3 searching-test.py hoge1 hoge2.jpg hogecole

で検索することができます。

検索する画像ファイルはコレクションに入ってなくてもおkです。

うまくいけば似ている画像のファイル名などが出力されると思います。

お疲れ様でした。

未分類

Posted by reud