スーパーで買いたいタバコの「品揃えの有無」「何番に陳列しているか」を教えてくれる映像判断ツールを作成しようとしたが、失敗報告)


私はスーパーでレジ業務のオペレーション改善を行っていますが、
このようなエリアを見たことはありますか。

サービスカウンターでは、商品券やギフトカードなどの販売のほかにタバコの販売も行っています。タバコは店舗ごとに紙・加熱式・電子など含めて約200の品目を取り揃え、お客さまが欲しい銘柄の番号をパネルの裏にある在庫から取り出して販売します。

お客さまも従業員も探すのに時間が掛かる

お客さまは取り揃えている品目の多さや似たようなパッケージも多いことで探す時間が数十秒~数分かかります。(従業員も番号が言われるまで作業が止まる。レジ待ちの原因にもなっている。)
従業員はお客さまが番号を言わずに「これと同じの」と携帯の画面や自分の買いたいタバコを見せて、どこに陳列しているのか探すのに時間が掛かったり、と双方が苦慮する時があります。

今回、品目を絞ってですがパッケージを写したら「品揃えがあるのか」「何番に陳列しているか」を教えてくれるツールを作成してみようと挑戦しました。

使用した機能

・Teachable Machine
・CodePen
・Node-RED

Teachable Machineで各パッケージを覚えさせる

まず、Teachable Machineでパッケージの画像を覚えさせます。
周りの協力を得て手に入れたパッケージ以外は今回はネットから探したものなので、画像サンプルが少ないのが反省でした。セロハンによる光の反射でサンプルが少ないと認識が不十分になるようです。

Teachable Machineの様子(動画)

CodePenについて

See the Pen タバコを探すのラクにする by m-morito (@m-morito) on CodePen.

Node-REDについて

Node-REDで取得したパッケージから品揃えの有無、何番に陳列かを参照します

1.全体のフロー

2.項目ごと

①http in
:CodePenから画像判定結果を受信
メソッドを「POST」、URLを「/receiver」に

②function1
:送られた画像判定結果を変数に退避
```
msg.pen = msg.payload.label;

return msg;
```

③Googleスプレッドシート
:シートから銘柄と陳列番号の一覧を配列で取得

:スプレッドシートには銘柄と、次の列に陳列している「番号」「品揃えの有無」を作成しています。

④function2
:判定結果によって違う乱数を発生させて、生成した数値でセリフ一覧の配列からメッセージを選ぶ

for (  var i = 0;  i < 10;  i++  ) {
 if (msg.item == msg.payload[i]){
     msg.payload = msg.payload[i + 1]
     break;
 }
}    
return msg;

⑤http respons
:CodePenにメッセージを送信する

結果

まったく反応しませんでした。失敗です。
CodePenの様子(動画)

課題と今後

自分のやってみたいことに対しQiita記事(リンク有)があったのでコードなど修正しながらチャレンジしてみましたが、1項目ずつ勉強して理解しながら再度チャレンジしていきます。