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

はじめに

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

アプリはどうにか一通り完成しました。
アプリの紹介サイトは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:動物見守りアプリをアップデートしました。
個体認識機能がついて、行動ログを確認できるようになりました。
ここから、広告を出しつつ、ユーザーテストを繰り返していく予定です。

やりたいことが多いのですが、簡単に整理しておきましょう。

CoVison

優先順位1位はCoVisionです。

まずは、リファクタリング(外部から見た時の挙動は変えずに、プログラムの内部構造を整理すること)をして、ごっちゃになったコード体系を改めたいと思います。
「とりあえず動けばいいやん」で実装したので、命名規則含め適当になってます(笑)
誰にも共有できないコードで笑えない。。

今ある機能の高度化は重要ですが、まずはコアなファンの獲得を目指して色々な手立てを実行していきます。
機能があってもユーザーが居なければ意味がないので。

Meisyo

Meisyoは3(モバイル版)の開発準備をし始めました。
Meisyoモバイル版(MeisyoⅢ)構想にある通りです。
ストーリープロットも、スタートとゴールは見えているのですが、間がまだまだですね。

下記のような、動きのある野球ゲーム&育成&リアルタイム指揮ゲーを作りたいですね。
参考:作ったゲームを解説する「Unity-chanバッティング VS.こはくちゃんズ」

頭の中にイメージはある。
※似ているゲームに、栄冠ナインはあるがああいう感じではない・・・つもり。

ゲームの開発はUnityで行う予定です。しかし、最新のUnity2021を触ったことがないので、適当なゲームを作ってリリースすることから始めようかなと。
事前調査をしてみると、データベースはCoVisionで使っているFirestoreが利用可能で、アプリリリースはAndroid Studioと同じ感じなので良かったです。

雑記

結婚して早1年。子供が9月に生まれる予定です。
開発を続けるのか?もしかしてその他に興味がうつるのか?これはわかりませんねえ・・・。

とりあえず、奥さんからは開発し続けてほしいとのコメントをいただいているので、何もなければということになりそうですが。
さて、どうなるかな。

【CoVision】チュートリアル 3・いつでも見守る!個体識別モデル設定

CoVision:ペット見守りAIカメラアプリのチュートリアルです。

CoVisionには、お家に設置するカメラ用スマートフォンと、持ち歩く見守り用スマートフォンの2台が必要です。

カメラ用スマートフォンで、ペットたちの行動を把握できるように個体識別モデルを設定します。

ペット登録

まずはじめに、メインページのAnimalsをタップします。

続いて、右下にあるプラスボタンをタップします。登録したい名前でペットを登録してください。

ペットの画像設定

開いているAnimal Listから、画像を設定したいペットのタブ(ペット詳細)をタップします。初期設定では、下図のように表示されます。

続いて、灰色がかったプラスボタンをタップします。そうすると、あなたのスマートフォン内のデータから画像を指定する画面に移りますので、好きな画像を指定してください。

学習用画像登録

開いているペット詳細から、画像ギャラリーをタップします。AIには学習するためのデータが必要ですので、右下にあるプラスボタンをタップし、学習に使用する画像を選んでください。

学習データは、できる限り下記の条件で撮影したものを用意してください。
・カメラ用スマートフォンを設置した位置から撮影してください。
 いろいろな角度からの写真があると、AIが勘違いする場合があります
・ペットが同じ位置に存在し、同じ向きになっている画像は除いてください。
 どのような位置、向きでもトラッキングできるよう設定してください。
※画像は最低5枚必要です。また、できる限り画像数が多い方がより良い精度でトラッキングできます。

学習用画像の枠登録

各々の画像でペットがどこにいるかを枠を使ってAIに教えます。ある画像をタップしてください。

下図のようにさまざまな色の枠が表示されます。ペットが存在する色を選択し、保存ボタンをタップしてください。

※枠が登録された画像には、【ペット枠登録済】と表示されます。
※ペット枠を登録した画像は最低5枚必要です。また、できる限り画像数が多い方がより良い精度でトラッキングできます。

学習開始

メインページに戻り、MyCameraの撮影設定をタップします。

これまでの手順で問題がなければ、下に学習ボタンが表示されますので、それをタップします。

