Teachable Machineを使ったLINE botを作成する
「その積み方で大丈夫?!」
私は小売業の物流部門で働いていますが、店舗へはカゴ車やカートと呼ば
れる配送台車に商品を積み込んで配送します。
配送を待つ台車の中には、その積み方で崩れないかなぁという台車に遭遇し
手直しすることもあります。
また、トラックの荷台スペースは限られていますので、商品があまり積まれ
ていないスカスカな台車では、一度に配送できる商品も少なくなり配送効率
が低下してしまいます。
そこで、最近Teachable MachineというAIで画像解析できるサービスを知った
ので、LINEに配送台車の画像を送って積み方の良し悪しを返してくれるLINE
botを作成してみました。
Teachable Machineとは
Googleが公式に提供する無料のAI作成ツールです。
画像、音声、ポーズのパターンの機械学習ができます。
今回は画像のパターンの機械学習を活用します。
LINE botの作成に使用したツール
- LINE (LINE botの作成に使用)
- Teachable Machine (AIの機械学習に使用)
- Node-RED in Heroku (LINE、Teachable Machine、Makeの連携に使用)
- Make (Gmail送信用に使用)
Node-REDとは
視覚的にわかるGUIによってプログラムを書くことができる、ブラウザで動く
プログラミング環境です。プログラミングがわからなくても、APIとつなげたり、
WEBアプリを作ることができます。
今回はHerokuというサービスを使ってNode-REDを動かしています。
Node-REDのインストールについては以下の記事を参考にさせて頂きました。
<参考にさせて頂いた記事>
Herokuのアカウント作成とNode-REDのインストール
LINE botの作成結果です
(やりたかったこと)
①LINEで撮影した画像を取得してTeachable Machineに送る。
②Teachable Machineで送られてきた画像の良し悪しを判定する。
③判定した結果に応じて行先を分岐させる。
④悪い結果はLINEとGmailに返す。
⑤良い結果はLINEのみに返す。
どのようなイメージか動画で確認してみて下さい。
(完成したLINE botです)
「××ダメ!商品事故!」のパターンのときの動画
→ → → → ちゃんと動いてますね!
サンプルはあえて商品事故写真を使っています。いつもこういう訳ではありません。
・Node-REDのフローにLINEで撮影した画像が送れています
・指定したメールアドレスに通知メールが送れていますね。成功です!!
今回、初めてNode-REDを使ってみましたが、最初は一見簡単そうに見えましたが、
初心者にとっては奥が深い・・・(ムズッ)!!!
真似てやってみても思ったように動作しない、さっきまでできていた動作が再現できない…
視覚的には繋げるだけなのですが、奥が深く更なる学習が必要だと感じました。
(初心者にはなんとなく難しい感じがして避けてきたコーディングの勉強しようかな)
Node-REDのフローの紹介
(Node-REDのフローの流れ)
フローだけ見るとやりたかったことの流れをつなげているだけなんですが、
かなり難しかったです!!(正直まだ理解しきれていません…)
LINE botの作成手順
1.事前準備
LINE botを作成する前に事前準備の一覧で紹介します。
- LINE DevelopersでLINE botのチャネルを作成。
- Herokuのアカウント登録とNode-REDのインストール。
- Makeのアカウントを作成。
- MakeとGoogleの連携をする。(Gmail用)
2.LINE bot作成の流れ
①Node-REDでLINE画像を送る準備をする
この段落で使用したノードhttp in function http request
ノードとは
ノードはNode-REDの構成要素で何らかの処理をするための機能のかたまりです。
前方のノードから情報を受け取るか外部イベントを受け取ることで動きます。
情報は形式はJSONデータでマトリョーシカのようなデータ構造をしています。
「データのマトリョーシカ」を次のノードに渡していくイメージです。
例)msgの中にpayloadが入り、payloadの中に文字列が入る。
-
http inノード
http inノードをパレットと呼ばれる左側のエリアから
ワークスペースと呼ばれる中央のエリアにドラッグ&ドロップします。
次にhttp inノードをダブルクリックしてプロパティを開きます。プロパティでは、
メソッド欄でPOSTを選択し、URL欄に/linebotと入力します。
これで、http inノードの設定は完了です。 -
functionノード
次にfunctionノードをパレットからドラッグ&ドロップします。
このfunctionノードを先ほどのhttp inノードとつなぎます。
ノードの点をクリックして引っ張って他のノードの点にもっていくと
簡単にノード同士をつなぐことができます。
次にfunctionコードのプロパティを開き、コード欄に以下のコードをコピペします。
const messageID = msg.payload.events[0].message.id;
const replyToken = msg.payload.events[0].replyToken;
msg.messageID = messageID;
msg.replyToken = replyToken;
return msg;
-
http requestノード
次にhttp requestノードをパレットからドラッグ&ドロップしますして、先ほどのfunctionノードとつなぎます。プロパティの中身ですが、
URL欄に以下のURLをコピペします。
https://api-data.line.me/v2/bot/message/{{{messageID}}}/content
URL内の{{{messageID}}}の{}が3つあるのがミソのようです。
次に認証を使用にチェックを入れ、種別はBearer認証を選び、トークン欄には
事前に用意したLINE botのチャネルアクセストークンを貼り付けます。
最後に出力形式はバイナリバッファを選択してLINE画像の送付準備は完了しました。
また、今回のLINE画像の送付は次の記事を大変参考にさせて頂きました!
(ほぼそのままですが…) ありがとうございます!
<参考にさせて頂いた記事>
Teachable MachineとenebularとLINE Botで機械学習を体験しよう!
②Teachable Machineの準備とNode-REDとの連携をする
この段落で使用したノードTeachable Machine functionノード
Teachabl Machineはこんなに簡単にできるの?!というぐらい簡単に
機械学習ができるサービスです。Teachable Machine
個人的には人によって判定基準がまばらなことや、熟練の人でないと判別
できないようなことの判定に向いていると考えています。
(Teachable Machine学習手順)
1 Teachable Machineサイトに入り、「使ってみる」をクリックします。
2 新しいプロジェクトから使いたい機能を選択します。(今回は画像プロジェクト)
3 プロジェクトを作成したらサンプルを撮影(画像アップロード)して
AIに学習させるための画像データを蓄積します。
4 画像データを蓄積したらトレーニングを選択してAIに機械学習させます。
5 これでTeachable Machineの完成です!!
次にTeachable Machineノードをワークスペースにもってくるのですが、Teachable Machineノードは最初からNode-REDのノードとしてある訳ではありません。
このTeachable Machineノードの追加、Node-REDとの連携は先ほど紹介
させて頂いた記事に詳しく載っていますので、本記事では割愛させて頂きます。
③判定に応じて次のノードの行先を分岐させる。
この段落で使用したノードswitchノード
Teachable Machineノードから画像の判定結果を受け取る準備はできましたが、
判定内容によって対応を変えたいと考えました。
そこで、switchノードを利用して、判定結果によって次のノードの行先を
変えることにします。
-
switchノード
まず、パレットからswitchノードをドラッグ&ドロップして、ひとつ前のfunctionノードとつなげます。次にswitchノードのプロパティでmsg.を選択し、payload.events[0].message.textと入力します。
次に送られてきた判定を判定結果に応じて振り分けます。
今回は悪い結果を振り分けたいので、まずは「××ダメ!商品事故!」と判定された
ものを1ルートに振り分けようと思います。
switchノードに情報を入力する欄がありますので、「××ダメ!商品事故!」と
入力します。この時送られてくるのは文字列なのでazを入力した文字れて列を
含むものを振り分けたいのでcontains(~を含む)を選択します。
これで「××ダメ!商品事故!」が1のルートに振り分けられます。
次に「×積みすぎです」も同じく悪い判定として通知させたいので同じ処理をして、
2のルートに進むようにします。
それ以外の判定についてはそれ以外を選択して3のルートに行かせます。
これで、Switchノードの設定は完了です!
④Makeと連携したGmail送信とLINEへの返信
この段落で使用したノードhttp request Replyノード
ここではまず、MakeとNode-REDを連携させる必要があります。
いったんNode-RED側ではhttp requestノードを選択し、先ほどのswitchノードと
つないでおきます。ここで、Makeと連携させたいのは悪い判定だった場合なので、switchノードから1と2のルートを選んでつなぎます。
次にMake側の設定です。Makeで新しいシナリオを作成してWebhookモジュールを
選びます。Addを選択するとURLが発行されますので、そのURLをコピーしてブラウザ
に貼り付けます。ブラウザに「Accepted」と表記されたら成功です。
webhookモジュールに戻ったら、「Stop」と表記されていたのが「Successfuly」
に変わっているので、URLを再びコピーして、Node-RED側で用意したhttp requestノードのURL欄に貼り付けます。
これでNode-REDとMakeの連携は完了です!!
最後にMake側のGmailモジュールとNode-RED側のReplyノードの設定です。
まず、Make側で先ほど連携したWebhookモジュールにつなげる形でGmail
モジュールを作ります。Gmailモジュールを作ったら、Addを押してMakeと
Gmailを連携させます。
Email address欄に送信先のメールアドレスを入力し、任意のタイトルと
メール本文を入れれば設定完了です!
Node-REDのReplyノードの設定です。LINEへの判定結果の回答は全ての
結果に対して欲しいので、Switchノードの1から3の全てのルートに
つなげます。
ReplyノードのプロパティではSecretとAccess Tokenが求められ
ますので、事前に準備したLINE botのチャネルシークレットと
チャネルアクセストークンを貼り付けて下さい。
これで今回のLINE bot作成の一連の作業は完了です!!!
今回の反省点を箇条書き
- Node-REDについてもう少し理解したかったができなかった。
- Teachable Machineの機能をあまりいかせなかった。
- 記事をダラダラ書いてしまった。特に後半見にくかったのではないか?
あげていけばキリがないのですが。。。次回修正します!!
最後に
今回の取り組みで配送台車の良し悪しを判定できるLINE botを作成し、
動かすことが出来ました!!
しかし、これをそのまま実際の物流作業現場で使えるかというと多くの
疑問符が付きます。積載の少ない台車が見つかっても、もうその店舗の商品が
ない場合や、LINEで毎日1,000台車以上ある台車を撮影して回るのかという
課題もあります。
台車判定を切り口に深耕するなら、もう少し目的と課題を明確にする必要が
あると考えました。例えば仕分間違いに特化した仕組みにする、教育を目的
としたツールにするなど、大きな変更が必要です。
今回、Node-REDやTeachable Machineという技術について知ることができ
たことは大きな財産となったような気がします。
今後はさらに課題と目的を明確化(焦点をしぼる)する、その上で新たに
知った技術を組み合わせて小さな改善を重ねる、ことを目標としてこのよう
な取組を続けていきます!!
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308626619.html