Face++のDetect APIを使って女装コンテストを採点してみた


この記事は、[ハンズラボ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/handslab) の20日目の記事です

---

### 自己紹介
今年の10月に中途で入社いたしました[@jxxpsame](https://qiita.com/jxxpsame)です。
日々[ユニケージという謎テクノロジー](https://www.hands-lab.com/tech/entry/62.html)に触れております。

こうやってブログのような形式で何かをアウトプットするのは中学生の頃のyahoo!ブログ以来なのでガチガチに緊張してます。

---


### 概要
Face++のDetect APIを使って某球団の女装コンテストを採点してみました。

---

### 動機
- 所属するチームでpythonを学んでいこうという風潮があり勉強していたから
- 某球団のファンだから
- API使って何かやってみたかった
- ~~身内だけでもいいからウケたらいいなという下心~~

---

### 環境
- OS
 - MacOS Catalina
- 言語
 - Python 3.8
- 使用したAPI 
 - [Face++](https://www.faceplusplus.com/)のDetect API

---

### Face++って何
北京のMegviiが開発している顔認証プラットフォームの名称です。
Face++のDetect APIは顔を認証して様々な属性を取得できます。
今回はその属性の中からBeauty Scoreという属性を利用して採点します。

また、Face++の利用方法は以下の記事を参考にさせていただきました。
[Pairsをpythonで分析してみた〜顔写真編〜](https://note.com/ryohei55/n/n72084219f751)
[写真を送ると顔を検出して、顔面偏差値まで教えてくれるFace++APIのご紹介](https://qiita.com/markey/items/ac1d4f11aedc1e35626d)

---

### 採点対象
某球団の女装コンテスト参加者7名
（今村 石川 高橋 山下 戸郷 直江 横川）
画像は以下にアップされているものを利用しました。
[Instagram](https://www.instagram.com/explore/tags/gbog/)

---

### ソース
```python
import requests
import json
import pprint

# API
# key:人物名 value:画像のURLを辞書型で宣言
url_dict = {'人物名:画像のURL'}

# 対象の人の数ループ
for img_data in url_dict.items():
    response = requests.post(
        'https://api-us.faceplusplus.com/facepp/v3/detect',
        {
            'api_key': "[Face++から取得したAPIKey]",
            'api_secret': "[Face++から取得したAPISeacret]",
            'image_url': img_data[1], # 画像のURL
            'return_attributes': 'beauty' # 取得したい属性
        }
    )

    # json整形
    json_dict = json.loads(response.text)
    print(img_data[0]) # 人物名出力
    pprint.pprint(json_dict['faces'][0]['attributes']['beauty'])
```
---

### 結果
各選手の名前にinstagramの投稿ページのリンクを貼りましたので合わせてご覧ください。
[今村](https://www.instagram.com/p/B5EfTYnAQAH/)
`{'female_score': 77.524, 'male_score': 78.338}`
[石川](https://www.instagram.com/p/B5EfGAhgjVI/)
`{'female_score': 88.169, 'male_score': 84.546}`
[高橋](https://www.instagram.com/p/B5Ee8aggH2E/)
`{'female_score': 79.26, 'male_score': 76.487}`
[山下](https://www.instagram.com/p/B5EewR2A7QV/)
`{'female_score': 76.926, 'male_score': 78.077}`
[戸郷](https://www.instagram.com/p/B5EeT6aARrL/)
`{'female_score': 82.532, 'male_score': 81.738}`
[直江](https://www.instagram.com/p/B5EeEEwg617/)
`{'female_score': 78.401, 'male_score': 79.444}`
[横川](https://www.instagram.com/p/B5Eei7fgIFA/)
`{'female_score': 71.818, 'male_score': 69.508}`

今回は女装コンテストということで`femele_score`の方を採用いたします。
**優勝は石川選手でした！**

---

### ちなみに
実際の順位と比べてみると以下のようになりました。

| |実際の順位|Face++で出した順位|
|:--:|:--:|:---:|
| 石川| 1位| 1位|
| 今村| 2位| 5位|
| 高橋| 3位| 3位|
| 直江| 4位| 4位|
| 山下| 5位| 6位|
| 戸郷| 6位| 2位|
| 横川| 7位| 7位|

参考
[巨人７選手が美しき女装姿！１位石川慎吾ら大変身](https://www.nikkansports.com/baseball/news/201911230000472.html)

戸郷と今村以外はほぼ実際の順位と同じ結果になりました。
Face++恐るべし。

---

### おまけ
他人の顔だけをサンプルデータに使うのは気が引けたので自分（25歳・男性）の顔でもbeauty scoreを測定してみました。

`'beauty': {'female_score': 67.239, 'male_score': 62.417},`

クッソ低い... 
femele_scoreの方が高かったのでもしかしてと思って取得する属性にgender(性別)とついでにage(年齢)を追加してもう一度測定しました。
`{'age': {'value': 34},
 'beauty': {'female_score': 67.253, 'male_score': 62.442},
 'gender': {'value': 'Female'}}`

ハンズラボの皆様。
34歳・女性となった私をこれからよろしくお願いいたします。

---

[ハンズラボ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/handslab) 21日目は [@jnuank](https://qiita.com/jnuank) さんです:clap::clap: