みなさん、顔解析してますか?
僕はやったことがないので、Tencent Cloudのサービスの1つである"Face Recognition API"を用いて、画像の顔解析を試してみました。
TCCLIの準備
$ pip3 install tccli-intl-en
$ tccli --version
3.0.322.1
$ tccli configure
TencentCloud API secretId[None]: xxx
TencentCloud API secretKey[None]: xxx
Default region name[ap-guangzhou]: ap-tokyo
Default output format[json]: json
tccliが使えるようになりました。
DetectFace APIを叩いてみる
当該のAPIはap-tokyoリージョンでサポートされていなかったため、
ap-singaporeを指定し、下記コマンドを実行。
tccli iai DetectFace --region ap-singapore --Url https://mynet.co.jp/assets/uploads/sites/2/2017/05/c7252e9ab2c39d35379de17646d163c5.jpg
2秒ほどでレスポンスが返ってきました。結果は以下。
{
"ImageWidth": 920,
"ImageHeight": 800,
"FaceInfos": [
{
"X": 371,
"Y": 103,
"Width": 209,
"Height": 272,
"FaceAttributesInfo": {
"Gender": 0,
"Age": 0,
"Expression": 0,
"Glass": false,
"Pitch": 0,
"Yaw": 0,
"Roll": 0,
"Beauty": 0,
"Hat": false,
"Mask": false,
"Hair": {
"Length": 0,
"Bang": 0,
"Color": 0
},
"EyeOpen": false
},
"FaceQualityInfo": {
"Score": 0,
"Sharpness": 0,
"Brightness": 0,
"Completeness": {
"Eyebrow": 0,
"Eye": 0,
"Nose": 0,
"Cheek": 0,
"Mouth": 0,
"Chin": 0
}
}
}
],
"FaceModelVersion": "3.0",
"RequestId": "1482e17c-5108-4624-803f-75eb257d3b59"
}
FaceInfos.X,YからWidth,Heightを取ると
FaceAttributesInfo, FaceQualityInfoが空値なのは、それぞれのデフォルトがFalseなためです。
ためしに、全部入りのレスポンスを受け取ってみましょう。
tccli iai DetectFace --region ap-singapore --Url https://mynet.co.jp/assets/uploads/sites/2/2017/05/c7252e9ab2c39d35379de17646d163c5.jpg --NeedFaceAttributes 1 --NeedQualityDetection 1
{
"ImageWidth": 920,
"ImageHeight": 800,
"FaceInfos": [
{
"X": 371,
"Y": 103,
"Width": 209,
"Height": 272,
"FaceAttributesInfo": {
"Gender": 99,
"Age": 33,
"Expression": 85,
"Glass": false,
"Pitch": 12,
"Yaw": 6,
"Roll": -4,
"Beauty": 69,
"Hat": false,
"Mask": false,
"Hair": {
"Length": 1,
"Bang": 1,
"Color": 2
},
"EyeOpen": true
},
"FaceQualityInfo": {
"Score": 92,
"Sharpness": 1045,
"Brightness": 62,
"Completeness": {
"Eyebrow": 99,
"Eye": 99,
"Nose": 99,
"Cheek": 99,
"Mouth": 99,
"Chin": 99
}
}
}
],
"FaceModelVersion": "3.0",
"RequestId": "e63e1c5c-d849-41cc-821f-00fc2abf75a4"
}
詳細な情報を取得できました。
眼鏡や帽子・マスクの有無や推定年齢などがありますね。
Pitch/Yaw/Roll値も取れるため、実装によっては立体的な演出も加えられそうですね。素晴らしい。
1枚の画像から複数の顔を検知する必要がある場合は、--MaxFaceNum値を渡します。
デフォルトは1なので、数量を明示しないと顔を複数検知できる画像でも、1つしか検知しません。
検知の優先条件は今の所不明。
次のステップ
コマンドラインから--Imageで、実データをbase64変換して渡してみたところ、bash: argument list too manyで渡せませんでした。
リダイレクトで渡せそうですが、せっかくなので次はSDKを用いた代替の実装をした上で、実データ渡しの対応と、活用例として簡単な画像処理を試してみます。
おわりに
株式会社マイネットでは一緒に働く仲間を募集しています!
弊社では様々なゲームタイトルをより長く、安定して運営していくために、インフラ最適化にも積極的に取り組んでいます。興味のある方、ご応募お待ちしております!
https://mynet.co.jp/recruitment/