はじめに
株式会社マイスター・ギルド新規事業部のヒツジーです。
弊社新規事業部では、新規サービスの立ち上げを目指して
日々、アイディアの検証やプロトタイプの作成などを行っています!
が!今回は自社開発した赤ちゃんの身長計測ができるiOSアプリ BabyScale の裏側についてお話します!(こういうのもいいでしょう)
スマホ一つで簡単に身長計測できちゃうんですが、その原理って気になりませんか?
惜しみなく公開しちゃいます!
身長計測アプリの概要
下のスクショのように、寝ている赤ちゃんをカメラで撮影して、点を打つだけで身長計測が完了する優れものです!
では、この計測はどんな原理なのかを以降で紹介します。
身長計測の概要
身長計測には、
Appleが提供するiOS向けARライブラリ ARKitの平面検出の技術を利用しています。
流れは至ってシンプルです。
- 平面を検出
- 平面上に点を複数打つ
- 点と点の間の距離を算出し、合計する
下の写真のように、UI上は赤ちゃんに対して点を打っているように見えますが、
実は赤ちゃんを認識しているわけではありません。
平面を検出し、平面上に点を打っているだけです。
(開発中は平面も表示させてましたが、リリース時に非表示にしています。)
二本足で立てる赤ちゃんは身長計測がある程度簡単だけど、寝ている赤ちゃんは身長計測しにくいよね。
このアプリは寝ている赤ちゃんの計測に集中すべき。
という考えのもと、水平面だけの検出だけでいいよねということで、水平面しか検出できないように制限しています。
ARKitとしては水平面と垂直面の両方を検出できます。
長さの計算
点と点の間の距離を算出し、合計する
と上で書きましたが、具体的にどういうことかを説明します。
平面上の点の座標は、ワールド座標と呼ばれる座標情報$(x,y,z)$として取得可能です。
要するに3次元の座標情報です。
例えば、点A$(x_a, y_a, z_a)$と点B$(x_b, y_b, z_b)$の二点間の距離$L$は以下の式で簡単に計算できます。
$$L = \sqrt{(x_b - x_a)^2 +(y_b - y_a)^2 +(z_b -z _a)^2 }$$
これで、各点各点の間の距離を求めて、足し合わせるだけで身長計測は完了するというわけです。
ちなみにARKitにおけるワールド座標の原点がどこか気になると思いますが、
ヒツジー調べではARSessionが起動したときのカメラの位置にあたります。
(printでめっちゃ座標出力して調べた)
※間違ってたらコメントで教えてください。
最後に
結局、ARKitすごい!Appleすごい!ってところに落ち着く話になるんですが、
上に書いたような方法で赤ちゃんの身長を簡単に計測できるようになりました。
余談ですが、
iPhone12Pro以上からiOSのデフォルトアプリ「計測」で人の身長計測がスマホをかざすだけでできるようになりました。
この技術の詳細は公開されてないみたいなので、この技術を赤ちゃんに適用するのは現状難しそうですが、将来的にはできるようになるかもしれませんね。できたらいいですね。