こんにちは、はじめまして。Sansan 技術本部 Mobile Application グループの22新卒でiOSエンジニアをしている平山です。
先日開催されたiOSDC Japan 2022 After Talkに私自身初めてのLT登壇をしたので、その内容や感想についてお話しします。
iOSDC Japan 2022 After Talk
昨年までは After iOSDC Japan
のタイトルで開催していました、iOSDCの振り返りやiOS関連技術についてLTやパネルディスカッションにより技術動向や知見を共有するイベントです。
今年はSansan 、 Mobility Technologies、アンドパッド の3社による合同開催となり、さらに基調講演として平田(@tarappo)氏のご登壇もありました。
内容は次のように開催され、パネルディスカッションでは時間が押してしまい全てを話しきることはできませんでしたが、iOS関連技術に関心が有る方であればどなたでも興味を持てる内容になっていたかと思います。
テーマ | 登壇者 |
---|---|
LT1「ARKitを触りながら振り返る」 | Sansan / 平山 智己 |
LT2「タクシーアプリ「GO」でApp Clipを使えるようにしてみる 〜Engineer Challenge Weekでの取り組み〜」 | Mobility Technologies / 久利 龍義 |
LT3「SwiftUI化をみすえてUIKitで実装する」 | ANDPAD / 伊藤 智行 |
特別講演「Xcode10から最新までのTestingをふりかえる」 | ANDPAD 技術顧問 / 10X SET / 平田 敏之 |
パネルディスカッション | - モデレーター Mobility Technologies / 日浅 貴啓 - パネラー Sansan / 多鹿 豊 Mobility Technologies /黒田 修平 ANDPAD / 栗山 徹 |
ARKitを触りながら振り返る
私が登壇させていただいたセッションの内容ですが初のLT登壇であったため内容選びにかなり悩み、純度100%の個人的興味でARKitについてお話ししました。(※SansanのプロダクトではARKitは利用されていません)
LTの内容はWWDC2022で発表されたトピックをざっくり解説し、オブジェクトキャプチャとモーションキャプチャを触ってみるという流れで話しました。
ARKit6
ARKit6では昨今のチップ性能の向上によってレンダリングや推定といった計算能力を駆使する機能が強化され、ARKitのクオリティがかなり高くなってきました。
4K対応はそんなアップデートの一つで、ARSessionをイメージセンサーからの画像を無圧縮で4K30FPSでレンダリングできるようになったというものです。これによりAR体験のクオリティ向上や、次のカメラ機能の強化としてARオブジェクトを除く画像をARSession中に撮影できるようになった事で、ARでユーザーを誘導しながら被写体の撮影を行う高解像度なオブジェクトキャプチャへの活用が可能になりました。
オブジェクトキャプチャ
オブジェクトキャプチャは去年RealityKit2に追加されたもので新しいものでは無いですが、どういったものか触りながら振り返りました。
多方面から撮影した画像から3Dオブジェクトを作成するもので、今の所Object Capture APIはMacOS上でしか動作させることができず、iPhoneで撮影したものをMacOS向けに実装したアプリケーションで処理する流れになっています。
Object Capture APIで処理するためには
- 二次元画像データ
- 深度データ
- デバイスの方向データ (重力加速度)
の3つの情報が必要になり、これらのデータをまとめたフォルダを PhotogrammetrySession
の引数に渡すだけで3Dオブジェクトの作成が可能です。
Apple公式のサンプルではAVFoundationを通して適当にいろいろな方向から撮影するもので、「これでいいのか...?」という気持ちになりました。先程も述べましたが今回のARKitのアップデートでARSession中の画像撮影が可能になったという事で、「次はこの向きから撮ってね」とったARガイドが視覚的に表示されると、オブジェクトキャプチャが捗りそうですね。
モーションキャプチャ
最後に画像から姿勢推定を行うモーションキャプチャです。こちらも以前から実装されていた機能ですが精度が改善され耳の位置までトラッキングできるようになりました。
姿勢推定というとOpenPoseがよく挙げられ、それほどの精度にはまだ及ばないですがモバイルデバイス一台のトラッキングのクオリティとしては十分に高いと思います。
因みにモーションキャプチャを行うためにARSessionで利用するBodyTrackingですが、元々VisionKitでも姿勢検出を行うことができ、推定結果で返されるJointはARKitとVisionKitで共通になっています。
それぞれの違いとしては以下ような感じです。
姿勢推定について詳しく知りたい場合はWWDC2020の内容を見てみてください!
またARKitではARBodyAnchor
というクラスが用意されており推定結果の利用が比較的容易になっているので、是非触ってみてほしいです。
- VisionKit: 一般的に静止画像またはフレーム単位での処理に利用し、Joint毎の推定信頼値も取得できる。
- ARKit: ライブモーションキャプチャ向けに設計され、背面カメラでのみ利用可能。
感想
完全に私自身の趣味で触っているARKitについてでしたが、少しでも興味を持っていただけたら嬉しいです。 ARKitは毎年アップデートされ、只々オブジェクトを配置して楽しむだけでのものではなくオブジェクト検出や計測を行う上で必要十分な精度となったと感じるので、近頃よく聞くメタバース領域での活用が楽しみですね。
私が今思っているやりたいことは、4K撮影 + 深度情報 + 姿勢推定を使った人の3Dモデル化や、複数の端末を利用して多方面撮影するモーションキャプチャです。もしできたらブログをアップします!
初めてのLTでしたが不安や緊張はそれほど無く終えられました。しかしその準備でのデモ作成でARKitが動かないといった問題が発生し資料作成がギリギリでかなり焦りました。 詳しい原因や解決に直結した対応までは調査できていませんが、同じような現象に遭遇した際の手助け程度に次に残します。
デモ作成中の問題
ARKit6を触るため最新のXcodeをダウンロードし実機デバッグを行おうとしたところ、このようなメッセージがコンソールに出力されました。
warning: libobjc.A.dylib is being read from process memory. This indicates that LLDB could not find the on-disk shared cache for this device. This will likely reduce debugging performance.
※ iOS 16、 MacOS 12.4、 Xcode 14 beta4
調べると、本来デバッグはMac側にLLDBとiOS端末側でdebugserverを用いて行うのですが、LLDB側でもアプリバイナリ+ライブラリのコピーをロードする事でシンボリック化を行い高速な変数の解決や場所の特定が可能になっています。しかしそれがロードされていないとiOS端末とgdb-remote protocol
で通信を行う必要があり、これが非常に低パフォーマンス故に起きているようでした。
この問題によりアプリがデバッグ起動に3~5分かかり、LLDBを使ったpo
もレスポンスに非常に時間がかかる状態になりました。同じ現象も見つかりいくつか対応策も挙げられていたため試してみました。
stackoverflow.com
自分が試した事は以下でどれがクリティカルになったか申し訳なくも不明ですが、これで解決することができました。
rm -r ~/Library/Developer/Xcode/iOS\ DeviceSupport
-> 解決せず- iOS 16.0.2へアップデート -> 解決せず
- MacOS 16.6へアップデート -> 解決せず
- Xcode 14.0.1をインストール -> 解決せず
- Xcode beta版各種を削除 -> 解決
焦っており順序は忘れてしまいましたが、もし同じような現象に陥った際は上記を試してみてください。
最後まで読んでいただきありがとうございます!