小さなお店のAIアプリ システム構成を決める
お店のためのAIを使ったアプリの開発を始めました。
おぼろげに構築したいもののイメージを持っていましたが、どのような技術要素を利用するかでしばらく悩んでいました。
まだ迷いはありますが、最初のリリースとしては概ね固まりました。
家の建築で言えば、鉄筋か木造か基本的な構造が固まったというところでしょう。
小さいお店に利用してもらうために
小さいお店に利用してもらうためには、導入するためのハードルができる限り低くないといけません。
専用の機器が必要だったり、別途契約が必要だったりしたら、個人でやってるような小さいお店は二の足を踏むでしょう。
それはつまり、スマホかタブレットでアプリストアからダウンロードすればすぐに使えるものでなければいけません。
また、サービス利用料が月5千円もかかるようだと個人のお店では導入できないでしょう。
初期費用無し、スマホかタブレットさえあればよい、という条件であれば試しに使ってみてもらえて、月1,000円ぐらいであれば継続して使ってもらえるのではないかと思っています。
月1,000円以下のサービスとして運用する場合、リッチなクラウド環境を利用する事は現実的ではありません。ある程度端末上で完結できるようにしておかなければなりません。
モバイル端末上でAIの画像認識処理を動かす事が、今回の技術選定で一番のポイントとなりました。
ネイティブアプリかWEBアプリか。
ネイティブアプリにするか、ウェブアプリにするか。ここが一番難しい判断となります。
結果的にWEBアプリとして作成する事にしましたが、本当はFlutterを使ってネイティブアプリとして開発したいと考えていました。
しばらくFlutterで顔認証のエンジンが構築できるか頑張ってみましたが、まだあまり使いやすいライブラリが存在してないこともあり、時間がかかりすぎてしまいそうで断念しました。
WEBアプリとしては、face-api.jsという顔認証のための非常に使いやすいライブラリがあります。
試しにセレブの顔写真で試してみたが、精度高く顔認証してくれていて、十分実用に耐えうると思いました。
また、最近ではWEBアプリでもPWA (Progressive Web Apps)という方法があります。
これだとWEBアプリでもある程度ネイティブアプリのように利用してもらう事が可能です。
WEBアプリでは、細かい動きのパフォーマンスでネイティブアプリに敵わない部分がありますが、本来のアプリの目的を損ねるわけではないので、そこはいったん諦めようと思います。
Flutterで顔認証アプリを構築するのはチャレンジングでやりがいがあるのですが、アプリ開発に生活がかかっているので自己満足を優先させるわけにはいきません。
WEBアプリとしての懸念点
PWAの場合、端末に保存できるデータのサイズに制限があります。
AndroidのChromeなら空き容量の6%未満、Safariなら50MBまでという厳しい制約となっています。
お客様の顔認証を端末上で実施するには、それぞれのお客様の顔の特徴量の情報を保持しておく必要があります。
数百人程度なら問題にはなりませんが、数千人、数万人となってくると容量的に難しくなってきます。
そういった来店するお客様の多いお店向けには、別途クラウドを利用するバージョンを用意する必要がありそうです。
ただ、今回のコンセプトは個人レベルの小さいお店向けなので、そこは割り切って端末で完結できるようアプリを作っていこうと考えています。
とりあえず5,000人ぐらいのお客様が登録されている状態で、一般的なスマホで利用に足るパフォーマンスが出るか試してみないといけませんね。
システム構成まとめ
Vue.jsでPWAとして構築する。
UIはVuetifyを利用
顔認証のエンジンにはface-api.jsを利用。
認証、一部のデータ保存はFirebaseを利用。
ローカルへのデータ保存はIndexedDBを利用。