これはいったい何のためのアプリ?
はい、このアプリは来日中の外国人観光客のために、カップ麺の作り方とアレルギー情報の各言語での翻訳文を表示してくれるアプリです。
ご存じかもしれませんが、コンビニやスーパーで売っている日本のカップ麺は、作り方はすべて日本語で書かれています。日本人なら作り方が分からずともなんとなくで食べることができるかもれしれませんが、外国人はそうもいかないでしょう。また、原材料のアレルギー表示が理解できないことは、日本語が分からない外国人にはリスクです。
そこで、外国人観光客が確実・安全に日本のおいしいカップ麺を食べることができるように、情報表示のお手伝いをするのがこのアプリです。
※試作段階のためアプリは公開されていません。
使い方
- スマホでアプリを起動します
- アプリのカメラでカップ麺のフタを捉え、画面をタップします
- 識別した候補を選択します
- 翻訳文が表示されます
このアプリではリアルタイムの翻訳は行っていません。あらかじめ翻訳した文をデータベースから読み込んで表示しています。
画面遷移
アプリ起動後の画面遷移を図にしました。起動時は MainCameraView
が表示され、ユーザからの操作を待機します。
MainCameraView
アプリ起動時は MainCameraView
が表示され、カメラのプレビューが表示されている状態です。このプレビューが表示されている間、リアルタイムでカップ麺の識別が行われいます。このときにカメラのプレビュー表示をタッチすると、カップ麺の識別結果が決定します。決定には直前の10フレームの識別結果をもとに判断されます。
ItemConfirmationView
識別結果が決定すると、 ItemConfirmationView
に遷移します。ここでは結果の確認を行います。識別結果に問題がなければ、ユーザはOKボタンを選択します。結果が実際のラベルと異なる場合は、 OtherCandidatesView
に遷移してほかの識別候補を確認することもできます。
ItemDetailView
選択されたカップ麺の名称・作り方・アレルギー情報などが表示されます。表示言語は SettingView
にて英語・韓国語・中国語(繁体・簡体)から選択できます。
アプリのエコシステム
ユーザに提供されるのは単一のアプリですが、その全体はアプリ本体も含めて、 DataSetManager
, MachineLearning
, App
の3つのモジュールで構成されています。
DataSetManager
ECサイトのAPIから市場に販売されているカップ麺の情報(画像・テキスト)を収集し、管理するモジュールです。大きくPythonスクリプト群とDjangoによるWebアプリ部に分かれています。
Pythonスクリプト群
ECサイトから情報を収集する複数のPythonスクリプトで構成されています。
カップ麺収集スクリプト
カップ麺は試験販売なども含めると、年間数百種類の新製品が発売されているといいます。そのすべてを網羅するのは困難なため、消費者が日常で目につきやすい商品を扱っているという判断から、ECサイトに掲載されているカップ麺を対象とすることにしています。ECサイトはAPIの利用のハードルが低い楽天市場を活用しています。
カップ麺収集スクリプトは、楽天API経由で楽天市場に掲載されているすべてのカップ麺の画像とテキストを収集し、収集用DBに保存します。
学習用データ作成スクリプト
収集したカップ麺のフタ ラベルの画像を加工し、正解ラベルとともにCNN学習用のデータセットを作成するスクリプトです。ECサイトに掲載されているフタの画像は1方向(だいたい正面斜め上)のみのため、射影変換などの画像処理を利用して、様々な角度からの画像に変換します。これはユーザがカップ麺のどの方向と角度からアプリを使用しても正しく認識するためのデータ拡張です。
Django Webアプリ部
ECサイトから収集した画像・テキストを管理・編集するためのWebアプリで、Djangoを利用して構築されています。収集用DBに保存されたデータを参照し、学習データセットに含めるかを管理したり翻訳文の編集を行ったりします。
MachineLearning
作成したデータセットをもとにカップ麺の識別ができるように、Google Colab上でCNNモデルの学習を行います。フレームワークはKerasを利用し、CNNモデルのアーキテクチャはVGG16です。学習済みモデルからの転移学習は行わず、初期化状態のVGG16モデルから学習しています(ImageNetなど学習済みモデルへ移行予定)。現在はプロトタイプ開発のため、9種類のカップ麺のみ学習しています。
カップ麺のフタでの学習が完了したモデルは、Keras形式のファイルからTensorFlowLite形式のファイルへ変換され、アプリに搭載されます。
App
スマホアプリ本体です。開発にはiOSとAndroid両方への対応の工数削減のために、Flutterを利用しています。
今後の予定
- 対応するカップ麺の追加(数百種類)
- 対応する言語の追加
- 認識精度の向上