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

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

関連記事

豆腐の角から逃げるゲーム(Escape From the Tofu’s Corner)

「( ^o^)を操作して20秒生き残るゲーム」を作っていました。 Meisyo用に作ったのですが、意外と楽しかったので上げておきます。 Escape From the Tofu’s Cor …

数値が読めないヒトが周りに居るあなたへ

コンサル業界にも一定数存在する、数値が読めないヒト。 彼らはなぜ数値が読めないのか。 そして、数値が読めないので、物事を数値から読み解く事ができません。 使えねえやつの出来上がりです。 困りましたね。 …

【特許実務ツール】Autodetectの紹介

データ分析(統計学、人工知能関連)業界に居る以上、知財および特許と業務は切っても切れない関係にあります。 今回は、特許実務を楽にするためのツールを作成しましたので紹介します。 技術の内容として下記を採 …

新職場で1ヶ月目な件について

れいです。 外資系製薬企業から分析コンサルティング会社に移って1ヶ月が経ちました。 社内で開発も行っているし、AIベンチャーとも言う・・・のか? Deep Learningとか当たり前に使われてるし、 …

就職活動 面接官、あなたと私は違うんです

就職活動開始の時期ですね。 今日は気になった記事「志望動機「IT業界に入れば成長させてくれると思った」がNGなワケ」について。 会社とは、何のために存在するのでしょうか? 「社会貢献」? 「自己実現」 …