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

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

関連記事

Meisyo+開発 一通り完了。今後の方針も。

名将と呼ばれた者たち+のアップデートが一通り終わりました。 ストーリーの第一話が完結しました! ストーリーの進捗に伴って、シナリオも★1~5まで実装しました。 公式戦も総合力700(S)台がちらほら見 …

走り過ぎたら一旦休もう。転職たぶん6ヶ月目のまとめ。

お久しぶりです。Rです。 転職した19年4月からこれまで、主に統計や機械学習、マーケティングなどを学んでいました。 転職して一つうまく仕事が終わりそうなのでまとめておこうかと。 知識を広げる方法はどこ …

マスメディア化するインターネット。あなたは着いていきますか?

インターネットで多くの情報が均質化し、誰でも得たい情報にアクセスできるようになりました。 以前はインターネットは「能動的」なものでした。 今はどうでしょうか? 最近で有名なサービスを挙げてみましょう。 …

仮説は違和感から生まれる

仮説立案には違和感が必要です。 こんばんは~(^^ 現在制作している野球ゲーム(Meisyo+)では、強い選手を集めたら勝てるというソシャゲあるあるなスキームを崩すために、物理演算を使用しています。 …

ビッグデータはメンデルの法則(表現型)を調べているだけ、理由(遺伝子)を調べる時代が来る

人が認識している人(個人としての人)とAIが認識している人(群としての人)には違いがあるのかもしれません。 個人は遺伝子を元にした多様な細胞が集まり形成されています。 群は(??)を元にした多様な人が …