はじめに
アプリ制作未経験で、踏み出してみたい方に参考になるように書き残しておきます。
アプリはどうにか一通り完成しました。
アプリの紹介サイトはCoVision:ペット見守りAIカメラアプリです。
アプリ制作・・・面白いですね!
手元のスマートフォンでテストしつつ動きを見ながら開発できるので、すごくわかりやすかったです。プログラミングでいうなればHTMLみたいな感じでしょうか。
教訓
開発言語はネイティブを選択した方がよい
ハイブリッド開発言語のFlutterを最初に選んでいました。
しかし、Flutterのカメラ関係のAPIにバグがあり、アプリのコアである物体検出AIを組み込めなかったのでKotlinに変更しました。
簡単なアプリを作るならFlutterですが、複雑になりうるのであればネイティブを選択した方がよさそうです。
FlutterのAPIにちょっと不具合があったので、関数をオーバーライドして書き直して・・・微調整して・・・使えないみたいなこともありました。
Kotlinもコード例がJavaほど多くないため、あまり開発しやすいとは言えませんでした。
Javaなら対応しているAPIも、Kotlinには対応していないとかありましたし。
コードは、PerlやPHPに比べかなりキレイに書けるなという印象でした。
iOSよりAndroid(個人差があります)
費用の面で言えば、Android。
アプリのストア登録をするためには、Androidは1回きり(約3,000円)ですが、iOSは年会費(約1万5,000円)で割と高い…
しかも、iOSアプリはMacでビルドする必要があるので、Macを持っていない人にはハードルが高い。
MacユーザーならiOSまたはAndroid、WindowsユーザーならAndroidでいいと思います。
開発用のPCスペックは気にしなくてOK
Android Studioは、ドスパラ(サードウェーブ)で購入した安価なノートPCで十分動きます。
まずは構想をアウトプットする
どんなアプリを、どこまで作るのかは最初に決めておいた方がよいです。
私の場合は、使っているイメージ図を紙に書きだすという原始的な方法を取りました。
何となくやっていると、機能の調整もそうですが、実装に予想外に時間がかかるのでなかなか完成しません。
ある程度完成しないとリリースもできないのでやる気が落ちます。結局最後まで完成しません/(^o^)\
・・・のようなことを防ぐために行いました。
やった方がよかったこと
作ったアプリの構成
以下は今回のアプリの構成です。
今回のアプリは、「ペットの行動から体調不良を判別できるはずである」という仮説もとい確信からできた、ペットの監視アプリです。
そのため、「ログインですべての機能が使える(ペアリングが不要)」「(無料で)常時監視できる」「遠隔地からもワンボタンで確認可能」「体調を推定するなら必要な姿勢推定が行える」のような・・・いうなれば複雑怪奇なプログラムを組む必要があったので整理しました。
その結果、スマホアプリ開発には、バックエンドにも対応が必要そうだなと思った次第です。アプリ初心者であっても、何らかのコーディングには長けていないとなかなか厳しいものがあります。
例えば、データ通信をはじめとしたHTTPの処理、自動更新(cron的な何か)や、少し重い処理が必要になった時が難しそうですね。
図で整理した内容、まずは仕様です。データサイエンス業界で働いているので、もともとPythonやSQLを使えたのですが、アプリ系の言語(Java等)は全く未知でした。
結局、アプリ開発の言語はFlutter → Kotlinと変遷し、Firebaseも使うことになり、Cloud RunやRTMP・・・ナニコレって感じですね。
機能としては必要だろうと想定はしていたのですが、具体的に実行すると思った通りにいかないことだらけでした。FlutterのカメラAPIバグとか。
続いて配信機能です。
配信機能はON/OFFできて、常時ONなカメラが抱えるセキュリティの問題を解決できるようになっています。配信ON/OFF機能はFirebaseとの定期的な非同期通信で実装しており、結構怪しげな処理になっています。なぜなら他のスマホで、カメラアプリを使っているスマホを操作しているのと同義なので。
・・・実は配信と監視(AI&ログ取得)が技術的に同じ画面で両立できなかったので、配信ON/OFFを開発せざるを得なかったという裏話もあります。orz
家の中を写すカメラの配信機能が常時ONも気持ち悪いだろうし、それは良かったんですが。
続いてAIカメラを準備する機能です。
なんと、このアプリはAIをユーザーごとに訓練するという機能を持っています。これまで、アプリでそのような実装を聞いたことがないです。配信ON/OFF機能に加えて謎に高性能です。
バックエンドにCloud Run(CPU)を採用しています。
このAI(Efficientdet)は深層学習を使っているのですが、深層学習AIモデルをCPUで学習・・・ウッ頭が、、、となるようなアンチパターンを採用しています。なぜなら、オンプレだとCloud Runで借りているような高スペックPCを借りると月10万くらいしかねないし、Cloud RunのようなサービスでGPUが使えるモノがないからです。そのため、学習高速化の工夫を少しだけしています。
意外と利用料はお安いです。1日1~2h使って月4,000~6,000円だったかな。
最後にAIカメラです。
学習したAIをカメラアプリにダウンロードしてもらい、処理したデータを保存しています。
安全のためでもありますが、映像は保存していません。
実は映像保存はめちゃくちゃコストがかかる割に、利用用途が今のところほとんどないのです。
映像保存するならテストユーザーさんを募集してサンプリングするので、一般ユーザーさんから取る意味を感じない。orz
おわりに
今回は未経験からアプリ開発したいなーというところから、開発してみた結果を書きました。
アプリ開発のハードルは、実は最初の構想段階でほぼ決まっているようです。
そのため、まずは最低限の機能で開発することをお勧めします。
この記事で書いたようにホンマに思わぬ落とし穴が多すぎる…。
参考になれば嬉しいです!それではー。