なぜこのアプリを作ったか

ドリンクは自動販売機でSuicaで買えるのに、置き菓子は相変わらず小銭が必要だなんて...

どんなアプリ?

買いたいお菓子を手に持って、設置されているタブレットのカメラボタンを押すと、

  1. タブレットのカメラが手に持っているお菓子を認識します。
  2. 顔認識で買物客が社員の誰かを識別します。
  3. 画面に社員名とお菓子の明細を表示し、内容に間違いなければ 「お買い上げ」をタッチ。 これだけの操作で購入が完了します。

また、カメラボタンを押すときに笑顔でいると、「スマイルポイント」がたまります。 「スマイルポイント」がたまると購入時に割引を受けることができるようになります。

購入した明細はSalesforce上に自動で記録されます。 経理部は月1回、レポートを確認し、それをもとに給与天引きすることが可能です。

実現方法(アーキテクチャ)

  • アプリUIはLightningプラットフォームを利用して構築されています。具体的にはLightning Component、Visualforce、Apexを利用しています。
  • お菓子の認識は、Einstein Vision - Object Detectionを利用しています。
  • 顔認識は、Amazon Rekognitionを利用しています。トレーニングデータはSalesforce内にある各ユーザーのプロフィール写真を利用しています。今回は300人弱の顔を学習させました。
  • 笑顔でいるかどうかの判別は、Einstein Vision - Image Classificationを利用しています。

苦労したこと

(1) 手に持ったお菓子の認識

手に持ったお菓子を正しく認識させるために、なるべく少ない撮影画像でトレーニングすることを最初に考えました。 実際にサービス化した際に、商品画像を何枚も撮影してもらうのは、現実的ではないと考えたからです。

そのために、Data Augumentation技術を使って画像を大量生成することを最初に試しました。回転させたり、RGB値をずらしたりして学習させましたが、うまくいきませんでした。

最終的にはEinsteinのお作法に沿って、背景やお菓子の持ち方を変えて数十枚の写真を用意し、モノクロ化とぼかし加工で画像枚数を4倍にし、それをトレーニングに使用しました。

(2) 笑顔の検出

笑顔とそうでない顔画像をそれぞれ600枚ずつ用意して学習させました。 最初は撮影した画像をそのままImage Classificationに投げても精度上がりませんでした。 そこで、Amazon Rekognitionが認識した顔のBounding Boxを返すことを利用し、顔部分を切り取ってからImage Classificationに投げると精度がでるようになりました。ただし、Apexで顔部分の切り抜きが難しく、JavaScriptで行うためには、顔認識時と笑顔検出時の2回サーバーとの通信が必要となり、応答速度がかなり遅くなってしまったので、今回のアプリのソースコードからは最終的に除外しました。

(3) UIの実現

iOSのネイティブアプリではなく、Lightning ComponentやVisualforceなどのHTML系テクノロジのみで、どこまで操作感の良いUIが実現できるかに挑戦しました。結果、カメラボタンと「お買い上げ」ボタンの2タッチのみでお会計を済ませることに成功しました。 また、カメラボタンがあることで、カメラと人物の距離感を一定にすることができ、認識精度の向上に寄与していると考えています。

気に入っているところ!

「スマイルポイント」に注目していただきたいと思っています。 人は笑うことでより健康でいられる、ということが統計的に実証されています。 購入時に毎回笑顔でいることで、社員の健康度を少しでも上げることに寄与できると思っています。 社員全員が笑顔でいられる会社はきっと良い会社ですよね!

時間があればチャレンジしたかったこと

  • 大量の背景画像をあらかじめ用意しておいて、お菓子画像を1枚撮影すると、背景画像と合成したトレーニング画像を大量に作成して精度が出るか試してみる。
  • 笑顔のときに「笑顔がいいですね」「毎日笑顔でいいですね」などを合成音声にしゃべらせる。
  • 顔認識をAmazon Rekognitionではなく、自前のモデルをHeroku上にデプロイして推論(Inference)させる。Siamese Neural Networks for One-shot Image Recognitionという論文をみて、Amazon Rekognitionと同じように1人あたり1枚だけの画像で顔認証をする方法を独自構築してみたかった。
  • iOSのネイティブアプリにした場合に、カメラボタンを押さずに、社員とお菓子を自動認識することができるか。

次のステップ

このアプリケーションの将来の展開として次のようなものを考えています。

  • 顔認証部分を拡張して、タイムカードの打刻に利用する。出退勤管理のアプリと連動するのも良い。
  • お菓子以外に、社食で提供している皿モノを認識させる。社食の会計を自動化できるし、皿モノのカロリーや栄養成分を登録しておけば、「最近、脂質の取り過ぎです」とかの警告を送ることができ、より社員の健康に貢献できる。

アプリを試すには

コンテスト主催者の方

アプリを実際にお試しいただくためのログインID/パスワードはメッセージ機能を使って別途お送りします。ただし、実際に試すには、顔画像の登録が必要ですので、お試しになりたい場合は、顔画像を提供いただければ登録いたします。(現在は顔画像の登録機能はアプリに実装できておりません。)

それ以外の方

6/8(金)に開催される最終選考会でデモを見てください!皆さんでお試しいただけなくて、ごめんなさい。

Built With

  • amazon-rekognition
  • apex
  • einstein.ai
  • lightning
Share this project:
×

Updates