みなさま、こんにちは。
上司からどんどん指示がでて、本来の業務が進まないってことありませんか?
私は小売業勤務ですが、本業以外にレジ応援、ゴミ捨て、カート整理、カゴ整理など雑務が多く、
なかなか自分がやりたい業務ができませんでした。
中でもカゴ・カートの整理は店内外に散らばったカゴ・カートを回収してまわる仕事ですが、
本業に没頭したまま忘れてしまうことも多々あります。でも忘れていると上司にカゴがなくなってるぞと怒られてしまうし、かといって行く回数はできる限り減らしたい!そんな仕事です。というわけで今回はTeachable Machineを使って買い物カゴの量を判別して、少なくなったら教えてくれるLINE Bot作ってみました。命名:カゴを見張ってくれるので美晴さん✨です。
完成動画はこちら
カゴが補充されるまでメッセージ送信し続けます。
codepenからの動画
余裕あり→在庫少に変わるとLINE Botがメッセージを送信します。
今回使用したもの
Teachable Machine
codepen
Node-RED
LINE Developer
作成手順
STEP1 Teachable Machineにカゴの状態を学習させる。
実際に店舗にお邪魔して①カゴが少ない状態、②補充されている状態の2つを撮影し、
Teachable Machineには余裕ありと在庫少の2つの項目で学習してもらいました。
STEP2 codepenによるコード作成。
私はコード作成できません。今回は私がやってみたいことと同じような
内容を紹介している方のコードを参考に作りました。
参考記事はこちら(大変勉強になりました)
このコード記述で私の思考が停止します。書いてある内容が全く分かりません。
試しに参考記事のコードをそのまま使ってみたところ、
うまくLINE Botからメッセージが送信されましたが、1回の処理で停止してしまいました。
私は常時カゴの状況を監視してもらいたいので、1回で止まってほしくありません
そこで書かれているコードの意味を1個、1個、調べてみました。
わからないながらも気になった部分はここ
await axios.post('https://nodered-(自分の名前).herokuapp.com/receiver', results[0]);
調べていくと、上のコードはNode-REDのpost
から結果が返ってくるまで待機する。
という意味になるとわかりました。どうやらここが悪さをしているような気がします。
なので最初のawait
を削除すれば、待機しないでと言う意味なるのかなと思い
axios.post('https://nodered-(自分の名前).herokuapp.com/receiver', results[0]);
このようにawait
を削除したところ、うまくループするようになりました。
もう一つは時間です。コードには下記のような記述がありました。
setTimeout(loop, 1000);
この1000が時間を意味するようです。
そして1000
とは1000ミリ秒、つまり1秒間隔で処理が走るように設定されているようなので
今回は5000
(5秒)に変更しました。
これで、カゴ補充が完了するまで5秒毎にメッセージが送られ続けます。
実装するときは5秒ごとでも煩わしいので、1分くらいがいいと思います。
STEP3 Node-REDのフローを作成する。
Node-REDを使ってノード同士を結びつけて、LINE Botで返すまでのフローを作成します。
下記図のように繋げることで、在庫少のデータがNode-REDに流れた時に
食品入口カゴが減っています。補充して下さいとメッセージを送信します。
そして、在庫少と認識したらカゴを補充するまではずっーとメッセージが送られ続ける
という仕様になっています✨✨✨
終わりに
【感想】
画像認識なんて難易度高すぎて初心者は絶対に手を出せないと勝手に思っていましたが、
Teachable Machineを使えば簡単に画像認識ができてしまうことに驚愕しました。
出来栄えについてもうまく動いていると思っています。
今回協力いただいた店舗の店次長にも見てもらいましたが、こんなに便利そうなものが作れるならどんどん作ってほしいと言われ、他にもレジ待ちの行列を教えてくれるとか、フードコートのゴミの散乱を教えてくれるのもいいな~と追加注文が入りました。
【反省】
コードに関する知識がなく、今回はそのまま転用に近い状態なのでもっと勉強したいと思います。
まずはコードを見てどういった処理が行われようとしているのか?そこから理解できるようになりたいと思います。
またプロトタイプでは問題はないですが、実用化した場合、開店~閉店まで動くようにとか、
何かしらのエラーによって処理が停止した時に気付くことができるような仕組みも必要だと感じました。