背景
リモートワークで気付いたら猫背になっているということが多くなってきたので、姿勢が崩れたら教えてくれるサービスを作りたいな、と思っていたらYahooのHackdayが開催されるという情報が出ていたので作るかーとなって同僚と参加してきた。
実現したい事
自分の姿勢が崩れていたら教えてくれる
実装方法
- Androidアプリで一定間隔で写真を撮りサーバーに送信
- Pythonサーバーでリクエストを受け取りHRNetを使って解析
- Androidアプリに結果を返して、姿勢が悪い場合は通知
使用技術
Client-Android
HttpClient
https://ktor.io/
ktor(ケイターというらしい)を使用。Androidだけではなく、iOSでも使えるらしい。
簡潔な記法で書けるのでとてもよかった。
Server-Python
HttpServer
画像を受け取って結果を返すだけだったのでFlaskやDjangoは使用せず標準のHttpServerを使用。そこまで複雑ではないだろうと思って使ってみたが、bodyを読み取るまでにcontent-lengthを取得しそのlength分rfile.readを行い、bodyをdecodeして…という本質ではないボイラープレートだらけになってしまい後悔。サーバーでシンプルな処理をするだけならFlaskが良いのだろうか。最近Python触っていないので流行りも分からず。
HRNet
姿勢推定APIと呼ばれているもの。身体の部位16箇所を推定して返してくれるライブラリ。学習済みモデルを組み込めばお手軽に使えるようだったので試してみた。tensorflowの辺りのlibraryのインストールあたりで少し手間取ったが下記のHRNetをお手軽に使えるリポジトリを使用すると簡単に出来た。
https://github.com/stefanopini/simple-HRNet
デモ動画
https://www.youtube.com/watch?v=TZzOChs9hvs&ab_channel=%E6%A9%8B%E6%9C%AC%E6%99%B6
感想
Python久しぶりに触ってみたけど型がないとHttp通信周り書くの結構しんどい…
Hackdayは3回目だけど、2人で参加したのは初めて、やることが多くスライド作りもプレゼンも準備不足で時間足らないなーと感じた。直前なのに参加了承してくれた同僚には感謝しかない。
作りたいものを作っただけなので入賞できなかったのは仕方ない感はあったが次参加するときはスライドやプレゼンの対策もできる状態にしておきたい所。
アイデア出しも力入れるべきだったが、今回は作りたいものが作れたのでヨシ。ただ負けて悔しかったので、次回は勝つためのアイデア出しをするぞ!!!