1. HOME
  2. ブログ
  3. IT技術
  4. 【中編】 DeepLens で顔認識をしてみた~実践編~

【中編】 DeepLens で顔認識をしてみた~実践編~

中編~DeepLens で顔認識をしよう!~

前回は、「AWS の組み込みモデルを使うだけで顔認識ができる」ことを確認しました。

この「実践編」では、誰の顔であるかを Rekognition サービスに問い合わせてみようと思います。

やや手順が長いので、今回は「Rekognition」の紹介と、DeepLens プログラムの動作確認までを扱います。

前回の記事はこちら

こちらの記事もオススメ!

Rekognition サービス

Rekognition」サービスは、AWS が提供している「従量課金型の画像認識 API」です。

【Amazon Rekognition】
https://aws.amazon.com/jp/rekognition/

指定した画像や動画のデータを分析し、オブジェクトやシーンを検出してくれる他、顔の分析・比較も行えます。

使い方はとても簡単で、AWS コンソールの Web から写真をアップロードするだけです。

Python から Rekognition を使う

プログラムから使うには、次のようなコードを書きます。

カスタムラベル

Rekognition は、「コレクション」という単位で、カスタムラベルを作ることができます。

プログラム中、 MYCOLLECTIONID = 'sample'の部分です。

カスタムラベル」というのは、あらかじめ登録しておく画像のことです。

例えば、「山口さんの顔認識をしたい」場合、山口さんの顔写真を登録しておく必要があります。

このカスタムラベルを使うと、誰の顔であるか認識できるようになるのです。

DeepLens + Rekognition で顔認識をする手順

それでは、DeepLens でやってみましょう。

プログラムから誰の顔であるかを識別させるためには、次の手順が必要です。

  1. コレクションを作成する
  2. コレクションにあらかじめ、特定の人の顔画像を登録しておく
  3. ターゲットとなる写真を、Rekognition にコレクション指定して問い合わせる

上記の手順をそれぞれプログラム中に当てはめると、 createCollection() indexFaces(key,extID) searchFaces(key) となります。

準備

写真をアップロード

登録や問い合わせに使う写真を S3 にあらかじめアップロードしておけば、その写真を指定するだけで、簡単に問い合わせを行うことができます。

適当なバケットに、認識したい人の顔写真を test.jpg というファイル名でアップロードしておきましょう。

コレクション名を記録

この段階で作成した、Rekognition のコレクションは後で使いますので、コレクション名を記録しておいて下さい。

コード

実際にコードを書いてみると、以下のようになります。

注意事項

注意事項は、以下2つです。

写真の容量制限

使う写真は、あまり容量が大きすぎるとエラーになります。

2M以下のファイルを扱うことをお勧めします。

(※ AWS の仕様によると、5M以下を推奨しています。)

効率よく開発するなら AWS-CLI

Rekognition は Python で簡単に試せますが、AWS-CLI を使う方が効率よく開発できると思います。

私の場合は、上記のプログラムで、必要な関数だけを(他のものをコメントアウトして)使うことで対応しました。

逆に言うと、Web のコンソールからの操作では、カスタムラベルなどを試すことはできないので注意が必要です。

DeepLens 側に作り込む場合の全体設計

それでは DeepLens で、顔認識をしてみましょう!

DeepLens から Rekognition を呼び出す方法は、2つあります。

  1. DeepLens から「直接」Rekognition API を呼ぶ方法
  2. S3 にアップロードしてから、S3 の「イベントフック」を使って Rekognition APIを呼ぶ方法

前者はデバッグがやりにくいので、今回は S3 にアップロードして、イベントフックに Lambda プログラムとして実装する方法をとります。

S3 のイベントフックから Rekognition を呼ぶ

手順は以下の通りです。

  1. DeepLens から S3 に画像をアップロードする
  2. アップロードした画像を指定して、Rekognition に問い合わせを行う

これでプログラム骨子はできるのですが、確認方法として、今回はSNSサービスを使い、認識された顔が特定の人物だったらメールを出すという仕様にしてみます。

DeepLens 側プログラム

次のコードが DeepLens 側のプログラムです。

冒頭のコード

関数を入れる

まず、新しい関数を1つ冒頭に入れます。

アクセスキー、シークレットアクセスキーはあらかじめ用意しておく必要があります。

