🏢

ARCore v1.37.0 Scene Semantics について

2023/05/18に公開

はじめに

Google I/O 2023 でARCore v1.37.0 として下記の新機能が発表されました。

  • 地理空間のクリエイター(Geospatial Creator)
  • シーンのセマンティクス(Scene Semantics)
  • ストリート ジオメトリ(Streetscape Geometry)
  • 屋根用アンカー(Rooftop anchors)
  • 地理空間の深さ(Geospatial Depth)
  • Vulkan レンダリング サポート(Vulkan rendering support)
    • Unity(ARFoundation)非対応
  • 電子式手ぶれ補正機能(Electronic Image Stabilization)
    • Unity(ARFoundation)非対応

※参考: ARCore v1.37.0 の新機能

この中から本記事では シーンのセマンティクス(Scene Semantics) について記載します。

シーンのセマンティクス(Scene Semantics)とは

Scene Semantics API を使用すると、デベロッパーは高品質の AR エクスペリエンスの多くで必要となる、ユーザーを取り巻くシーンを理解できます。ML モデル上に構築された Scene Semantics API は、リアルタイムの意味論的情報を提供するもので、ARCore 内の既存のジオメトリ情報を補完します。

空、建物の、木、道路、歩道、車両、人物など、一連の有用なセマンティック クラスを通じて、API は屋外のシーンの画像に対し各ピクセルのラベルを返します。Scene Semantics API では、ピクセルラベルに加えて、各ピクセルラベルの信頼値と、屋外シーンでの特定のラベルの普及率を簡単にクエリできる方法も提供されます。

※参考: Scene Semantics API を使用してユーザーの環境を理解する

注: 現在のところ、Scene Semantics は iOS ターゲット デバイスではサポートされていません。

セマンティクス ラベルと品質

Scene Semantics API には、それぞれ対応する品質や信頼性を持つ複数のラベルがあります。一般的に、ML モデルでは、小さくてまれなオブジェクト/サーフェスのクラスよりも、大きくて一般的なオブジェクト/サーフェスのクラスをより正確に予測できます。クラスは、以下の品質階層(上位から下位にランク付け)にグループ化できます。

※参考: セマンティック ラベルと品質

実装

シーンのセマンティクスを有効にする

ARCoreExtensionsConfig の Semantic Mode を有効に設定します。

セマンティクス画像を取得する

セマンティクス画像を下記 API で取得することができます。
各ピクセルは SemanticLabel で定義されたラベルに対応します。

semanticsManager.TryGetSemanticTexture(ref inputTextur);

※公式ドキュメントでは TryGetSemanticTexuteの引数が out になっていますが、ref が正しいです。

この API で取得できる Texture2D は横長で反転しているので注意してください。
ARCore の新機能のデモアプリである Mega Golf のコードを参考にするのがベストです。

https://github.com/google-ar/demo-megagolf/blob/main/Assets/Scripts/SemanticsMonitor.cs#L209-L240

信頼度を取得する

セマンティクス画像の各ピクセル信頼度を下記 API で取得することができます。

semanticsManager.TryGetSemanticConfidenceTexture(ref inputTexture);

※公式ドキュメントでは TryGetSemanticTexuteの引数が out になっていますが、ref が正しいです。

ARCore の新機能のデモアプリである Mega Golf のコードを参考にするのがベストです。
https://github.com/google-ar/demo-megagolf/blob/main/Assets/Scripts/SemanticsMonitor.cs#L242-L257

割合を取得する

下記 API でフレーム内から指定の SemanticLabel の割合を取得することができます。

var fraction = semanticManager.GetSemanticLabelFraction(SemanticLabel.SKY);

ARCore の新機能のデモアプリである Mega Golf のコードを参考にするのがベストです。
https://github.com/google-ar/demo-megagolf/blob/main/Assets/Scripts/SemanticsMonitor.cs#L142-L143

まとめ

ARCore v1.37.0 の新機能であるシーンのセマンティクス(Scene Semantics)についてまとめました。
基本は公式ドキュメントではなく Mega Golf のコードを参考にするのがベストですので、こちらを参考に試してみてください。

シーンのセマンティクス(Scene Semantics)以外の ARCore v1.37.0 の新機能は下記でまとめています。
https://www.docswell.com/s/FumiyaHr/56YG27-2023-05-18-221638

Discussion