まつまるまつまる

どうも、まつまるです。開発期間3ヶ月を経て、ようやく人生初のアプリをリリースできそうでワクワクしています。

さて、今回作ったアプリはゴルフに特化しています。理由は僕がゴルフ大好きだからです。

アプリの機能
📖ログイン機能でユーザーを管理
🏌️‍♂️ゴルフスイングの骨格を見える化
👀骨格から前傾姿勢の角度を見える化
📱すべてスマホで完結

どんなアプリなのか、まずは以下の動画をご覧ください。

動画を解析することで自分の前傾姿勢の角度を把握できるようにしました。実際に上手い人を解析してみると前傾姿勢のキープがちゃんとできています。

ではでは、アーキテクチャを公開します。
こう見るとシンプル。それぞれ個別に説明していきたいと思います。

スポンサーリンク

ログイン

ログイン機能はFirebaseを使っています。Firebaseに関する説明はこちらに任せます。

ユーザーの管理はセキュリティ的にきちんとしなければならないので、中途半端な自作よりはFirebaseに任せたほうが良いかと思って僕はFirebaseを選びました。

Google認証やApple認証、各SNSと連携すれば、いちいちメールアドレス打ち込んでパスワード設定しなくてもログインできるので、ユーザーフレンドリーですし、ログイン機能を実装するならばFirebase一択かなと思います。

公式サイトが充実しているところも○ですね。

トリミング

トリミングはFlutterのパッケージ(video_trimmer)をありがたく使用させてもらいました。

このパッケージがなくて自作する必要があったならば、開発期間が延びるどころか諦めていた可能性もあります。笑

オープンソースに感謝。いつか恩返ししないとなと思いました。

使い方に関しては過去記事に記載しているので参照ください。

スポンサーリンク

動画処理

動画処理にはFFmpegを使いました。

FFmpegは動画と音声を記録・変換・再生するためのフリーソフトウェアである。Unix系オペレーティングシステム 生まれであるが現在ではクロスプラットフォームであり、libavcodec、libavformat、libswscale、libavfilterなどを含む。

引用:Wikipedia

flutter_ffmpegというパッケージを使えばFlutterでも動画処理ができます。動画処理のイメージは以下の通りです。
動画を画像に変換して、機械学習モデルに送って、帰ってきた結果をまた動画に変換しています。そのせいで、動画が劣化して解像度が落ちているのでここは改善していかなければと考えています。

使い方については別記事を参照ください。

機械学習(posenet)

あのTensorflow LiteをFlutterで使えるようにしてくれているtfliteというパッケージがあるので使わせてもらいました。たった数行で骨格推定してくれるので超簡単です。デバイスで処理していますが、速度もまずまず。ただ、精度はイマイチ。。

以前、pythonでtf-openposeを動かしたときのほうが精度良かったです。

精度をどこまで求めるかによりますが、骨格推定はクラウドで処理して結果を返す方が良いのかな〜って気がします。

競合アプリである「GOLF AI」はおそらくクラウドで処理していると思います。競合といっても相手は天下のNTTなので、クオリティで勝てるはずがないですけどね😓

ちょっと骨格推定動かしてみたいなぁって方はこの記事を見てください。

スポンサーリンク

データベース

データベースはFirebaseのCloud Firestoreを使っています。解析した動画はエッジデバイスに保存しており、その動画のパスをCloud Firestoreに保存しています。

当初は、解析した動画をCloud Storage for Firebaseに保存していましたが、通信状況によっては動画の再生がもっさりするので辞めました。動画が再生されないってけっこうイライラしますよね。。

動画のパスもエッジデバイスに保存(SQLiteなど)する案も考えましたが、ここは好みの問題かと思います。

まとめ

僕みたいな初心者でもアプリを作れるっていうことは、Flutterのサードパーティが充実していることを示していると思います。機械学習アプリをiOSとAndoridでリリースするのはけっこうな労力だと思うので、Flutterで作るという選択肢は間違っていなかったと思っています。機械学習を活用したアプリを作ろうとしている人の参考になれば幸いです。