Rの考え方

Rの個人研究・考察を行うブログ。最近は因果推論とアナリティクス(機械学習、統計はお休み中)、認知論にお熱。

ブログ CoVision

未経験から独力でアプリを作ってみた結果

投稿日:2022年7月21日 更新日:

はじめに

アプリ制作未経験で、踏み出してみたい方に参考になるように書き残しておきます。

アプリはどうにか一通り完成しました。
アプリの紹介サイトは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

おわりに

今回は未経験からアプリ開発したいなーというところから、開発してみた結果を書きました。

アプリ開発のハードルは、実は最初の構想段階でほぼ決まっているようです。
そのため、まずは最低限の機能で開発することをお勧めします。
この記事で書いたようにホンマに思わぬ落とし穴が多すぎる…。

参考になれば嬉しいです!それではー。

-ブログ, CoVision

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

ガンマ関数Γ(n)と階乗(n-1)!の一致を示す

自分の備忘録として、ガンマ関数がなぜ階乗と同値になるのか確認したことを記録する。 ガンマ関数は下記の式で表される。     ただし、自然数nであれば下記のように一般化される。いわゆ …

天才は作られるのだろうか

天才を要素分解し、再構築すれば天才になるのだろうか? 感性で生き、その感性を直接伝えることにより、他人に「わからない」と言われ続けた私が居る。 幾多のコミュニケーションを経て、彼らと見えるもの、世界の …

非定型業務の業務指示の方法論

非定型業務を遂行させるのは難しいですよね? 「ルーチンなら時間をかければできるけど、非定型業務はちょっと・・・」と思っている方が多いと思います。 私もそうでした。 ただ、私の経験として、製薬企業での研 …

仕事で出世を目指さなくていいじゃないか。上を向かずに歩くことも大切だ。

会社勤めを始めてから、気になることがある。 「なぜ、仕事ができない彼は手を抜くのか?」 そんなことではどこからも必要とされないのに。 会社でも、破産でもすれば最も被害をこうむるのは、外資でもどこでも行 …

チーズはどこへ消えた?飽きは最大の武器だよ。

飽き性で困ったな・・・というあなた。 想像してみてください。 誰もがずっと同じレストランの料理で満足している世界を! 飽きもせず、毎日毎日同じ場所に行ってご飯を食べます。 違和感を感じませんか? つま …