マツコ・デラックスとの類似度を返信してくれるマツコbotを開発した

#はじめに
今回はLINEmessagingAPIとMicrosoftFaceAPIを組み合わせてマツコ・デラックスさんとどれだけ似ているかを返信してくれるマツコbotを開発しました．以下のようにマツコが返信してくれます．しっかりマツコに対して高い数値を出しています．
<img width="375" alt="IMG_0413.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/256520/12673d03-398c-6f36-94da-ed909a854b64.png">

#開発環境
* macOS Mojave 10.14.2
* python 3.6

#マツコ・デラックスとは
知らない人はいないと思いますが一応説明しておきます．マツコ・デラックスさんは日本のコメンテーターで現在たくさんの番組に出演されており，毒舌キャラで大人気です．詳しく知りたい方は[Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%84%E3%82%B3%E3%83%BB%E3%83%87%E3%83%A9%E3%83%83%E3%82%AF%E3%82%B9)をご覧ください．

#実装
今回は以下のように実装していきます．すでにbotを作成している前提で進めていきます．
![図1.png](https://qiita-image-store.s3.amazonaws.com/0/256520/ac7279d6-9391-a4e2-c751-50d81d161317.png)

##Herokuの設定
こちらはすでにたくさんの方が詳しく説明しているのでそちらを見た方がわかりやすかと思います．[こちら](https://qiita.com/krocks96/items/67f7510b36945eb9689b)の記事を参考にさせていただきました．ターミナルで以下のように設定していきます．

```
$ heroku login
$ heroku create matsuko-bot
$ heroku config:set YOUR_CHANNEL_SECRET="Channel Secretの欄の文字列" --app matsuko-bot
$ heroku config:set YOUR_CHANNEL_ACCESS_TOKEN="アクセストークンの欄の文字列" --app matsuko-bot
```

##設定ファイルの作成
それぞれ設定ファイルを作成します．

```runtime.txt
python-3.6.6
```
```requirements.txt
Flask==0.12.2
line-bot-sdk==1.5.0
requests==2.18.4
gunicorn
```

```:Procfile
web: python main.py
```

```main.py
#一部のみ

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text='顔画像を送信しなさい'))


@handler.add(MessageEvent, message=ImageMessage)
def handle_image(event):
    message_id = event.message.id
    message_content = line_bot_api.get_message_content(message_id)
    image = BytesIO(message_content.content)

    r_1 = requests.post(url_detect, headers = headers_detect, params = params, data = open('matsuko.jpg','rb'))
    r_2 = requests.post(url_detect , headers = headers_detect, params = params, data = image)
    faceId = r_1.json()[0]['faceId']
    
    try:
        faceIds = r_2.json()[0]['faceId']
        body['faceId'] = faceId
        body['faceIds'] = [faceIds]
        r_find_similar = requests.post(url_similar, headers = headers_similar, data = json.dumps(body)).json()[0]['confidence']
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text='私との類似度は{}'.format(r_find_similar)))

    except:
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text='顔が検出できなかったですよ'))
```
matsuko.jpg(こちらの顔画像と似ているかを比較します)
![matsuko.jpg](https://qiita-image-store.s3.amazonaws.com/0/256520/404e286f-b28f-9878-9b5f-6ae83c47a45d.jpeg)

```:ファイル構造
$ tree
.
├── Procfile
├── main.py
├── matsuko.jpg
├── requirements.txt
└── runtime.txt
```

##Herokuにデプロイ

```
$ git init
$ git add .
$ git commit -m "new commit"
$ git push heroku master
```
git pushできない場合は以下のコマンドを実行してください．

```
$ git remote add heroku https://git.heroku.com/アプリケーション名.git
```
デバックするためにログを確認

```
$ heroku logs --tail -a <アプリケーション名>
```
##webhookの設定
LINEbotの設定画面で以下のように設定します
Webhook送信：利用する
Webhook URL：https://<アプリケーション名>.herokuapp.com/callback

#まとめ
今回はLINEとMicrosoftのAPIを組み合わせて顔認識のbotを作ってみました．web関連の知識は全くなかったのですが案外簡単にできました（Herokuの設定で少し苦戦した）．今後は自分でAPIサーバーを構築して便利なLINEbotを作っていきたいです．今回の実装は[GitHub](https://github.com/NakaokaRei/matsuko)に載せておきます．