TeachableMachineで店舗EC作業の自動化調査

# 0.この記事で完了した分はこちら:information_desk_person:
TeachableMachine を使って、店舗内の画像認識を行いました。


https://x.com/mts2024mts/status/1828778363068330140


みなさんこんにちは。
某小売業でECシステムに関わっています。

前回はPower Automateを使って、WEBへの自動入力を作成しました。（[前回記事](https://qiita.com/makino-tet/items/7e5c136642837625df67 "前回記事")）
今回はTeachableMachineを使って、
店舗EC作業の自動化に必要な画像認識を試行錯誤しました。


# 1.ECは利用者にとって便利ですが、運営は？
ECではお客様からの受注後に商品を準備して配送をします。
ECというと倉庫からの出荷をイメージしますが、私の管轄しているECは店舗から出荷という特徴があります。そのため、受注後は商品を店舗棚からピッキングして梱包する必要があります。しかし、その作業は人の手によって行われております。
　　　　　　　　　　![ピッキング.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809072/0cd08325-3258-6ef5-09a9-18551cb86800.png)


# 2.ピッキングの自動化はできないの？:frowning2:
以下の記事の通り、ピッキングを人の手で行わないようにする方法として、ロボットの導入があります。

https://note.com/makino_tet/n/ne17424632eac#c4b61099-14ef-467d-982b-91b3a6e0b75a

しかしながら、費用が高額であることや効果があるのかについて疑問が残ります。


# 3.できるところから試そう！
まずは、費用が掛からないところから調査を進め、技術的に可能であることや効果の見通しがつくレベルまで実施したほうが、導入のハードルが下がると考えました。今回はその中でも、店舗にて**棚から商品をピッキングするための処理**をメインとします。

ロボットが実施するピッキングまでの流れは以下を想定します。
　①お客様から受注が入ると、受注商品のデータが更新される
　②ロボットが店舗作業場から店内へ出る
　<font color="red">**③店舗の通路を進み、商品棚の近くまで行く**</font>
　<font color="red">**④商品棚から値札をもとに該当商品を識別する**</font>
　<font color="red">**⑤ロボットに付いたアームで商品をつかみ、該当商品を判定して自身の運搬かごに入れる**</font>
　⑥その他の商品についても同様にピッキングする
　⑦店舗作業場までロボットが戻り、かごを置く
　⑧ピッキングしたの商品のデータをピッキング済みに更新する

上記のうち、③④⑤の画像認識処理を今回のターゲットとしました。ロボットやアームについてはまだ購入していないのでその点はご注意ください。

# 4.使用したツール
・[TeachableMachine](https://teachablemachine.withgoogle.com/ "TeachableMachine")
・[CodePen](https://codepen.io/ "CodePen")
・[ChatGPT](https://openai.com/ "ChatGPT")

# 5.開発（完了までの分）
実施分について、完了までしたものを5章で紹介します。実施を試みて、あともう少しでできる可能性が見えてきているものを6章で紹介します。

## 5-1.店舗画像を集めよう
まずは、ラベルごとに画像を集めます。③④⑤の画像認識処理に必要な「通路」や「値札」を中心にインターネットにて画像収集しました。

**ラベル**
・人
・店舗の主通路（複数の通路につながるメインの通路）
・店舗の副通路（両側に商品棚がある通路）
・値札
・バーコード
・それ以外

他にも、店舗で目にするカートやレジなどを判定する必要もありますが、ひとまずこれくらいにしました。

## 5-2.TeachableMachineで学習
機械学習できるものは沢山ありますが、今回はTeachableMachineにしました。収集した画像をTeachableMachineにアップロードして、学習させます。TeachableMachine内にも判定できる機能はあります。

![モデル学習.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809072/aaee2e55-a27c-cc94-ec53-2ae830b10f18.png)


モデルをクラウドにアップし、URLを取得します。こうすることで、他のツールから呼び出しが可能になります。

![URL取得.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809072/af86f54b-9639-b1ac-1257-009fa959ff25.png)





## 5-3.CodePenにまずは仮実装
5-2で作成したAIモデルを簡易的に実験するため、スマホに実装できるツールを考えました。どのツールでも良いのですが、今回は手軽にできるCodePenにします。CodePenはhtmlをWEBに張り付けると表示されるので便利です。
スマホの特徴として、カメラが内と外に２つ付いています。そのため、どちらのカメラを使うかを選ぶように配慮しました。コードはChatGPTに書いてもらいました。


**機能**
・接続カメラの選択
・カメラ画像のリアルタイム表示
・5-2で作成したモデルによる識別
・ラベルの確率をすべて表示

　　　　　　　　　![コードペン.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809072/5f4539fd-d544-8b65-c72e-123d5c3c9fd3.png)


## 5-4.店舗で動作確認:department_store:
撮影許可OKのダイソーとビックカメラで動作確認しました。

### 5-4-1.通路や人は認識できている？
以下が店舗で確認した映像です。

https://x.com/mts2024mts/status/1828778363068330140

通路の識別、人の識別ができていることが確認できました。
ダイソーですべて動作確認をする予定でしたが、値札がない店舗のよう(そりゃほぼすべて100円だからな:sweat_smile:)で仕方なく、想定した動作確認を5-4-2に分割しています。

### 5-4-2.値札やバーコードは認識できている？
以下が店舗で確認した映像です。

https://x.com/mts2024mts/status/1828781689440805062

棚に近づくと値札の識別、商品を手に取り商品を回転させるとバーコードの識別ができていることが確認できました。

## 5-5.所感
おおよそ認識はできていると感じましたが、
画像位置によっては確率が低くなっており改善が必要であること、突如それ以外の確率が上がることも多々あるので、学習する画像を増する必要がありそうです。また、ビックカメラは電子棚札の陳列がほとんどでしたので、もう少し電子棚札の学習もしておく必要があると感じました。

:::note info
ピッキングタスクをするなら・・・
看板も認識対象としないと、どこの棚の通路にいるのかわからないなと感じました。
また、人や棚の認識はできているけれど、何m先なのかなどの情報も実現する上では必要だと感じました。
:::



# 6.開発（未完了の分）　試行錯誤だ:sweat_drops:
5章のままでは、ロボットへの応用には大量の課題が残ります。そこで、さらに実現に向け試行錯誤をいたしました。
AIモデルの識別種類を増やすことも必要ですが、それ以外が技術的に可能なのかの点もまだありますので、そこに着目しました。
![やりたいこと構成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809072/6f0d861c-010f-e14b-0a06-497a58b59ca7.png)


## 6-1. 使用を試みたツール
・[Raspberry Pi 5](https://www.raspberrypi.com/ "Raspberry Pi")
・[Node-RED](https://nodered.org/ "Node-RED")
・USBカメラ

## 6-2.制御装置側Raspberry Pi 5 
まずは、ロボットの制御装置の作成からになります。モータの制御ができるRaspberry Pi 5を選定し、調査用に購入しました。そして、USBカメラをRaspberry Pi 5に接続します。

![ハード.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809072/882dbd5f-aaeb-6eb2-a82b-843bc5c32640.png)



### 6-2-1.セットアップ
セットアップなどは他の記事を参照してください。Raspberry Pi 5はここ最近発売された最新モデルですので直近の記事が多数存在します。

https://qiita.com/towamz/items/f1351f587f9d7c98eaea

### 6-2-2.Node-RED
Node-REDをRaspberry Pi 5にインストールします。そして、フローを作成します。以下はUSBカメラで撮影した画像をサーバに送ろうとして試行錯誤しているフローです。
![ras1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809072/4478c40c-0296-20a9-f96a-cb2789c63e12.png)

Raspberry Pi 5で撮影した画像をNode-RED上に表示させています。

## 6-3.サーバー側Node-RED
制御装置だけの単体でも、ロボットとして成立しますが、状況を記録ことや汎用的な役割も持つようにするためにサーバーを考えます。制御装置とサーバー間をつなぐため、サーバー側も同じくNode-REDを使用します。無料の範囲内でも固定URLで通信が可能です。以下が制御装置からの応答を返えそうとしているフローです。
![フロー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809072/155e12bc-00e5-7f8c-1310-86d4e96289e4.png)

## 6-4.プランの練り直し:fearful:
制御装置をどう使うか、AIモデルをどこで動かすか、それに加えサーバー間の通信はどうやるのかなども考える必要があり、モタモタしたので試行錯誤の過程だけ紹介します。

プランA：AIモデルはアップロードしたままにしておき、制御装置から呼び出し
　　　　　カメラ→制御装置→AIモデルサーバー→判定
プランB：AIモデルはアップロードしたままにしておき、サーバーから呼び出し
　　　　　カメラ→制御装置→サーバー→AIモデルサーバー→判定→制御装置
プランC：制御装置にAIモデルを置く
　　　　　カメラ→制御装置(AIモデル)→判定


:::note warn
プランAは、
制御装置側のNode-REDにTeachableMachineのノードを入れ込むのですが、ノードを追加しても、認識されないのかエラーになりました。
プランBは、
Node-RED間の接続などに時間を少し使いましたが、経路が長く、現実的ではないのかなと考えました。
プランCは、
制御装置にAIモデルを配置するための環境を整備する必要があります。手順もTeachableMachineに記載されていましたが、Raspberry Pi 5ではpipが使えないというエラーにかかり、環境整備をもう少し整える必要があるのではないかということで少し止まりました。
:::
プランCが有力かなと考えています。Raspberry Pi 5は最新モデルゆえに過去の手順や記事ではできていても、引っ掛かることもありそうですね。

# 7.次は未完成を実施させるぞ！:muscle:
今回は、TeachableMachineで店舗内の画像認識をしました。:boy:

ロボットに応用するにはもう少し時間がかかりそうですが、できなくもないという感触です。今後も開発していきたいと思います。

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

2024年8月28日　 作成

# 追記１　チームコメント
私の所属するチーム内にこの記事を紹介しました。その際、以下の意見が出ましたので、ご紹介します。
・今後MTさん(私)のような取り組みがこの企業にも必要になっていくといいですね～

もっと頑張りたいと思います。

# 追記２　パブリックコメント
また、他の方でこの記事を拝見し、以下のコメントが寄せられましたので、ご紹介します。
・ロボット実装ための下準備、なかなか手を出しにくいところに着手されていてただただすごい！しか出てきません。ロボット実装の記事も読める日を楽しみにしてます！
・実店舗からのピッキングのロボット化、大変そうです。できるところから手を付けていっていて、制御装置を購入する実行力、見習いたいです。

前向きなコメントありがとうございました。励みになります。


2024年9月2日　 修正