ブロックチェーン・AI・システム開発の株式会社INDETAIL

感情がわかる!?ラズパイとEmotion APIで表情認識をしてみよう

2016.10.04
tacck

秋も深まり、札幌は日に日に涼しくなってきています。
涼しい今のうちに、色々と遊びに行きたいtacckです。こんにちは。

今回は、Raspberry Piでカメラの利用と画像処理として、顔の認識を行なってみます。
ただ、ラズパイでカメラを利用した顔認識の利用例は、ネット上にすでにたくさんあるので、今回はそこにもう一手間加えてみたいと思います。

最近は、いろいろな所で「人の感情」に関する研究が行なわれており、その成果をWebAPIとして利用できたりします。
その一つとしてMicrosoftが提供している"Cognitive Services Emotion API"というものを利用し、「表情の認識」を行なってみたいと思います。

前提

今回利用した機材はこちらです。

  • Raspberry Pi 2 Model B
  • Raspberry Pi Camera Module

OSは"Raspbian JESSIE"の最新状態になっている前提とします。

また、イーサネット、Wi-Fiなどによって、インターネットに接続できる状態となっている前提とします。

パッケージのインストールなど

表情認識を行なうまでに、処理としては下記のような流れとなります。

  • カメラで撮影
  • 撮影した画像に「顔」が含まれているか分析
  • 「顔」が含まれていればEmotion APIへ画像を送信
  • Emotion APIの分析結果を画像に描画して保存

このうち、撮影した画像に「顔」が含まれているか分析Emotion APIの分析結果を画像に描画して保存には"
OpenCV"という「画像処理・画像解析および機械学習等の機能」を持ったライブラリを利用します。
ここでは詳細は割愛しますが、非常に手軽で強力なライブラリとなっています。

また、カメラで撮影について、今回利用するラズパイ標準カメラをOpenCVで使う方法を検索すると、かなり手間のかかる手順の紹介ページが出てきます。
しかし、現在では"Picamera"というライブラリを使うことで、標準カメラを簡単に取り扱え、撮影した画像をOpenCVで容易に処理できるようになります。

では、順番にセットアップしていきましょう。

Picamera

公式にインストール手順があるので、その通りに実行すれば良いです。

OpenCV

こちらも、パッケージが準備されているので、下記コマンドを実行すればすぐに使えるようになります。

Emotion API

こちらは、先に紹介したとおり、MicrosoftのCognitive Servicesの一つです。

Emotion APIでは、画像の中から人の顔を検出し、その表情について複数の感情の評価を行なって、結果を返却してくれるものです。

感情については、下記が評価されます。

  • anger (怒り)
  • contempt (軽蔑)
  • disgust (嫌悪)
  • fear (恐怖)
  • happiness (喜び)
  • sadness (悲しみ)
  • surprise (驚き)
  • neutral (はっきりしない)

利用方法ですが、ユーザ登録を行なえば、ある程度は無料で使えるようになっています。
Microsoft アカウントを利用してサインインを行なってください。

20160925001

サインインに成功すると、上記のように利用するAPIの選択画面に遷移します。
今回は、Emotion APIを選択しましょう。

ページ下部に規約同意のチェックボックスがあるのでチェックを入れ、Subscribeボタンをクリックしてください。

20160925002

成功したら、上記のようにAPIの登録状況を確認できるページへ遷移します。
今回は、このページのKey 1を利用します。標準では非表示の状態ですが、Showをクリックすればページ上に表示されます。

実装

今回利用したコードは下記です。
特にEmotion APIを呼び出して結果を画像に描画する処理については、こちらのページを参考にさせていただきました。

上記セットアップ時に表示されたKey 1の値を、下記コードの[Key 1]に置き換えて利用してください。

20160925001

20160925003

実行した結果、上記のように顔が検知されて、横に表情の分析結果が表示されています。

まとめ

ラズパイと標準カメラを利用して、人の顔の表情認識を行なうことができました。
これを応用すれば、例えば「笑顔の写真」だけを保存する・・・、というようなこともできますね。

みなさんも、ラズパイのカメラで色々と遊んでみてください!

tacck Takuya KIHARA

エンジニア (モバイルアプリ、フロントエンド、バックエンド、インフラ) 得意なことは、領域をまたいで考え、開発すること。 ブログでは、主にAnsible、Docker、Raspberry Piのことを書いています。 好きなフィギュアスケートの技は、スプレッド・イーグルです。