1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LINEボット3 画像識別チャットボット開発

1
Posted at

Aidemy 2020/12/13

はじめに

 こんにちは、んがょぺです!バリバリの文系ですが、AIの可能性に興味を持ったのがきっかけで、AI特化型スクール「Aidemy」に通い、勉強しています。ここで得られた知識を皆さんと共有したいと思い、Qiitaでまとめています。以前のまとめ記事も多くの方に読んでいただけてとても嬉しいです。ありがとうございます!
 今回は、LINEボットの3つ目の投稿になります。どうぞよろしくお願いします。

*本記事は「Aidemy」での学習内容を「自分の言葉で」まとめたものになります。表現の間違いや勘違いを含む可能性があります。ご了承ください。

今回学ぶこと
・画像データを渡された時の処理を追加

学習済みモデルの保存

CIFER-10を転移学習

・今回は、ユーザーから送られた__画像__について、それが__何の画像であるかを判別する__LINEチャットボットを作成していく。
・まずは分類したい画像を学習させた__モデルを作成する__。__CIFER-10を転移学習__させて作成する。作成したコードは以下に記載するが、詳細は既に「CNN」で学習済みであるので省略する。

・コードスクリーンショット 2020-12-13 22.33.27.png

スクリーンショット 2020-12-13 22.33.44.png

LINEチャットボットに学習済みモデルを組み込む

keras

・画像の読み込みはOpenCVの__「cv2.imread()」__を使うことが多いが、Heroku__はこれに対応していないので、今回は「keras.prosessing.image」を使って画像を読み込む。今回はこのうち「load_img()」「img_to_array()」__を使用する。
・__load_img()は第一引数に__画像のURL__を指定する。第二引数以降は任意であり、例えば「color_mode='grayscale'」とすれば画像が白黒で読み込まれ、「target_size」__を指定すれば、そのサイズにリサイズされて読み込まれる。
・__img_to_array()__は引数で渡された画像データを__np.array型__にするものである。

・コード

# 以下、送信された画像を保存するためのコード
class_label = ["飛行機","自動車","","","鹿","","","","","トラック"]
graph = tf.get_default_graph()#kerasのバグでこのコードが必要.
model = load_model('my_model.h5')#学習済みモデルをロードする
@handler.add(MessageEvent, message=ImageMessage)
def handle_content_message(event):
    global graph
    with graph.as_default():
        message_content = line_bot_api.get_message_content(event.message.id)
        with tempfile.NamedTemporaryFile(dir=static_tmp_path, prefix="jpg" + '-', delete=False) as tf:
            for chunk in message_content.iter_content():
                tf.write(chunk)
                tempfile_path = tf.name

        dist_path = tempfile_path + '.' + "jpg"
        dist_name = os.path.basename(dist_path)
        os.rename(tempfile_path, dist_path)

        filepath = os.path.join('static', 'tmp', dist_name)#ユーザから送信された画像のパスが格納されている

# 以下、送信された画像をモデルで判別するためのコード
        img = image.load_img(filepath, target_size=(32,32))#送信された画像を読み込み、リサイズする
        img = image.img_to_array(img)#画像データをndarrayに変換する
        data = np.array([img])#モデルは4次元データを受け取るのでnp.array()にimgをリストとして渡し、4次元のデータにする
        result = model.predict(data)
        predicted = result.argmax()
        pred_answer = "これは" + class_label[predicted] + "です"

        line_bot_api.reply_message(event.reply_token,TextSendMessage(text= pred_answer))

・ここまで行ったら、Chapter1で行ったときと同じように、herokuにデプロイすることで得られるURLをWebhookに記録して完成である。

今回は以上です。最後まで読んでいただき、ありがとうございました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?