はじめに
パン屋や、うどん屋などの会計の際、通常トッピングは人間が見て識別し、会計をします。 そのためには店員に様々なトッピングの種類と値段を覚えそれに加えレジを扱える経験がなければいけません。 ましてやレジを扱う経験がないとレジ前に行列ができてしまう場合もあります。
そこで会計の際にAIを導入することで人の手による入力が省けます。この他にも会計の際の時間短縮やレジの無人化により人件費が浮かせることができます。小売店にとって大きなメリットになるでしょう。
今回シリーズではパン屋などの店に向けて、ハンバーグのトッピング、うどんのトッピングなどのトッピングを検知する AIを作りたいと思います。
概要
作業全体の流れはこのようになります。
- 学習に使う画像集め
- アノテーション作業
- 環境構
- AIの学習
- 実用化
では早速ですが始めましょう。
学習に使う画像集め
AIを学習させるためにはまず学習に使うデータセットを用意します。 今回は無料で画像を集める方法を2つ紹介します。
Googleの画像検索からダウンロード
最初に紹介するのがhardikvasaさんが作ったgoogle-images-download。 Google から画像を入手する際に楽にダウンロードできるようになっています。
https://github.com/hardikvasa/google-images-download
上のリンクもしくはpip でインストールすることが可能です。
pip install google-images-download
使用例
上の図の .py を作成して実行するだけで keywordsにあるキーワードで検索した画像を すべてダウンロードすることができます。
たまに検索ワードと関係のない画像が混じっているので、手入力で消していきましょう。
しかしこの方法ではGoogleの制限で一つのキーワードにつき、ダウンロードできる画像枚数が約300~400枚しか ダウンロードすることができないため、大量の画像を必要とする場合あまり向いていない。
Instagramからダウンロード
この方法はとても簡単にでき、大量の画像を入手することができます。
まずChrome のブラウザーのアドオンDownloader for Instagram™ + Direct Messageを追加します。
次にChromeでInstagramのサイトを開いてダウンロードしたいキーワードを検索します。 検索結果が出たら一番右上にある丸いボタンを押すとzip形式でダウンロードすることができる。
*この時タグのあるキーワードを選んだほうが多く結果が表示されます。
この方法はいっぺんに大量の画像を入手できるがその分関係ない画像が混入しているため、 手入力で消す必要があります。
アノテーション方法
入手した画像はそのまま学習に使えないため、次にこれらの画像で教師データを作成します。 AIが学習を行うためには,画像のどの位置に何のオブジェクトにあるかの3要素(画像,タグ名,座標)を教える必要があります。 今回のブログではトッピングに対してバウンディングボックスで囲む形式のアノテーションを紹介します。
VIA
このアノテーションツールを紹介する理由が環境構築は一切必要がなくダウンロードして開くだけで使えます。
http://www.robots.ox.ac.uk/~vgg/software/via/
上記のリンクからツールをダウンロードし解凍すれば、使えます。
使用例 左のRegion Shapeでバウンディングボックスの形を選び、Region Attributes からタグを作ることができます。 終わったら上のバーのAnnotationからjsonかcsvでデータをまとめることができます。
labelImg
もしも教師データがxmlファイル形式で必要ならlabelImgを紹介します。
https://github.com/tzutalin/labelImg
上記のリンクに入手方法が載っていますが以下のコードをterminalにコピペするだけで使えます。
git clone https://github.com/tzutalin/labelImg.git cd labelImg sudo apt-get install pyqt5-dev-tools sudo pip3 install lxml make qt5py3 python3 labelImg.py
使用例 Create RectBoxでバウンディングボックスを作り、ラベルを選択もしくは作成することができます。