学習には、最長1時間ほどかかります。

モデル設定

問題なく学習が終了すると、同じ画面の上部に個体識別モデルリストと保存ボタンが表示されます。保存ボタンをタップしてください。

動作確認

撮影画面に行き、動作を確認します。ペットがトラッキングできているか確認してください。

床や壁の模様とペットの体色などの環境条件により、トラッキングがうまく行かない場合があります。もしその状況であれば個別で対応しますので、ご連絡ください。

以上で本チュートリアルは終了です。おつかれさまでした!
前:【CoVision】チュートリアル 2・どこでも見守る!配信設定

【CoVision】チュートリアル 2・どこでも見守る!配信設定

CoVision:ペット見守りAIカメラアプリのチュートリアルです。

CoVisionには、お家に設置するカメラ用スマートフォンと、持ち歩く見守り用スマートフォンの2台が必要です。

続いて、見守り用スマートフォンで、カメラ用スマートフォンで撮影した動画を確認できるように設定します。

アプリ起動

見守り用スマートフォンでアプリを起動します。

ログイン

見守り用スマートフォンを、カメラ用スマートフォンと同じユーザーでログインします。

カメラ起動

カメラ用スマートフォンのカメラを起動します。

カメラ用デバイスの確認

見守り用スマートフォンで、アプリのメインページから、カメラアイコンが出ている(撮影中状態の)デバイスをタップします。

もし存在しない場合は、画面の更新を行うか、カメラの起動ができていないか、同じユーザーIDでログインしているか確認してください。

カメラ用デバイスの配信設定

カメラ用デバイスの配信設定をONにします。配信設定の隣にあるスイッチをタップし、ONにしてください。

※サーバーを経由し、デバイスとの安全な通信を行っているため少々時間がかかります。

配信確認

配信ができているか確認を行います。配信視聴をタップしてください。

※10~20秒ほど遅延して配信されるため、少し待ってから配信視聴を行ってください。タップが早すぎる場合はエラーが出たり、配信を確認できない場合があります。

配信が成功すると、下図のようにリアルタイムで表示されます。

配信停止設定

1つページを戻って、配信設定をOFFにします。
配信を常時行っているとカメラ用スマートフォンの電池の消費が激しく、充電していても電池が不足する場合があります。加えて、セキュリティの問題があるため、こまめにOFFにすることを推奨します。

注意

特定のスマートフォンでは、高温(28℃~)になる環境下では充電が上手くいかず、アプリが停止してしまう問題があります。アプリが不自然に停止する場合は、利用環境の温度管理をお願いいたします。

以上で本チュートリアルは終了です。おつかれさまでした!
前:【CoVision】チュートリアル 1・カメラ撮影する
次:【CoVision】チュートリアル 3・いつでも見守る!個体識別モデル設定

【CoVision】チュートリアル 1・カメラ撮影する

CoVision:ペット見守りAIカメラアプリのチュートリアルです。

CoVisionには、お家に設置するカメラ用スマートフォンと、持ち歩く見守り用スマートフォンの2台が必要です。

まずは、カメラ用スマートフォンでカメラ撮影をできるように設定します。

アプリ起動

カメラ用スマートフォンでアプリを起動します。

ログイン

ログインします。

カメラ起動

メインページから撮影開始をタップします。

許可設定

カメラを利用するために、表示される許可をすべて許可してください。
カメラ・動画・音声が許可されます。この内容は、以降のステップである配信や個体識別で利用しますので必ず許可してください・

カメラ動作確認

以上の手順を踏むと、カメラが起動します。
このカメラには物体検出AIを導入しており、画面内の最大3種類の物体をリアルタイムに検出することができます。以降のステップである個体識別で利用します。

問題なく動いているかどうかは下記の図を参考にしてください。外で利用すると、車や自転車を検出することが可能です。

個体識別は、下図のようにリアルタイムでペットたちの位置をトラッキングし、行動ログを取得します。

以上で本チュートリアルは終了です。おつかれさまでした!
次:【CoVision】チュートリアル 2・どこでも見守る!配信設定

【CoVision】動物見守りアプリ アップデートv1.00-2

CoVision:動物見守りアプリをアップデートしました。
個体認識機能がついて、行動ログを取れるようになりました。詳しくは下記ツイート連なるツイートにて確認できます。

