[機器學習]手把手打造貓狗辨識 Line 機器人(下)

Hoskiss
Hoskiss stand
Published in
4 min readMay 4, 2019

--

寫一寫才發現那些很容易找到教學的部分都想輕輕帶過,這樣標題還敢說”手把手”好像在打自己的臉XD,不過先這樣吧,本來想記錄的就是可能會卡比較久的點,承上篇我們已經有個 model 的 api 了,要怎麼串在 line bot 呢?

首先我們要去 LINE Developers 申請一個 Provider 帳號,然後在這帳號下建一個 channel,這邊網路搜尋一下教學或是可以看這篇,總之最關鍵的設定是 Webhook URL,這個必須設成可以處理 line 收到訊息的 api 接口

而我們來用 amazon 的 lambda 來做這件事,主要參考這篇,serverless 概念的 lambda 也很便宜呢(感覺),為了要跟 line 串起來,必須安裝 SDK,大致步驟是在自己電腦上開個資料夾,pip3 install line-bot-sdk -t . 把需要的檔案都裝到這個資料夾,接著新增一個檔案 lambda_function.py,然後參考 line-bot github 上的README,把程式碼複製到這個檔案,接著改成我們要的

除了移除 Flask 的部分,其中的關鍵就在於,我們是想對圖片做回應,那要如何拿到使用者透過 line 傳給我們的圖片?這類文章不多,所以我們回去翻 github 的 README跟官方 document (可以看到右邊就是 event 的結構)

修改之後如同上面程式碼,我們需要定義 handle_message,流程是當使用者傳圖片訊息事件發生,會觸發這個函式,而 event 裡面有 message.id 就是圖片的 id,再用 get_message_content 這個 sdk 中的函式透過 id 下載這張圖 (其實蠻合理的,line 應該也不想把使用者每次傳的圖,直接塞過來逼 api 吃下去),先存在 /tmp 下( lambda 中能存的地方大概也就這了),接著我們把這張圖做 base64 的編碼,整理成後台 model server 能吃的格式,requests post 出去就可以拿回 model 預測結果囉~最後用 reply_message 把結果傳回給使用者,還可以設表情符號呢XD,這段就是我實際運行的 code,記得改一下 token、secret、endpoint 等應該可以用沒問題

雖然程式搞定但我們還沒完成 lambda 的設定呢,所以請繼續照著這篇,把自己電腦上的檔案壓縮放到 lambda 上,完成以後會有個 API Gateway 的 url,再把這個 url 貼給 LINE 需要的 Webhook URL,就可以宣布大功告成一切都串起來囉,這時候的你應該會迫不及待地傳張照片試試吧

原來湯師爺是貓系啊XD

因為弄這一整串的時候,是在有點各種忙的時程壓力下,快速瀏覽新東西的文章,一步一步試驗除錯再試驗,最後成功呈現的時候還蠻開心的呢。另外也理解一件事,使用者越容易使用、越不需要額外成本的方式,就會是黏著度越高的方式,也難怪 LINE 敢提高收費,都想取代新聞平台或天氣預報哩。大概是這樣,如果喜歡這篇的話,麻煩幫我按下拍手給些鼓勵吧,任何回饋或建議也都歡迎喔~謝謝,我們接著繼續向機器學習學習

--

--

Hoskiss
Hoskiss stand

生活是不斷成長以追求平衡的巧妙融合