末尾のコード

以下は、既存のプログラムの末尾に加える部分です。

写真のサイズを調整

cv2.resize() で写真の大きさを小さくしています。

これをやらないと、先ほど述べた容量制限にひっかかってエラーになります。

アップロード

後は、リサイズしたものを書き出して、それを uploadS3() で S3 にアップロードします。

動作確認

さあ、ここまで出来たら、一度 DeepLens にデプロイして、動作を確認してみましょう。

指定したバケットに正しくアップロードされているか、AWS コンソールを使って確認して下さい。

もし正しくアップロードされていないのであれば、後述のデバッグガイドを参照してチェックしましょう。

DeepLens プログラムの動作確認

プログラムができたら、動作確認が必要なので、「デプロイ」を行います!

デプロイのポイント

デプロイの方法は前回の記事に書きましたが、ポイントは2つあります。

  1. DeepLens 側の Lambda プログラムのバージョンを上げる
  2. プロジェクトのデプロイで、正しいバージョンを指定する

これらをきちんと行わないと、DeepLens 側に変更したファイルが送られてきません。

デプロイが上手く行けば、プログラムは正常に動作し、特定の人物の顔を認識すると、S3 にアップロードしてくれます。

デバッグ方法

さて、ここまで完璧に実行できた方には必要ありませんが、誰しもミスはあり得ます。

そこで、DeepLens のデバッグ方法について解説します。

DeepLens でデバッグをするためには、SSH で DeepLens 側にログインする必要があります。

ポイント

  1. SSH で接続する
  2. 接続アカウント名は「 AWS_CAM 」
  3. パスワードは最初に設定したパスワード(重要!)

パスワードはメモ必須

パスワードを忘れた場合、 当然ながら DeepLens は初期化しなければいけません。

しかし、「ファクトリーリセット」はとても面倒で手間がかかります。

パスワードは、きちんとメモしておきましょう。

DeepLens プログラムの起動・終了方法

さて、ログインできたら、GreenGrass の実行ディレクトリーに移動します。

実効ディレクトリーは次の通りです。

/opt/awscam/greengrass/deployment/xxxxxxx/

このディレクトリから、 HelloWorld.py というファイルを探してください。

プログラムを起動する

HelloWorld.py ファイルを直接実行させようとすると、IotPayroll を使っているせいで、エラーになってしまいます。

そこで、次のようにして実行させます。

cd /opt/awscam/greengrass/core ./greengrassd start

プログラムを終了する

プログラムを停止させる時には、以下のようにしてください。

./greengrassd stop

これで、DeepLens 側のプログラムの起動と終了ができますね。

まとめ

ポイントは以下の3つです。

  1. DeepLens プログラムの変更方法(バージョンが正しく設定されているか?)
  2. APPID の設定
  3. プログラムのスペルミスをしていないか?

デバッグは SSH を使う

Lambda プログラムのエディタは、シンタックスチェックをしてくれません。

コピペをすると、ダブルバイトスペースが入ってしまったり、想定外のことが多く起こります。

そのため、ssh を使って、DeepLens 側でデバッグしてエラーメッセージを見る必要があります。

Greengrass はエラーメッセージが確認できない

ただし、Greengrass で起動したものは、メッセージがローカル表示されません。

これは、先述の IoTPayRoll でサーバ側に送信されてしまうためです。

そこでまず、DeepLens 側で python HelloWorld.py を叩いてみて、シンタックスエラーが起こらないかを確認して下さい。

権限は正しく設定する

また、DeepLens 側のプログラムは正しい権限で設定されていなければなりません。

必ず、Deploy を使って最初に転送して、その後は絶対に権限を変えないようにしてください。

後編へつづく!

では、次回は「仕上げ編」です。

プログラムを実際に動かして、確認メールを送信してみようと思います。

機械学習でのシステム開発依頼・お見積もりはこちらまでお願いします。
また、機械学習系エンジニアを積極採用中です!詳しくはこちらをご覧ください。

続きの記事はこちら

こちらの記事もオススメ!

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事

採用情報

\ あの有名サービスに参画!? /

バックエンドエンジニア

\ クリエイティブの最前線 /

フロントエンドエンジニア

\ 世界はお前の手の中に・・・ /

モバイルエンジニア

\ サービスの守り神! /

インフラエンジニア