JCV社の顔属性SDKでカメラに写った人の年齢や性別などの属性情報を取得する:facesOfPastTimeRange編
SDK紹介
JCV属性分析SDKはオフライン店舗における、顧客の行動分析の提供をコンセプトに開発されたSDKです。
SDKの紹介や導入方法については「JCV社の顔属性SDKでカメラに写った人の年齢や性別などの属性情報を取得する:currentTrackingFace編」に記載されているので、そちらをご参照ください。
属性情報を取得
属性情報を取得するためには、①解析する画像をSDKにわたす、②解析結果をSDKから受け取る、の2つのステップが必要です。ここではfacesOfPastTimeRange APIを利用して顔に関する属性情報を取得してみます。
①解析する画像をSDKにわたす方法については、前述の「JCV社の顔属性SDKでカメラに写った人の年齢や性別などの属性情報を取得する:currentTrackingFace編」に記載されています。そちらをご参照ください。
②解析結果をSDKから受け取る
facesOfPastTimeRange APIから顔に関する属性値を取得するには以下のように実装します。rangeには過去何ミリ秒の属性値を取得するのかを設定します。
scope.launch {
while (!isRelease) {
try {
// 属性取得時に何ミリ秒過去までの属性値を取得するか
val range = 10000L
// 現在の身体情報を取得
val faces = InsightSDK.service().facesOfPastTimeRange(range)
// 検出した顔をリストに表示
drawAttr(faces)
SystemClock.sleep(range)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
取得したオブジェクトを画面に表示する
facesOfPastTimeRangeからはFaceのリストが取得できます。取得できる属性はTrackingFaceと似ています。
public class Face extends AbsAttr implements Serializable, Cloneable {
private int faceId;
private int age;
private String gender;
private StImage faceImage;
private float faceImageQuality;
private long watchTime;
private long happyEmotionTime;
private long othersEmotionTime;
private long calmEmotionTime;
private int glasses;
private int mask;
private int charmScore;
private byte[] faceFeature;
private int beard;
// 中略
}
属性の詳細は以下のとおりです。
No. | 物理名 | 説明 | 例 |
---|---|---|---|
1 | faceId | face id(顔のユニーク ID) | 整数値 |
2 | gender | 性別 | M:男性;F:女性 |
3 | age | 年齢 | 整数値 |
4 | watchTime | 注視時間(ms) | 整数値 |
5 | otherEmotionTime | 「喜び」と「穏やか」以外が検知された時間(ms) | 整数値 |
6 | calmEmotionTime | 「穏やか」が検知された時間(ms) | 整数値 |
7 | happyEmotionTime | 「喜び」が検知された時間(ms)※ドキュメントに記載なし | 整数値 |
8 | glasses | メガネ | 0:利用せず;1:メガネ;2:サングラ ス;-1:不明 |
9 | mask | マスク | 0:no;1:yes;-1:不明 |
10 | charmScore | 魅力スコア | 整数値(84,98…) |
11 | faceImageQuality | クロップされた顔画像のクオリティスコア | 0〜1 |
12 | beard | ひげ | 0:no;1:yes;-1:不明 |
faceImageには認識された顔画像のバイトデータが設定されているのでBitmap等に変換して画像を表示することができます。
基本的にcurrentTrackingFaceと同じように顔属性が取得できるようです。
まとめ
以上、JCV社の顔属性SDKを利用して顔の属性情報を取得してみました。
facesOfPastTimeRange APIは基本的な性能などはcurrentTrackingFaceと同じようです。過去の一定期間における顔に関する属性を取得することができます。リアルタイムで属性情報を取る必要がない場合、一定時間の情報をマージして情報量を減らしたい場合などに活用できそうです。