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のイメージ->Lite、Full)
OpenCVをインストール(3.4.0でよろしければこのページの最初の方参照)
face_classficationはKerasを使っています。バックエンドにはTensorFlowを使ってみます。
ラズパイにTensorFlowとKerasをインストール
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)
ラズパイ3で静止画やLiveカメラから年齢・性別を推測してみる
Leave a Reply