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

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

関連記事

no image

WordPressの使用開始

WordPress(http://ja.wordpress.org/)を使い始めました。 Ameba(前のブログ)より使いやすい。それを言ったらキリがないですが(==; カテゴリとか作り、初めての人と …

転職後1年の記録

これは何? 外資の製薬企業(研究開発などいろいろやってた)から、日系の新興コンサルティング会社(データ系)に転職した人が、転職から1年経過したのでいろいろとまとめてみた。 超長くなった。 目次 ・転職 …

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

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

コンサルへの転職1年半で読んだ本90冊とその書評

2019年4月に外資系動物薬メーカー研究員から、コンサルティングファーム(データ系)に転職しました。 そこからちょっと頑張って、1年半(2020年9月から)同社のリーダーを拝命したので、これまで読んだ …

地方と都市部って比較されるけど、都市部の方が子どもにとって良いこと尽くめでは?

unsplash-logoVanessa Serpas 私は、子供ができたら東京や大阪などの都市部で育ててみたいと思いました。 なぜかというと、 「触れることができる情報量に大きな差がある」 からです …