モニュメントに反応するLINEボット

求められる動作

画像が送られた場合:

テキストが送られた場合: リアクション自由

LINE画像の扱い

LINEで送られた画像にはID番号が与えられており、実は先週B:でやったコードの最後の方:

@handler.add(MessageEvent, message=ImageMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.id))

ここは、画像が送られるとそのID番号を返すようになっています。ここを参考にしてください。

LINE画像のopen

また、A:の方で先週まではファイルをopenして判定していましたが、これをLINEの画像に変えなければなりません。
ファイルをopenするコードは

image = np.array(Image.open(filepath).resize((25, 25)))

でしたが、トークンと画像のID番号を与えて、

channel_access_token = 'ImCMJxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx3ZxP+lbAdL4f4owwdB04t89/1O/w1cDnyilFU=' # トークン
ImageId = '7948553537596' # 画像のID番号
r = requests.get('https://api.line.me/v2/bot/message/' + ImageId + '/content', headers={'Authorization': 'Bearer ' + channel_access_token})
image = np.array(Image.open(BytesIO(r.content)).resize((25, 25)))

とするとLINEの画像をopenできます。(ただしrequestsというパッケージが必要)

注意:学内のPCからだとアクセス制限がかかっているようで、certificate verify failedとなり画像を取得できません。Herokuで実行してください。

LINE画像の判定のヒント

必要となるパッケージの例は以下のようなものです

import os
import sys
import numpy as np
import requests
from flask import Flask, request, abort
from PIL import Image
from keras.models import model_from_json
from io import BytesIO

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage, ImageMessage,
)

ポイントとなるコードの例を示します。
???:の箇所は隠してありますので考えてみてください。

@handler.add(MessageEvent, message=ImageMessage)
def handle_message(event):
    r = requests.get('https://api.line.me/v2/bot/message/' + ??? + '/content', headers={'Authorization': 'Bearer ' + channel_access_token})
    image = np.array(Image.open(BytesIO(r.content)).resize((25, 25)))
    :
    :
    result = ???
    if result[0] == 1:
        ans = "愛はすべてに打ち勝つ"
    else:
        ans = "いい画像ですね"
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=???))

補足

herokuコマンドを使い始める前には:

> $env:home = "F:" (環境変数homeを一時的にUSBメモリにしておきます)

gitコマンドを使い始める前には:

> git config --global user.email "xxx@yyy" (最初にメアドを登録しておきます)

が必要です。

うまく動かないとき

> heroku logs

で出てくるログをがんばって解析してください。

融合実験室以外でやりたいとき

git(for windows)Heroku CLIをインストールすればできると思います。