ailia SDKを試す<第27回> 評価版ailia SDKとUnity6.2で顔検出&属性推定

 今回は,オブジェクト認識の応用例として顔の検出と,検出した顔から性別/感情といった属性を推定するサンプル・アプリを紹介します.使用するのはAILIA Trialに含まれるAiliaDetectorFaceSample.csです.Unity 6.2(Windows)上で動作確認し,さらにAndroid端末にビルドして実機で検証するところまで解説します.
 なお,環境構築の基本手順は前回(https://interface.cqpub.co.jp/ailia026/)と同様です.必要に応じて前回を参照してください.また,性別や感情はあくまで推定であり,結果が実際と一致するとは限りません.利用時はプライバシーと倫理に配慮が必要です.
 
●実験環境と事前準備

 今回は表1に示す環境で実験を行います.

項目 内容
オブジェクト認識ソフト AILIA Trial v1.5.0(AiliaDetectorFaceSample.cs使用)
開発環境 Unity 6(6000.2.9f1,Windows版)
Android 開発環境 Android Studio Narwhal 3 Feature Drop(2025.1.3)
検証端末 Sharp AQUOS sense6s(Android)
カメラ入力 端末内蔵カメラ(フロント/リア対応)

表1 実験環境

 次に,実験に入る前の準備として次を行います.
***

・1,AILIA Trialを入手し,前回記事の手順に従ってUnityプロジェクトに導入
・2,Unityのビルド・プロファイルをAndroidに切り替える
・3,シーン・リストにailia_sample_selectorとailia_detector_faceを追加する
***
 
●ビルドの設定
 本サンプルでは,Unity側のビルド設定(ビルド・プロファイル)は基本的にデフォルトの設定が多いですが,実機で安定動作させるために,幾つかの項目を確認/調整しています.ここでは筆者が検証に使用した設定を紹介します.
▲1,Platform Settings
 図1より,デバッグ・ログを有効化し,実行中の挙動を確認しやすくなります.リリース版を作成する際はオフにしてビルド時間を短縮します.
▲2,Other Settings
 図2より,ここはデフォルトのままですが,GPUを選択するとバッファ・エラーが発生する場合があるため,CPU固定を推奨します.
▲3,APIレベル
 図3より,実機環境(AQUOS sense6s)に合わせてバージョンを13にしています.
▲4,Configuration
 図4より,Scripting Backend「IL2CPP」がデフォルトでしたので,そのままです .
▲5,ログ出力時の設定
 図5より,ログ出力時の設定はErrorとAssetをFullにしています.詳細なログを出力し,原因追跡やパフォーマンス確認に有効です.


図1 Platform Settings

 
図2 Other Settings
図3 APIレベル
図4 Configuration


図5 ログ出力時の設定

 
●アプリの実行と結果
 設定が完了したので,UnityからAndroid向けにビルドを行い,実際のスマートフォン上でアプリを起動して検証を行います.起動時にカメラ関連の警告が幾つか表示されましたが,処理自体には影響なく,正常に実行できました.
 今回の被写体には,AIに生成させた
***
・笑顔
・怒り
・悲しみ
・困惑
***
の4種類の表情イラストを使用しました.スマートフォンのカメラでそれぞれの画像を撮影し,アプリがどの感情を検出するかを確認します.また,検出処理のパフォーマンスを確認するため,画面上に処理速度(FPS)を表示する処理を追加しています.実行結果を表2に示します.
 
絵の表情 入力画像 検出した表情 速度 [FPS]
笑顔 幸せ (happy) 約 5
怒り 怒り (angry) 約 5
悲しみ 悲しい (sad) 約 5
困惑 どちらでもない (neutral) 約 5
4つ同時 各感情を個別検出 約 4

表2 サンプル・アプリの実行結果

 
 なお,検出結果はカメラの揺れや明るさの変化,顔の向きなどの撮影条件によって影響を受けるため,必ずしも意図した分類結果と一致しない場合があります.とはいえ,今回の検証範囲では,多くのケースで入力イラストの表情に対応した妥当な推定結果が得られました.
 
●結果の考察
 困惑(confused)の画像に対しては,検出結果がneutral(どちらでもない)となりました.これは,使っている感情分類モデルに登録されているカテゴリが次の7種類のみであるためです.
***
“angry”,”disgust”,”fear”,”happy”,”sad”,”surprise”,”neutral”
***
 この中にconfused(困惑)が含まれていないため,最も近い表現としてneutralが選択されたと考えられます.従って,この結果はモデル仕様として正しい挙動といえます.
 
●処理速度
 実行中の検出速度は平均で約4~5FPS程度でした.フレームレートは決して高くありませんが,処理はリアルタイムで継続できており,モバイル端末でも十分に応答性のある動作を確認できました.今回は,単なるオブジェクト検出ではなく,1フレームごとに次に示す推論処理を連続で実行しています.
***
・1,物体検出による顔領域の抽出
・2,抽出した顔画像を用いた性別推定
・3,同じ顔領域を用いた感情推定
***
 このように,1枚の画像に対して3段階の推論を行う構成となっているため,オブジェクト検出単体と比較すると処理負荷が増えているで,フレーム・レートが低下することは自然な挙動です.
 
   *   *
 今回は,AILIA Trialに含まれるサンプルを利用し,Unity上で顔検出と属性推定を行うアプリを動作させ,さらにAndroid実機での挙動を確認しました.単なる物体検出とは異なり,顔領域の抽出に加えて,性別や感情といった属性推定をリアルタイムで実行できる点は,モバイル端末上でも十分に応用可能なことを示しています.
 今回使用した AiliaDetectorFaceSample.csは,画像処理/推論パイプラインがシンプルに整理されており,Unityプロジェクトへ組み込みやすい構成になっています.これを基盤として,複数人の同時検出,特定人物の追跡,アバタ表情の自動制御,接客端末や受付システムへの応用など,さらなる発展も期待できます.
 
 
氏森 充(うじもり・たかし)
約30年間,(株)構造計画研究所にてIoT,ビッグデータ,機械学習,AI関連のシステム開発や実務応用に従事.退職後はLLM(大規模言語モデル)関連の情報収集や技術動向の調査・発信に注力し,雑誌「Interface」でもLLM技術に関する記事を執筆中.