ラズパイでお顔の表情認識をやってみる


face_classficationを使ってみます。

この学習モデルでは、表情を7種類に分類しています。

(0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral)

この学習済みモデルはMITライセンスで公開されていて、表情認識には FER2013データセットを使用しています。FER2013データセットはKaggleのコンペ対象にもなっているものだそうです。

使っているデータ

顔検出にはハールトレーニングしたカスケードファイル、haarcascade_frontalface_default.xml

表情認識のデータセットには、fer2013_mini_XCEPTION.102-0.66.hdf5

ちなみに、FER -> Facial Expression Recognition


 

やってみます。

まずは環境整備

使ったのはラズパイ3ModelB+  (Raspbian Stretch)

(現RaspbianはBusterです。Stretchのイメージ->LiteFull

OpenCVをインストール(3.4.0でよろしければこのページの最初の方参照)

face_classficationはKerasを使っています。バックエンドにはTensorFlowを使ってみます。

ラズパイにTensorFlowKerasをインストール

2019/06/28現在、Raspbian StretchのPythonバージョンは3.5.3なので以下のような構成になります。

$ pip3 install numpy
$ sudo apt-get install libblas-dev liblapack-dev python3-dev libatlas-base-dev gfortran python3-setuptools
$sudo pip3 install https://github.com/lhelontra/tensorflow-on-arm/releases/download/v1.4.1/tensorflow-1.4.1-cp35-none-linux_armv7l.whl
$ sudo apt-get install python3-h5py
$ sudoapt-get install python3-pandas

$ sudo pip3 install matplotlib

$ sudo pip3 install keras

 

WisteriaHillの動作環境のライブラリバージョン

h5py 2.9.0
matplotlib  3.0.3
numpy  1.16.4
pandas  0.24.2
pillow  4.3.0
scipy  1.3.0
tensorflow  1.4.1
keras  2.1.3


face_classificationの学習済みモデルは公開リポジトリから取得します.

$git clone https://github.com/oarriaga/face_classification

でsrcディレクトリに移動してサンプルを起動してみようとしましたが失敗。

$cd /home/pi/face_classification/src

$python3 video_emotion_gender_demo.py

ImportError: cannot import name ‘imread’

これはscipy.miscの関数でのエラーですが、バージョン違いか?と思っていろいろ組み合わせを変えてみましたが解消しませんでした。

これは以下のコードで使われているのですが、しようがないので他のライブラリに変更しました。

/home/pi/face_classification/src/utils/preprocessor.py

コメントアウト(or 削除)

#from scipy.misc import imread, imresize

変更

return imread(image_name) -> return imageio.imread(image_name)

return imresize(image_array, size) -> return imageio.imresize(image_array, size)

 

普通にemotionのみ判断したい場合はvideo_emotion_color_demo.py

genderも一緒に判断する場合はvideo_emotion_gender_demo.py

前者だと30秒位で起動しますが、後者では50秒くらいかかります。

 


で、起動

ちょっと見づらいですが、happy womanと認識されています。

バックでは盛大にOpenCVがエラーを吐き出してますね、なんでしょう?

resize.cppで起きてるようですが無視していいエラーかな?。

 

この学習済みモデルでは、emotionのaccuracyは66%程度ですが、使ってみて「happy」の認識精度はいいように思えます。

想定する使い方はこうです。「はいチーズ」でにこっと笑ってもらって「happy」と認識したらなんかする….。


ちなみに、顔認識と併用するとこんな感じになります。

 


Next

この学習済モデルのgraphバイナリーを作成してMovidius NCSで使ってみる。

もともとがローカルで動作しているものだけどもっと高速化できるかも。

 


こういうプロジェクトもあります

感情を予測するツールキットを提供するプロジェクトEmoPy(project)

 EmoPy  ( GitHub )


 

ラズパイ3で静止画やLiveカメラから年齢・性別を推測してみる

 


 

Be the first to comment

Leave a Reply

Your email address will not be published.


*