重ね合わせ法による平均顔の作成と比較

# さいしょに
この記事は[顔学2020アドベントカレンダー](https://qiita.com/advent-calendar/2020/facial_study)の18日目の記事です．
[2日目の記事](https://qiita.com/Takuya-Shuto-engineer/items/4fa2abfaff30882c03bc)で顔の集団的特徴を表す平均顔について紹介しましたが，作成例が乏しかったので自前でデータを集めて作成してみました．作成結果と作成に使ったpythonラッパーの紹介をします．

データの収集は自力で頑張って集めました．

# 平均顔生成例
男性アイドル100名
![johnnys.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/eebafe97-d7b0-3778-97cc-0c0df549e5f0.png)
女性アイドル100名
![akb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/63cc4562-981b-17d0-20f8-00dc2180f5f1.png)
格闘家100名
![fighter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/1d30661b-1951-4fa2-3f13-e22ed8b4d6c4.png)
1980年代の女性アイドル60名
![showa_idol.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/c94cefa1-890f-48e3-ce14-75977d21fcef.png)

# 使用したPythonラッパー
平均顔の作成には[facemorpher](https://github.com/alyssaq/face_morpher)を使いました．平均顔だけでなく，モーフィング機能もついています．

### インストール

```console
> git clone https://github.com/alyssaq/face_morpher.git
> pip install -r face_morpher/requirements.txt
```

### コードの修正
GitHubの[Issue#61](https://github.com/alyssaq/face_morpher/issues/61)でも触れられている通り，数値の型の問題でエラーが出るので当該コードを修正します．
facemorpherをpip installしてもこのコードの修正がされていないので動きません．直接コードいじりたいのでcloneしてます．

```python:facemorpher/averager.py
# 修正前
107:  plt = plotter.Plotter(plot, num_images=1, out_filename=out_filename)
108:  plt.save(dest_img)

# 修正後
107:  plt = plotter.Plotter(plot, num_images=1, out_filename=out_filename)
108:  dest_img = dest_img.astype(np.uint8) # 型の修正コードを追加
109:  plt.save(dest_img)
```

### 平均顔作成
--backgroundのコマンドライン引数をいじると顔以外の部位（背景）の表示を変更できます．
blackは黒塗り，transparentは透過，averageは同様に平均化された背景です．作成例ではaverageを指定しています．医学的には眼球の上の頭蓋骨の窪みより下が顔とされているらしく，純粋に顔を平均化したい場合にはこのように背景情報を切り抜きます．

```console
> python face_morpher/facemorpher/averager.py --images 平均化したい画像群があるディレクトリのパス --out 出力ファイル名 --background average|black|transparent
```

blackとtransparentの結果の例
![akb_black.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/b6d317c9-5947-e199-2fcc-a40c082e19ab.png)![akb_transparent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/b6552f89-750a-f111-8130-56f08d386d52.png)

# 平均顔同士の比較
平均顔は集団の特徴を捉えるらしいので，実際に比較してみます．

## 男性アイドルと男性格闘家
![johnnys.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/eebafe97-d7b0-3778-97cc-0c0df549e5f0.png)![fighter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/1d30661b-1951-4fa2-3f13-e22ed8b4d6c4.png)

ぱっと見特徴的なのは髭ですね．格闘家は平均化処理を行っても口髭や顎髭が残っています．また，彫りの深さもかなり違いますね．格闘家の方が起伏の激しい顔つきが多く顔に影が現れています．一方でアイドルは全体的に白く，影も少ないです．

また，表情に関しては口角に違いがありますね．アイドルは口角が上がっていますが格闘家は下がっています．職業ごとに被写体として求められている表情が違うこともわかります．

前回の記事で取り上げた調味料顔は以下でしたが，

> - ソース顔: 二重・彫りが深くて外国人のようなくっきりとした顔立ち
- しょうゆ顔: 小顔・彫りが浅い・唇が薄いことなどが特徴で、浴衣や着物といった和服がよく似合う
- 塩顔: 一重か奥二重のすっきりとした目元・鼻が高い・色白で輪郭がシャープといった特徴があり、クールでミステリアスな印象
- ケチャップ顔: しょうゆとソースの中間．ソース顔に日本人らしさが加わったような、目鼻立ちはある程度はっきりしつつも、あっさりとした顔立ち
- マヨネーズ顔: 少年らしさと大人の色気が混ざった顔立ち

アイドルは塩顔，男性格闘家はソース顔かケチャップ顔くらいかなあと感じます．

## 女性アイドル（2010年代）と1980年代女性アイドル
![akb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/63cc4562-981b-17d0-20f8-00dc2180f5f1.png)![showa_idol.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593087/c94cefa1-890f-48e3-ce14-75977d21fcef.png)

まず，色が全然違いますね．2010年代は色白で，80年代は少し焼けた肌色くらいに見えます．80年代にあまり詳しくないのですが，多少肌が黒いほうが外に出てアクティブで健康的なイメージがあったのだと思います．髪型もストレートヘアーが主流な2010年代に対して，1980年代はパーマのようなボリュームのある髪型がウケていたのもわかります．目に関しても，最近は目を大きく見せる技術が進化してきたので少し2010年代のほうが大きくみえます．

表情に関しては口元がやはり違います．2010年は少女のようなニコッとした全力の笑顔なのですが，80年代は少し余裕のある大人風の微笑みに見えますね．

2010年代は清楚系がウケて，1980年代はアクティブな健康系がウケてる感じがします．

# さいごに
今日は平均顔の生成例と比較を行ってみました．顔学学び始めてまず勉強した平均顔ですが，いろいろと自分で比較したことはなかったので良い経験になりました．

# 参考
- [facemorpher](https://github.com/alyssaq/face_morpher)