一緒に開発を進めてくれる方、実験に協力いただける方を募集しています!

以下に書く内容は技術的なことではなくほぼ感想です。

1・Webサイトのように簡単ではない。ページとデータベースの連携以外に考えることが多すぎる。orz
とはいえWebサイト(特にプログラム)もバグがなく、高速な処理が書けるかというと…

2・実験たのしい
クラウド(Google Cloud)の利用料が思ったより少ないので実験を繰り返しても痛くない状況で助かっています。PCスペックは、8CPU+32GBのCPUを使っているので、画像認識モデルの学習以外はすごく高速です。学習はGPUは欲しい…Cloud Runのオプションに存在しないんですよね。orz

ペットの烏骨鶏(シロちゃん)の行動ログを分析しつつ、ピークがあるとこの時間帯に何をしてたっけ?と思い返したりしています。楽しい。たいてい、おやつのミルワームを出そうとしているところに高速で駆け寄ったりしていると行動量が異常に多く検出されるんですよね。かわいい。

この子に異常があれば、いち早く気づきたい。その気持ちは飼い主として常に持っていて、その気づきを実現するためのアプリがこのCoVisionです。

アプリの実装には様々な言語への対応が必要でした。CLI(Cloud CLI含む)、DockerFile、Kotlin(Java)、Python、Firebase Cloud Firestore・Storageなど・・・正直今まで触ったことがない内容が5割以上で「よくわからん」の連続でした。多分今後もそうでしょう。

さて、次は行動解析後の可視化、グラフ化の実装だ~(*_*)

【CoVision】動物見守りアプリ進捗

3行で説明する全体的な進捗

  1. 物体検出モデルの導入が完了
    動物たちの行動を常時観測するための技術的なハードルの1つをクリアした。
  2. アプリを1つにまとめた
    カメラアプリと見守りアプリ、別々にインストールする必要性を感じなかった。
  3. 以前の2アプリの機能をもつアプリを申請した
    後述のプログラミング言語の変更があったので、ちょっと手間取った。

今回わかったことは、アプリのユースケースとして事前に考えたことと実際は大きく違うということ。

動物見守りアプリ(CoVision)簡易版リリースでアプリをリリースして使ってみたところ、日常生活で使うためには不具合が多かったです。

例えば、カメラ側のスマートフォンは常に電源をつけっぱなしにするので、充電しながらカメラをつけっぱなしでも電池が足りなくなることがないように・・・と思ったらプログラミング言語がFlutterだと10時間くらいで落ちる。Kotlinで最低限の機能で実装したら余裕を持ってOKでした。

その他には、カメラの配信モード(外出先から家の中&動物たちを見れるモード)が常時ONのため、使っていて気持ち悪いらしい。認証やURLの一致をクリアする必要はあるものの、常時放映中は確かに・・・誰かに見られる心配があるか。そのため、後述のFirebaseでのリアルタイムスマートフォン画面の変更技術を作り、外出先から家の中にあるカメラの配信のON/OFFをできるようにしました。

最後に、現物があることの違いが大きかった。家族や知人に見せた時に、自分(れい)が何をしたいのかイメージを共有でき、アドバイスやそもそも論の議論ができた。スタートアップでの起業?の方法論として、ユーザーインタビューから始めることが推奨されるようである。ただ、競合となる製品がいまだに有名になっておらず、利用イメージがわかりづらい(&自分の説明が分かりづらい)ので、○○みたいなものを作りたいとプレゼンで見せてインタビューしようとしても、その課題は持っているし、経済的・精神的な痛みも理解できる。で、できるモノはどんな感じなの?となる。手触り感で使用可否を決めるユーザーとして当然の反応だ。

そのように、思ってたことと実際は大きく違うことがわかりました。スマートフォンアプリはウォーターフォール型で作ったらミスしそうだなあ…という経験に。

続いて、技術的な発展がありましたので共有しておきます。

