間違い探しのような商品パッケージ変更を見分ける
こんにちは、私はスーパーでバイヤーをしているアラフォー会社員です。
皆さんスーパーのチラシを見たことはありますよね?
あのチラシですが、出来上がるまでには多くの人間の度重なるチェックがあるのです。
もちろん私を含めたバイヤーのチェックも必須です。
そんなチラシチェックでの「あるあるネタ」
商品パッケージのマイナーチェンジがほぼ間違い探しレベル!
長年何度も悩まされたこの問題の解決に一筋の光が見えました。
「これってAIに画像判別してもらえば間違いが無くなるんじゃないか!?」
最近知ったTeachable Machineという簡単に画像や音声を機械学習できる仕組み。
これを使えば人間では判別の難しいパッケージ画像でもズバッと仕分けてくれるはずです。
ということでこの問題をTeachable MachineとLINE Botを組み合わせて解決してみます。
⇩⇩出来上がったのがこちら⇩⇩
なんで作ったのか
まずは誤解を与えぬように言っておきます。
パッケージリニューアルはメーカーがお客さまに商品をより良く伝えるための努力です。
そして一見変化が分かりにくい=いつも買ってくれてる人が戸惑わないようにへの配慮です。
素晴らしいことなんです。
それを大前提としつつ下の画像をご覧下さい。
ねっ? 画像だけみるとどれが何時のものだか判別できないでしょう?
我々はチラシに掲載される画像が今現在売場に並んでいるものと同じかチェックしなくてはなりません。
でもこれが容易ではない。。
人間の目では間違う可能性が高いので、いっそのことデジタルで解決しようと思いました。
ということで LINEで商品画像を送り、その商品がいつのパッケージかを返答してくれるものを作ります。
☆作成手順☆
使用ツールはこちら
- LINE Developers (公式LINEの作成)
- Teachable Machine(画像判別の機械学習)
- Node-RED (LINE、Teachable Machineの連携)
Teachable Machineで機械学習
Teachable Machine自体は登録も無しで直ぐに使えます。
説明も日本語だし操作も簡単なので初心者の私でも使いやすいです。
今回は手元に無い古い商品も機械学習させるため、画像データをアップロードし学習させました。
しかしこれがつまずきポイントに…
各画像を1枚づつアップロードしたのですが、それでは全く判別してくれませんでした。。
この時の正解率は20%。 というか全てを同じ画像として認識していました😢
本当は実物を100枚程度角度等を変えて学習させるのがいいのでしょうが、古いパッケージは手元にありません。。
そこで同じ画像を大きさを変えたり、全く同じ画像を何枚かアップロードしてみました。
するとみるみる精度があがり3~4枚づつ学習させた時点で正解率はほぼ100%になりました😃
機械学習が終わったら画面右上のモデルをエクスポートする
をクリックします。
さらにモデルをアップロード
をクリックし共有可能なリンク
をコピーします。
このリンクを後で使用します。
Node-REDの設定
最終的に出来上がったものがこちらです。 かなりシンプルです。
Node-REDの設定については引用記事を大変参考にさせていただきました。
初心者にもわかりやすい記事をありがとうございます。
ノードの各設定については引用記事にも詳しく記されておりますので是非読んでみてください!
では各種設定の説明です。 引用記事と重複する内容が多数ありますがご了承下さい。
①http inノードの設定
メソッドをPOST
にします。
URLに/linebot
と入力します。
②functionノード(1つ目)の設定
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ノードの設定
https://api-data.line.me/v2/bot/message/{{{messageID}}}/content
認証にチェックを入れる。
種別はBearer認証
を選択。
トークンにLINE botのチャンネルアクセストークンを入力。
出力形式はバイナリバッファ
を選択。
④Teachable Machineノードの設定
ModeはOnline
を選択。
URlにTeachable MachineでコピーしたURl
を入力。
outputはBest prediction
を選択。
⑤functionノード(2つ目)の設定
const className = msg.payload[0].class;
msg.payload = {};
msg.payload.events = [
{
"type": "message",
"replyToken": msg.replyToken,
"message": {
"type": "text",
"text": `これは「${className}」のパッケージだよ`
}
}
];
return msg;
⑥LINE ReplyMessageノードの設定
SecretにLINE botのチャンネルシークレット
を入力。
AccessTokenLINE botのチャンネルアクセストークン
を入力。
設定は以上!!
作ってみて気づいたこと これからの可能性
今回Teachable Machineでの機械学習をメインとして微妙なパッケージの違いを判別してみましたが、実用レベルには至っていません。
問題点は
①膨大な種類のパッケージを学習させることが出来ない。
②微妙なPKGの違いを実物画像で判別させるのは難しい。(チラシ確認なら可)
といったところです。
②については実物画像の学習枚数を増やせばクリアできる可能性は多いにあると思います。
しかし今回のように既に実物がない場合は難しいと言わざるを得ません。
1世代前との新旧判別だけなら今から実物の画像収集すれば来期には実用が見込めるという希望は残っています。
実際の運用を考えると1世代前との判別だけいいかと思いますし。
Teachable Machinenについては他の業務で使えることが無いかもう少し考えてみたいと思います。
また画像判別の機械学習についてはもっと精度が高ければ棚割の間違いや在庫の瞬間的な把握等に役立てそうだなと思いました。
なんにせよ、また1つデジタルの武器を手に入れたを嬉しく思います。
次はもっといいものを作るぞー!