売場の品切れを手軽に業者さんにお知らせする仕組みをつくりたい！

私はとあるスーパーで商品の仕入・管理の仕事をしている女性会社員です。
売場の管理については、色々な課題が生じます。

私の担当している部門では商品の「発注」は基本的に行っておらず、在庫管理まで各業者さんにおまかせする「消化仕入れ」で運用しています。
「消化仕入れ」については以下の記事（第2章　消化仕入れって？）をご参考にしてください。

https://note.com/chi_0321/n/n39ff22a9baa3

## 1.テーマの背景として
改善が難しい課題の一つとして、商品が売れないと仕入として計上されず、納品業者さんのロスになってしまうという仕入特性があります。
よって賞味期限の短い商品は控えめの数量で納品をされてしまい、逆に賞味期限が長い商品だと在庫管理が業者さんの力量次第になるため、どちらにしても売場での「品切れ」が散見されています。

業者さんとしては納品時に、店舗従業員に声をかけないで納品することができるので、従業員とのコミュニカーション不足にもなりがちです。
店舗側としては自分たちで仕入れた買取商品の管理が忙しく、業者さんに連絡するのはひと手間がかかるので品切れ状態のままにされてしまいがちです。

<br>

**そこで今回は`Teachable Machine`を使ってプライスカードの画像認識を行い、`Node-RED`と`LINE`と連動させて品切れ時に対象業者さんへの連絡を手軽に行う仕組みを作りたいと思います。**
業者さんへの連絡手段として普段活用している`email`と今後の手軽さ重視の`LINE`の両方で使えるシステムを作ることを目標とします。

品切れ通知のイメージ

![品切れ通知のイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/06b5b4e3-683a-8b52-b737-2b86d2610f6d.png)



## 2.`Teachable Machine`の画像認識機能でプライスカードの情報を学習させる

まずは`Teachable Machine`にログインします。

https://teachablemachine.withgoogle.com/

面倒な会員登録等は不要ですが、登録しない分サイト内に前回までの記録が残らないので、取得したURLは必ずどこかにメモ書きしておく必要があります。
ただし本当に手軽に機械学習させられるので、私はメモに残しておらず、その都度新しいURLを取得しました。

プライスカードに記載されている**業者名**を学習させました。

![TeachableMachine.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/bd3808a6-e4b7-1871-f72f-e7ed100e776c.png)


これでこのモデルのリンク先が簡単に取得できます。
https://teachablemachine.withgoogle.com/models/〇〇/

## 3.`FlowFuse`の登録
こちらにアクセスしてアカウントを取得します。

https://flowfuse.com/

残念ながら`FloｗFuse`のお試し期間が30日から14日間に短縮してしまったようです。今後、本格的に使おうとする場合は有料になるので、使い勝手をみて本登録を検討しようと思います。


**`FlowFuse`に登録が完了すると`Node-RED`のプログラミングの画面になります。**

<br>

今回はこちらの記事を参考に作っていきます。

https://qiita.com/h21550/items/3674caeb7531183021be




`Node-RED`には必要最低限のノードしか入っていないということで、先に欲しい機能をユーザー設定の**パレットの管理**から検索して追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/9c1aacf9-0776-8607-c37c-e70fd8922070.png)


**ノードを追加**を押すと複数の候補が掲載されています。
私はここで`Teachable Machine`と`LINE`を追加しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/28721178-0f28-1ae9-7260-f720aac2e7c2.png)

#### 最初につくったフローはこちら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/d75aac63-1ffe-e302-cf53-d4450c8b62cb.png)

`LINE Bot`を使いたかったので、LINE Developersで`Node-RED`用の新しいチャネル登録をしました。

<details><summary>しかしLINE Botとの相性が悪いようで・・・</summary>

### 流れはこちら
`webhook`の部分でLINE上で画像認証した画像を送り
`http reqest`その内容をつないでもらい、
`teachable machine`で画像認証し、判定してもらいます。

ここで要求中とでたので、ここまではどうやらつながっているようですが、`template`に行ったタイミングで**サーバーの接続が切れました**の表示がでてしまいました。
その後、何度やっても接続が切れてしまい、`LINE Bot`に返事が返ってくることはありませんでした。
</details>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/9d645e1a-217c-86c9-61db-e5a4914cdb1a.png)


おそらくLINEから画像認識を受信したことで、サーバーがダウンして接続が切れてしまったようです。
<br>

## 4.cameraのノードを使って`email`にも出力できるように作り直し！
`camera`スタートに変更し、出力手段も`LINE`だけでなく、新たにパレットの管理から追加して`email`も選択できるようにセッティングしました。


<br>

![手駒銘茶の結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/ca6d3b83-5c23-e280-23eb-43bbdd6edc79.png)


### しかし結果として
<details><summary>メールにもLINEにもつなげることはできませんでした。</summary>
①`LINE`とつながっている`ReplyMassage`は無反応。
②`email`でつながっている補充依頼メールはユーザーIDとパスワードが認証されないとの結果でつながりません。（`email`の場合は参考資料がなかったためどこがNGなのか不明）
③`debug`のみ、つながりました。
</details>

先程使っていた`LINE`の`Reply message`では**LINEから送られてきたものへの返事**という意味があるので、スタートを`camera`にしたのでつながらなかったようです。
そこで別の方法を検討しました。

https://zenn.dev/dsl_gunma/articles/78218c47efa9d8

この方法を使えば、`camera`から`LINE Notify`を通して`LINE`にメッセージをおくることができそうです。

## 5.出力部分をLINE Notifyに変更

#### つくったフローはこちら

![LINE Notify.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/6d6899ca-beba-047a-11d8-92612c7d571a.png)


**Node-REDに対応した`LINE Notify`に新たに登録をしました。**

https://notify-bot.line.me/ja/

### 出力部分のノードの内容のメモ
①`switch`で情報を仕分けします。今回は2社なので2パターンと読み取れなかった分を`debug`にいくように設定しました。

![Switchの中身.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/b7847952-c6f0-f3c2-3f12-c77aeebbddc3.png)


②`LINE-Notify`はTeachable machineで認識した文字をPayloadできないようなので
直接メッセージに送りたい内容を入れました。トークンは`LINE-Notify`の登録時に取得できます。（メモをとっておく必要があります）

![LINE Notifyの中身.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/bf3708d6-0db1-e31d-25e4-63230bd02727.png)


#### 実際に届いたLINEの内容はこちら

![LINENotify加工.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3656954/836c1f8a-b019-d060-639d-e847b243196a.jpeg)

## 6.まとめ

`camera`を使っての画像認識はできましたが、パソコンのカメラでは文字が認識がしにくいのか、2社にも関わらず精度も正直イマイチでした。（最初のラインのカメラで送った分は認識できていました）

担当している加工品でも300社以上の業者様の登録があるので、`camere`を使ったプライスカードの画像認識では判別するのは難しいのではないかと思います。ここをLINEカメラの文字認証機能をつかった方法でも試してみたいと思いました。

また今回の目標は**品切れ連絡を手軽にする**というのが第一目標だったのですが、「事務所に設置しているパソコン」のカメラが必要になると、**手軽に**とは言えないかなと思いました。

今回は`Teachable Machine`を使いたかったので、連携していて扱いやすい`Node-RED`で動かしてみましたが、次は`LINE`と相性の良い`Make`で**売場の品切れを手軽に業者さんにお知らせする仕組み**を作成してみたいと思いました。

最後まで読んでいただきありがとうございました。