【感情認識と年齢・性別推定】ailia SDKで複数のモデルを簡単に実践 〜Mac×Pythonで10分実装〜

画像データからの感情認識や年齢・性別推定の実装には様々な手段がありますが、ailia SDK(アイリアSDK)を使えば複数のモデルを数分で簡単に試すことができます。

この記事は、以下のような方におすすめです:

● 感情認識や年齢・性別推定の各種モデルを実際に試してみたい方
● プログラミング初心者でAIに興味がある方
● 感情認識や年齢・性別推定を自社サービスに組み込みたい方

本記事では、Apple Silicon搭載Macで、Pythonを使って環境構築から感情認識・年齢/性別推定モデルの実践までを10分で実装する手順を解説します。

1. ailia SDKとは?

AIモデルの実装を簡単に行えるSDKです。以下の特徴があります:

  • 高速な推論エンジンによる、スムーズな実行
  • 画像認識、物体検出、姿勢推定など、370以上の豊富な事前学習済みモデル
  • Mac、Windows、Linux、組み込みボード(Jetson、Raspberry Pi)まで対応したクロスプラットフォーム
  • 多言語対応(Python/C++/Unity(C#)/Java(JNI)/Kotlin/Rust/Flutter)
  • GPU対応(CUDA、Vulkan、Metal)

2. 環境構築(所要時間:約2分)

動作条件

  • Python 3.6 以降

インストール手順

  1. まず、ailia SDKをインストールします:
    pip3 install ailia
  2. サンプルコードをダウンロードして、移動します:
    git clone https://github.com/axinc-ai/ailia-models
    cd ailia-models
  3. 依存ライブラリをインストールします:
    pip3 install -r requirements.txt

3. 概要把握

今回は5つのモデルを順番に紹介していきます。用途に応じて最適なモデルを選択してください:

  • hsemotion: 感情分析(確率値付き)
  • ferplus: シンプルな感情分析
  • face_classification: 感情・性別分析
  • age-gender-recognition-retail: 年齢・性別分析
  • mivolo: 年齢・性別分析(確率値付き)

4. モデル実装

4.1 出力値も簡単に得られる感情認識モデル(所要時間:約3分)
  1. 概要:
    • 顔の画像データから、高速で感情認識ができます。
  2. 環境を整えます:
    • まずはailia-modelsリポジトリ内の該当フォルダに移動します。
      cd face_recognition/hsemotion
  3. サンプル画像で試してみましょう
    • 以下のコマンドを実行します。なお、初回実行時は、 onnx ファイルと prototxt ファイルの自動ダウンロードが行われ、多少時間が掛かります
      python3 hsemotion.py
    • 無事に実行されれば、下記の出力をターミナル内で確認できるはずです。
      INFO hsemotion.py (121) : lenna.png
      INFO hsemotion.py (132) : Start inference…
      INFO hsemotion.py (146) : emotion_class_count=4
      INFO hsemotion.py (150) : + idx=0
      INFO hsemotion.py (151) :   category=5 [ Neutral ]
      INFO hsemotion.py (153) :   prob=0.6241492033004761
      INFO hsemotion.py (150) : + idx=1
      INFO hsemotion.py (151) :   category=4 [ Happiness ]
      INFO hsemotion.py (153) :   prob=0.15087740123271942
      INFO hsemotion.py (150) : + idx=2
      INFO hsemotion.py (151) :   category=7 [ Surprise ]
      INFO hsemotion.py (153) :   prob=0.07534907758235931
      INFO hsemotion.py (150) : + idx=3
      INFO hsemotion.py (151) :   category=6 [ Sadness ]
      INFO hsemotion.py (153) :   prob=0.05992703512310982
      INFO hsemotion.py (154) : 
      INFO hsemotion.py (155) : Script finished successfully.
  4. 自分の画像データや動画データで試してみましょう:
    • ご自身の画像データを 同フォルダに test.png として保存してください。その後、以下のコマンドを実行します。
      python3 hsemotion.py --input test.png
    • 同様に、ご自身の動画データについては、下記実行で出力を確認できます。
      python3 hsemotion.py --video VIDEO_PATH
    • 最も手軽な検証方法では、自身のウェブカメラを起動する形でしょう。VIDEO_PATH に 0 を指定するだけで、動画ファイルの代わりにウェブカメラからの入力を利用できます。なお、スクリプトを実行しているターミナル上で Ctrl キーと C キーを同時に押せば、スクリプトは停止します。
      python3 hsemotion.py --video 0
4.2 よりシンプルな感情認識モデル(所要時間:約1分)
  1. 概要:
    • 顔の画像データから、高速で感情認識ができます。
  2. 環境を整えます:
    • まずはailia-modelsリポジトリ内の該当フォルダに移動します。
      cd face_recognition/ferplus
  3. サンプル画像で試してみましょう:
    • 以下のコマンドを実行します。なお、初回実行時は、 onnx ファイルと prototxt ファイルの自動ダウンロードが行われ、多少時間が掛かります。
      $ python3 ferplus.py
    • 無事に実行されれば、下記の出力をターミナル内で確認できるはずです。前述のhsemotionより、シンプルな出力になっています。
      INFO ferplus.py (218) :  emotion: happiness
      INFO ferplus.py (220) : Script finished successfully.
  4. 自分の画像データや動画データで試してみましょう:
    • ご自身の画像データを 同フォルダに test.png として保存してください。その後、以下のコマンドを実行します。
      python3 ferplus.py --input  test.png
    • 同様に、ご自身の動画データについては、下記実行で出力を確認できます。
      python3 ferplus.py --video VIDEO_PATH --savepath SAVE_VIDEO_PATH
    • 最も手軽な検証方法では、自身のウェブカメラを起動する形でしょう。VIDEO_PATH に 0 を指定するだけで、動画ファイルの代わりにウェブカメラからの入力を利用できます。なお、スクリプトを実行しているターミナル上で Ctrl キーと C キーを同時に押せば、スクリプトは停止します。
      python3 ferplus.py --video 0
4.3 感情と性別を認識するモデル(所要時間:約1分)
  1. 概要:
    • 顔の画像データから、高速で感情/性別認識ができます。
  2. 環境を整えます:
    • まずはailia-modelsリポジトリ内の該当フォルダに移動します。
      cd face_recognition/face_classification
  3. サンプル画像で試してみましょう:
    • 以下のコマンドを実行します。なお、初回実行時は、 onnx ファイルと prototxt ファイルの自動ダウンロードが行われ、多少時間が掛かります
      python3 face_classification.py
    • 無事に実行されれば、下記の出力をターミナル内で確認できるはずです。
      INFO face_classification.py (90) : lenna.png
      INFO face_classification.py (99) : Start inference…
      INFO face_classification.py (90) : lenna.png
      INFO face_classification.py (99) : Start inference...
      INFO face_classification.py (112) : emotion_class_count=3
      INFO face_classification.py (116) : + idx=0
      INFO face_classification.py (118) : category=6 [ neutral ]
      INFO face_classification.py (120) : prob=0.410888671875
      INFO face_classification.py (116) : + idx=1
      INFO face_classification.py (118) : category=4 [ sad ]
      INFO face_classification.py (120) : prob=0.1993408203125
      INFO face_classification.py (116) : + idx=2
      INFO face_classification.py (118) : category=0 [ angry ]
      INFO face_classification.py (120) : prob=0.1951904296875
      INFO face_classification.py (121) :
      INFO face_classification.py (136) : gender_class_count=2
      INFO face_classification.py (140) : + idx=0
      INFO face_classification.py (142) : category=0 [ female ]
      INFO face_classification.py (144) : prob=0.79931640625
      INFO face_classification.py (140) : + idx=1
      INFO face_classification.py (142) : category=1 [ male ]
      INFO face_classification.py (144) : prob=0.2005615234375
      INFO face_classification.py (145) : Script finished successfully.
  4. 自分の画像データや動画データで試してみましょう:
    • ご自身の画像データを 同フォルダに test.png として保存してください。その後、以下のコマンドを実行します。
      python3 face_classification.py --input test.png
    • 同様に、ご自身の動画データについては、下記実行で出力を確認できます。
      python3 face_classification.py --video VIDEO_PATH
    • 最も手軽な検証方法では、自身のウェブカメラを起動する形でしょう。VIDEO_PATH に 0 を指定するだけで、動画ファイルの代わりにウェブカメラからの入力を利用できます。なお、スクリプトを実行しているターミナル上で Ctrl キーと C キーを同時に押せば、スクリプトは停止します。
      python3 face_classification.py --video 0
4.4 年齢と性別を認識するモデル(所要時間:約1分)
  1. 概要:
    • 顔の画像データから、高速で年齢/性別認識ができます。下記は、テスト動画です。
  2. 環境を整えます:
    • まずはailia-modelsリポジトリ内の該当フォルダに移動します。
      cd face_recognition/age-gender-recognition-retail
  3. サンプル画像で試してみましょう:
    • 以下のコマンドを実行します。なお、初回実行時は、 onnx ファイルと prototxt ファイルの自動ダウンロードが行われ、多少時間が掛かります
      python3 age-gender-recognition-retail.py
    • 無事に実行されれば、下記の出力をターミナル内で確認できるはずです。
      INFO age-gender-recognition-retail.py (201) : demo.jpg
      INFO age-gender-recognition-retail.py (219) : Start inference...
      INFO age-gender-recognition-retail.py (243) : gender is: Female (98.73)
      INFO age-gender-recognition-retail.py (244) : age is: 25
      INFO age-gender-recognition-retail.py (246) : Script finished successfully.
  4. 自分の画像データや動画データで試してみましょう:
    • ご自身の画像データを 同フォルダに test.png として保存してください。その後、以下のコマンドを実行します。
      python3 age-gender-recognition-retail.py --input test.png
    • 同様に、ご自身の動画データについては、下記実行で出力を確認できます。
      python3 age-gender-recognition-retail.py --video VIDEO_PATH --savepath SAVE_VIDEO_PATH
    • 最も手軽な検証方法では、自身のウェブカメラを起動する形でしょう。VIDEO_PATH に 0 を指定するだけで、動画ファイルの代わりにウェブカメラからの入力を利用できます。なお、スクリプトを実行しているターミナル上で Ctrl キーと C キーを同時に押せば、スクリプトは停止します。なお、筆者が試した場合、実年齢より5〜10歳若めの出力値が出ておりました。
      python3 age-gender-recognition-retail.py --video 0
4.5 複数の顔から年齢と性別を認識するモデル(所要時間:約2分)
  1. 概要:
    • 顔の画像データから、高速で年齢/性別認識ができます。
  2. 環境を整えます:
    • まずはailia-modelsリポジトリ内の該当フォルダに移動します。
      cd face_recognition/mivolo
  3. サンプル画像で試してみましょう:
    • 以下のコマンドを実行します。なお、初回実行時は、 onnx ファイルと prototxt ファイルの自動ダウンロードが行われ、多少時間が掛かります
      python mivolo.py
    • 無事に実行されれば、下記の出力をターミナル内で確認できるはずです。下記出力画像の通り、男性36歳、女性28歳、男性8歳、男性7歳を認識しているのがわかります。

      INFO mivolo.py (372) : input.jpg
      np.max(input_data) = 1.0
      output_YOLO.shape =
      (8400, 6)
      output_YOLO =
      [[218.41 361.33 166.76 557. 0.9 0. ]
      [218.49 361.18 166.43 557.11 0.9 0. ]
      [218.4 361.18 166.69 557.05 0.89 0. ]
      ...
      [218.84 360.85 166.74 557.41 0. 0. ]
      [218.19 362.1 166.62 555.28 0. 0. ]
      [311.41 445.52 151.74 387.32 0. 0. ]]
      bbox_face.shape =
      (40, 5)
      bbox_person.shape =
      (40, 5)
      INFO mivolo.py (502) : saved at : output.png
      INFO mivolo.py (505) : Script finished successfully.
  4. 自分の画像データや動画データで試してみましょう:
    • ご自身の画像データを 同フォルダに test.png として保存してください。その後、以下のコマンドを実行します。
      python3 mivolo.py --input test.png --savepath test_output.png
    • 同様に、ご自身の動画データについては、下記実行で出力を確認できます。
      python3 mivolo.py --video VIDEO_PATH --savepath SAVE_VIDEO_PATH
    • 最も手軽な検証方法では、自身のウェブカメラを起動する形でしょう。VIDEO_PATH に 0 を指定するだけで、動画ファイルの代わりにウェブカメラからの入力を利用できます。なお、スクリプトを実行しているターミナル上で Ctrl キーと C キーを同時に押せば、スクリプトは停止します。なお、筆者が試した場合、実年齢より5歳は若めの出力値が出ておりました。
      python3 mivolo.py --video 0

5. 実用上の注意点

  • 精度への影響要因
    • 照明条件:明るさや光の方向により精度が変化
    • 顔の角度:正面からの撮影が最も精度が高い
    • 画像品質:解像度が低いと精度が低下
  • モデル選択のポイント
    • 感情分析ならhsemotion、ferplus、face_classification
    • 性別分析ならface_classification、age-gender-recognition-retail、mivolo
    • 年齢分析ならage-gender-recognition-retail、mivolo
  • プライバシーへの配慮
    • 個人情報の取り扱いに関する適切な同意取得
    • データの保存・管理における適切な暗号化

6. まとめ

わずか10分で、感情認識と年齢・性別推定モデルを実装できました!

ailia SDKでは、この他にも370以上の事前学習済みモデルを活用でき、画像認識、物体検出、自然言語処理など幅広い分野に対応しています。

「高速」「使いやすさ」「豊富なモデル」を特徴とするailia SDKは、AIを実装する際の強力なツールとなるでしょう。ぜひ、ご自身の開発プロジェクトでお試しください。

7. 参考リンク

土橋克寿

証券会社、ビジネス誌副編集長を経て2013年に独立。欧米中印のスタートアップ取材や、各国首脳・テック企業幹部へのインタビューを多数実施。Yahoo!ニュース エキスパートなど国内外メディアで執筆。2018年より株式会社クロフィー代表取締役として、AI開発・PRコンサルティングなどを手掛ける。
https://news.yahoo.co.jp/expert/authors/dobashikatsutoshi
https://x.com/dobatty

SHARE THIS ARTICLE