小さなお店のAIアプリ 開発ゼロ日目に戻る
開発中のアプリの仕様とシステム構成が決まって着々と開発を進めていたのですが、いくつか疑問があがりいったん振り出しに戻す事にしました。
疑問1: 小さなお店で許可なく顔認証して保存すること
防犯カメラも勝手に撮っているわけですが、顧客管理しているわけではありません。
防犯カメラはあくまで防犯目的であって、その画像を使って顧客管理される事には抵抗がある人もいるでしょう。
小さなお店はその地域での信用や評判が非常に重要ですから、盗撮されているというように捉えられてしまう事は避けなければいけないでしょう。
そうすると常時ビデオ撮影して顔認識したら顧客管理するような仕組みはお店にもお客さんにも抵抗があるように思いました。
顔認識するとしても、お客さんが納得して自分の意思で利用してもらうようにする必要があります。
疑問2: PWAとしてWebアプリでの開発
ネイティブアプリとしてうまく顔認識させる事かかなわず、Javascriptのライブラリが利用できるPWAを利用する事にしていました。
PWAとして作成すると、どうしても利用できる容量に制限があります。特にSafariだと50MBという制約があり、たくさんのゲスト情報を保存していくと心もとない事になります。
GoogleはPWAに力を入れているようで、ChromeやAndroidで使う分にはあまり問題ないのですが、Appleはあまり本気でないようでiPhoneやiPadでの利用には不安が残ります。
気持ちいいUIを追求していくと、やはりネイティブアプリに分がありそうです。
今後アプリクリエイターとしてはFlutterに注力していきたいので、あまり複数の技術を同時にフォローしたり保守しなくていいようにもしておきたいです。
そんなわけで、ネイティブアプリをFlutterで開発したいという気持ちがくすぶっていました。
Flutterまわりのコミュニティにはなんとなくヒッピー的な反体制の雰囲気があって、独立アプリクリエイターには似合う技術、という印象を持っています。
そんな雰囲気の中で個人開発していければという思いがあります。
もやもやとそんな事を考えていたら一つの解決策を思いつきました。
顔認識で紙のポイントカードを置き換える
もともと小さなお店のAIアプリの付加機能の一つとして考えていた、顔認証でポイント管理して紙のポイントカードが不要になる、という機能を主軸にする事にしました。
お客さんには、顔をかざしてもらうことで会員IDを発行して、お店がポイントをつけられるようにします。
次回以降はまた顔をかざせばポイントを確認したり利用したりする事ができます。
これによって、ポイントカードを発行したり、別途お客さんにアプリをダウンロードしてもらう必要がなくなります。
顔画像は保存せずに、復元不可能な顔の特徴量だけを保存する事ができるようにすれば、プライバシーを重視するお店やお客さんにも受け入れられるのではないかと思います。
お客さんとしてはポイントカードを自分で管理しなくていい、名前や電話番号、住所等の個人情報を提供しなくても利用できる、ということで利便性があるのではないかと思います。
この目的に特化したアプリであれば、お客さんが操作をしたときだけ顔認証すれば良いことになります。ずっとビデオカメラを流して顔認証し続ける必要がありません。それであればその顔認証処理をクラウドサーバ上で用意すれば、アプリ側は軽量で済むようになります。
システム構成を見直す
アプリの主目的が変わった事で、システム構成を大幅に見直す事になりました。
ここまで10日ほど対応してきた作業の手戻りになりますが、今後ずっとアプリ開発者としてやっていく事を考えれば10日ぐらいは誤差でしょう。
それ以上に自分のやりたい構成に注力する事で長い目でみた場合のメリットは大きいと思います。
・モバイルアプリのフレームワークとしてFlutter & Dartを利用。
これがやりたかったと言っても過言ではありません。
・顔の検知はモバイルアプリ上でFirebaseのml visionを利用します。
・顔認識のディープラーニング部は、Herokuのクラウド上でPythonで構築し、Webサービスとして公開します。モバイルアプリから呼び出して利用します。
・認証はFirebaseを利用する予定です。
・データ保存は当面はモバイル端末上にSQLiteを使いますが、将来複数店舗対応する際にFirebaseのFirestore DBかHerokuのPostgres SQL上に保存する事を検討します。
今後に向けて
ゼロからの再出発となりましたが、モヤモヤが晴れて今後の開発に注力していけそうです。6月中にはファーストリリースできるように頑張っていきたいと思います。