3行で説明する技術的な進捗

  1. プログラミング言語をFlutterからKotlinに変更した
    Flutterの画像処理に致命的な不具合があり、画像認識技術が使えなかったため変更した。当面Androidのみ対応に。
  2. 画像認識技術の組み込みに成功した
    今回は物体検出モデル(Mobilenet V1、YOLO V5、Efficientdet-lite4)の導入ができた。毎秒行動データを取る訳ではないので、FPSは1あれば十分だが今は3FPS以上ある。
  3. リアルタイムスマートフォン画面の更新技術を作成
    外出先のアプリから、家の中にあるアプリ(カメラ)の画面を変更できるようにし、カメラ画面の配信ON/OFFを操作できるようにした。

まさか・・・Flutterでリアルタイム画像認識が無理だとは。バージョンを下げて維持すれば対応できなくもないですが諦めました。
諦めた背景として、Flutterは2021年のメジャーバージョンアップでNull Safetyをはじめとした変更が入り、カメラ画像処理関係の多数のパッケージが使えなくなったまま更新されていません。そのため、1つ1つのパッケージを現状対応にするためにはめっちゃ工数がかかるという・・・少数で対応するには大きすぎる問題です。

Flutter関連でGoogle検索しても、なぜか2021年前半までの記事が多く、2021年後半以降の記事が少ないことに違和感を覚えていました。メジャーバージョンアップのことを知って、なるほど、だからかと合点してしまいました。とはいえ、あまりひねりのないアプリを作るならFlutterは便利だと思います。パーツを組み合わせればすぐ完成するので、レゴブロックみたいな感じで開発できます。

物体検出モデルの導入はTensorflow公式サイトのKotlinサンプルをちょっとだけいじったら導入できました。物体検出モデルの今後の課題は2点あり、(1)できるだけ少ないデータでの学習がうまく行くか(ユーザーは手間暇を掛けたくないし、大量のデータを入力したいわけではない)と、(2)学習モデルの導入がある程度高速にできるか(独自モデルの学習に1日掛かると、だいたいのユーザーは離脱してしまうのではないか)ですね。

モデル学習を含めたアプリのワークフローの、理想と現実のズレをいかにうまくまとめるか・・・ですね。

現状

CoVision公式HPはある程度できてはいるものの、出来合い感が強い。


上記の画面のように、アプリでは物体検出モデルのテスト導入中です。現在は3~5FPSで表示できています。

ただ、CoVisionでかなり重要な機能である特定の動物たち(例:犬のAちゃん、鶏のBちゃん)の行動をトラッキングできるモデルを作る機能がないので、現在開発中です。これさえ開発できれば、MVP(最低限のプロダクトの機能)で開発する内容は行動データの可視化だけになります。とはいえ、パソコンで学習させたモデルをスマートフォンに移して動かすので、複数のプログラミング言語の知識やモデル・データ形式の変換の対応が必要です。そこがなかなか難しい。

具体的に言うと、PC上だけの対応であればPythonの深層学習パッケージTensorflowまたはPytorchを使えれば問題ありません。ただ、スマートフォンも入ってくるとFlutter(Dart)やKotlin(≒Java)、C/C++などの複数のプログラミング言語に対応せざるを得ません。かつ、モバイルアプリ×深層学習モデルの開発はそこまでユースケースが豊富ではないため、PytorchからTensorflowへのデータ変換のためのONNX形式への対応や、TensorFlowからTfliteへの変換(公式サイトの通りに変換するとうまく動かない)のような問題もあります。

現在ハマっている問題は、同一であるはずのモデルの構造が違うことです。Tensorflow Hubで公開されている学習済みモデル(現在利用中だが、独自の学習はできない:TfLite形式)と、Tensorflow公式で公開されている学習モデル(独自の学習ができる:チェックポイント形式等含む)をTfLite形式に変換したモデルのモデル構造が違うという謎現象があります。学習に目途が付いたのに構造が違うと導入できんよ。。orz

とはいえ、開発が無理ではないことはわかったので、あとは粛々と進めるのみです。

以上、もう少しでできそうです。
モバイルアプリ開発は、新たな言語の習得を含めて3か月くらいかかるんですね・・・やっぱり。

動物見守りアプリ(CoVision)簡易版リリース

動物行動監視アプリ(CoVision) 要件整理(3/21)から約4週間。

4/15に2つのアプリの簡易リリース版が完成し、Google Playに承認されました。

目標

