はじめに
そろそろ蔓延防止処置が解除されそうですね。花粉症が酷くなっているれいです。ツライorz
家にいることがほとんどなので、動物行動監視アプリ(CoVision)は今のところそこまで必要ないかなと思います。やはり、1日以上家を開けるような時(旅行に行く、単身赴任先から家に戻る等)に使いたいなと思います。彼らを電車で連れて帰るわけにもいかず・・・。
出かけている間、何かソワソワして心配なんですよね。
あとは、特に小動物は、体調がいつ急変するかわからない怖さがあります。本当にあっという間に亡くなりますし、確率論的に多くの飼い主が体験しているハズなんですよね・・・。辛い。
というわけで、動物監視アプリ作成を進めています。
要件としては、チームの能力的にかなり制限がある(ハードウェア無理、ソフトウェアは分析とWeb系のみ対応)のでなかなか難しいですね~。提供はSaaS(月1,000~2,000円(多頭認識可能):1回あたりの手術料から逆算)形式で行う予定です。
要件整理
1・機能開発の大別
このアプリは、カメラアプリと結果確認アプリを分けて開発します。
結果確認アプリはログ確認のみのため、考えることはほぼありません。カメラアプリの処理を考える必要があります。
2・ハードウェア開発はしない
ハードウェアはRaspberry Piならある程度制御できますが、製品を出せるほど品質が高いモノは作れないと判断しました。
ハードウェアを開発しないので、誰もが持っているモノ(選択し:カメラ、ガラケー、スマホ他)を使うとします。カメラや通信機能等が備わっており、かつ流通しているモノと言えばスマホしかないかなと。
3・画像認識をデバイス上で行えるようにする
カメラアプリの処理方針として大きくは、中央サーバー方式、分散処理方式の2つの方法があります。まず考えるべきは、実現可能性(処理速度、ログ送信のトラフィック量)でしょうか。
ただ、中央サーバー方式は無理があると思われます。例えば、もし中央サーバーに取得した画像を送るような処理フローにすると、単純な通信量が半端なくて詰む可能性大ですね。
分散処理方式であればトラフィック量は問題ありません。処理速度も、2017年発表のMask-RCNN(C++)だと、スマホ上でFPS(Frame per Second)1以上は達成しているそうなので問題ないと思われます。ある程度習熟しているPythonはデバイスの制限から使えそうにないですね。
というわけで、IoTライクにスマホ上で画像認識を動かしたいという要件になりました。
4・どこでも、だれでも、いつでも開発でき、使えるようにする
スマホはiOSとAndroidでネイティブの開発言語の書き方が大きく違うので、同じように開発できる言語がいい。表示はWeb、スマホ(iOS、Android)、タブレット関係なく使えるようにしたい。
整理結果
1・スマホでカメラアプリの開発を行う。
2・画像認識のためにC++を使用できる。
3・1コードでiOSとAndroid、どちらも対応できるようにする。
というわけで、Flutterにしました。ネイティブのJavaやSwift、React Nativeなどを検討したのですが要件に合わなさそうなのでやめときました。
今回利用するFlutterは、Dart言語を用いて1コードですべてのプラットフォームに対応できるように(Build apps for any screen)開発されています。英語の資料は豊富で、公式Flutter.devなどがあります。日本語解説はFlutter大学などを参考にコーディングしています。
今のところアプリの基礎(表示、ページ遷移、アラート等)や、データベースのCRUD(Create, Read, Update, Delete)の学習を完了しました。カメラ機能はなかなか骨が折れそうですね。
やっていきます( ^o^)/~
次:お試しカメラアプリできました