アンガールズ田中卓志がAndrew Ngに似ているか検証した

テレビを見ていたら、ふと似ている気がしたので検証してみる

 Andrew Ng  | 田中卓志 |
:------------: | :-----------:
<img src="https://qiita-image-store.s3.amazonaws.com/0/80588/47a47ecb-ae3f-0f32-a947-312b0f18770f.png" width="300"> | <img src="https://qiita-image-store.s3.amazonaws.com/0/80588/30570f95-f992-fdec-e746-f319a3d2fa76.png" width="300"> |
Source: [MIT technology review](https://www.technologyreview.com/s/608573/andrew-ngs-next-trick-training-a-million-ai-experts/) | Source: テレビ画面を撮影


## 検証方法

Andrew Ng氏によるDeep Learning講義の１つ「[Convolutional Neural Network](https://www.coursera.org/learn/convolutional-neural-networks/home/welcome)」で扱う、顔認識プログラムを利用します。4週目の課題に顔認識システムの作成があり、画像を使って指定された人に認証できるかを判定する関数`verify`を実装するので、これにネット上で集めた田中さんの画像を当てはめてAndrew氏であるか否かを判定させます。


## 画像の準備

`verify`関数は、96x96サイズの画像ファイルを受け取るので、これに合わせて画像を準備します。
元の画像サイズが合わない場合は、なるべく縦横比が1:1に近い画像を用意して画像編集ソフトなどでサイズ変更します。今回は、[imagemagick](https://www.imagemagick.org/script/index.php)の`convert`コマンドを利用しました。

```bash
$ convert <original file> -resize 96x96! <output file>
```

※サイズの後に`!`をつけると、アスペクト比を無視して指定したサイズに合わせてくれます。


## 判定

課題のJupyter Hubに画像をアップし、`verify`関数を呼びます。

<img width="96" alt="tanaka-resize.png" src="https://qiita-image-store.s3.amazonaws.com/0/80588/c71708c0-4377-e527-09b8-ceadfaa88c1f.png">

```python
verify("images/tanaka-resize.png", "andrew", database, FRmodel)
## It's andrew, welcome home!
## (0.67731065, True)
```
見事、認証システムを通過できました！ 判定の閾値が0.7なのでギリギリです。

ちなみに、山根さんの画像で試すとこうなりました。


<img width=96 src="https://qiita-image-store.s3.amazonaws.com/0/80588/0f655c4d-9ed3-8475-f3da-04e2929a1757.png">

```python
verify("images/yamane-resize.png", "andrew", database, FRmodel)
## It's not andrew, please go away
## (0.95198733, False)
```

画像を集めて繰り返したところ、田中さんは概ね半分くらい通過できるようでした。

※画像の下の数字は正解との距離を表す。0.7未満で通過。

| ![tanaka-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/c71708c0-4377-e527-09b8-ceadfaa88c1f.png) | ![tanaka2-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/f0f0332b-c421-558f-f2db-82b66c643b29.png)| ![tanaka3-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/3f784441-1739-24d5-1940-608cf3ffa283.png) | ![tanaka4-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/cffb1446-b972-af30-5fb0-0ef87046f16a.png) | ![tanaka5-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/f0d2e860-d8b3-6d13-20e9-5b8787c0fdbf.png) |
|---|---|---|---|---|
| ○ 0.677  | × 0.944  | ○ 0.600  | × 0.789  | ○ 0.693 |
| ![tanaka6-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/cc8e0b8d-f448-43bc-9708-9aff49192e42.png) | ![tanaka7-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/9ef43261-993b-eee4-e5b3-284582bf107e.png) |  ![tanaka8-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/c280a7f0-3471-6591-1fdf-133b72c1b997.png) | ![yamane-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/0f655c4d-9ed3-8475-f3da-04e2929a1757.png)  | ![nakaoka-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/55f2cd92-7910-fbd5-eef9-382a81666148.png)|
| ○ 0.693  | × 0.855  | × 0.977 | × 0.952 | × 0.968 |

※画像の出典（左上から）
テレビ画面を撮影（[日曜チャップリン](http://www.tv-tokyo.co.jp/nichiyou_chaplin/)）; [AERA dot.](https://dot.asahi.com/dot/2017091100086.html); [livedoor news](http://news.livedoor.com/article/image_detail/13151794/?img_id=12966939); [エンタメラボ](http://entamelabo.com/ungirls-tanaka); [シネマトゥデイ](https://www.cinematoday.jp/news/N0060407);
[livedoor news](http://news.livedoor.com/article/detail/13556151/); [@nifty ニュース](https://news.nifty.com/article/entame/showbizd/12184-37770/) ; [ワタナベエンターテイメント](http://www.watanabepro.co.jp/mypage/30000010/); [楽馬](https://rakukeiba.com/main/00d77b27c130e800/); [livedoor news](http://news.livedoor.com/article/detail/13773809/);


## 結論

まあまあ似ていると言えそうです。本実習に限らず、素晴らしい講義なのでぜひ受講してみてください。


## 余談

ちなみに、Andrew Ng氏本人の写真でも通過できないことがあります。あくまで講義の課題用に作られたものなので、このあたりはご愛嬌です。

![andrew-resize.png](https://qiita-image-store.s3.amazonaws.com/0/80588/31c88e66-4b25-e2b9-d974-71ce0b0c5ee2.png)

```python
verify("images/andrew-resize.png", "andrew", database, FRmodel)
## It's not andrew, please go away
## (0.81205148, False)
```