このアプリは小さな一歩です。
全ての動物たちの不要な苦しみや痛みを1秒でも、飼い主の物理的・心理的な負担を1円・1ミリでも減らしていきたいと思います。

その達成には、何らかのシステムで下記4ステップすべてが達成される必要があるでしょう。

  1. 彼らの体調を24時間常に見守り、専門家ではない私たちにわかるように異常を知らせてくれる。
  2. どこにどんな経歴を持った獣医さんがいることを知ることが可能となり、適切な治療場所を私たちが選べるようになる。
  3. 治療に行った際には、過去のカルテを含め、獣医さんに適切な情報を提供し、正しい治療方法を選択していただく。
  4. 治療結果を集約し、正しい行為を行える獣医さんが正当に評価・処遇され、彼・彼女の本当にやりたいことに集中できるようにする。

すべては、後悔しないように。彼らが、私たちがこの世界に生きていてよかったと思えるようにと考えています。

現行アプリ

  1. CoVision Visioner
  2. カメラアプリ。

  3. CoVision Viewer
  4. 見守りアプリ。カメラアプリがストリーミングしている動画を見るアプリ。

HPは以下に用意しています。
https://covision.jp/

使い方

使い方を5ステップで説明します。

  1. スマートフォンを2台用意する。
  2. 現在はAndroid版のみリリース対応していますが、iPhone版の準備も進行中です。
    カメラ側のスマートフォンは古いもので構いません。カメラにするだけなので。

  3. それぞれにアプリをインストールする。
  4. カメラ側にVisionerを、見守り側にViewerをインストールします。

  5. カメラを据え付ける
  6. カメラを固定できる台や三脚を用意してください。Amazonで確認すると2,000円台からありますね・・・って安いね。
    スマートフォンはつけっぱなしになるので、電源に接続してください。加えて、カメラ側のスマートフォンはWifiの利用を推奨します。通信量が多くなる想定(今後改修予定)です。

  7. カメラアプリを起動・撮影
  8. アカウントを作成・ログインしてください。

    デバイス登録をして、名前を付けてください。見守りアプリ側で複数カメラを選択できるので、わかりやすい名前にするといいと思います。

    あとは普通のカメラアプリのように、真ん中の白いボタンをクリックします。

    撮影中です。これで問題ありません。

  9. 見守りアプリを起動・動作確認
  10. カメラアプリ側で作成したアカウントでログインできます。

    確認したいカメラアプリをクリックします。

    こちらの画面で、正常にカメラアプリが撮影中であれば確認が可能です。

※この画面は正常ではありません。

さいごに

何か不具合があれば、ここにコメントいただけると幸いです。
※HPはのちほど改修予定です。

動物行動監視アプリ(CoVision) 要件整理

はじめに

そろそろ蔓延防止処置が解除されそうですね。花粉症が酷くなっているれいです。ツライ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^)/~
次:お試しカメラアプリできました

烏骨鶏のためのココちゃんハウス(仮)に引っ越し

今後は千葉と東京のに拠点で生活します。

なぜ引っ越ししたか

仕事のために引っ越しました。

会社まで電車で10分の好立地、かつ飼い始めたココちゃん(と動物行動ロギングのCoVisionの開発)のために利用していきます。

20㎡程度なので、大半の一人暮らしかつ動物を飼っている人と同じ~小さいくらいのスペースとなるはずです。

予定

仕事

慣れてバリューを出せるようにします。

英語

6か月でTOEIC900を目標とします。
難易度は知りません。英語論文が少し読める程度なので、しっかり理解できて海外部門とコミュニケーションができるくらいまで進めたいですね。

文法が雑にしか覚えてないので、Youtubeなどを参考にしていきます。
参考:強いエンジニアになるために英語が必要と聞いたので4ヶ月でTOEICスコア400→900まで上げた話

CoVision

試作と仮説検証を行います。
動物(猫・犬・小動物)の飼い主は、特に独身女性が多くなってきているので、CoVisionで家の中をずっと写すことに抵抗はないのか・・・等々を調査していきます。

季刊コンピュータービジョン最前線など日本語の資料で調査しつつ、一緒にやってみたい人を募りますね。

さいごに

長いコロナ禍の後に、ウクライナ戦争。

予想がつかない世の中ですが、一つ一つ自分ができることをやっていきたいものです。