プレアノテーション
23 分
プレアノテーションはグランドトゥルース作成において多くの用途があります。プレアノテーション機能を使用すると、インプット内にすでに存在することがわかっているオブジェクトに関する情報を指定できます。お客様のユースケースに最適な活用方法については、アドバイザリーサービスチームまでお問い合わせください。 kognicプラットフォームはopenlabelフォーマットのプレアノテーションのアップロードを https //pypi org/project/kognic openlabel を使用してサポートしています。 kognic ioクライアントを使用したプレアノテーションの作成 kognicプラットフォームでプレアノテーションをするためのステップは3つあります 必要なデータをすべてアップロードしてシーンを作成する 1つ以上のopenlabelアノテーションをシーンに対するプレアノテーションとしてアップロードする プレアノテーションを使用してシーンからインプットを作成する これらのステップは create inputs 関数を使用して1回の呼び出しで複数回実行できることに注意してください。 docid\ mf7 5gllqrkg to ev3yd を参照してください。 1\ シーンの作成 まずシーンを作成します。 \# create scene but not input since we don't provide project or batch scene response = client lidars and cameras sequence create( lidars and cameras seq, dryrun=dryrun ) 次のステップに進む前にシーンの作成完了を待機する必要があることに注意してください。詳細については docid\ mf7 5gllqrkg to ev3yd を参照してください。 2\ openlabelアノテーションのアップロード シーンが正常に作成されたら、プレアノテーションをkognicプラットフォームにアップロードできます。 kognic openlabel のドキュメントに従ってopenlabelアノテーションをロードし、以下のようにkognicプラットフォームにアップロードします。 pre annotation response = client pre annotation create( scene uuid=scene response scene uuid, # from step 1 external id="20250811145051", # optional pre annotation=openlabelannotation( ), dryrun=dryrun ) 3\ インプットの作成 シーンとプレアノテーションが正常に作成されたら、インプットを作成できます。kognic io 2 9 0以降、これを行う方法が2つあります。 3 1 最新のプレアノテーションを使用して最新のプロジェクトバッチにインプットを作成する 最新の利用可能なプレアノテーションを使用してシーンからインプットを作成します。プロジェクトの最新のオープンバッチ、または指定されたバッチにインプットを追加し、アノテーション可能な状態にします。 client lidars and cameras sequence create from scene( scene uuid=scene response scene uuid, # from step 1 project=project, # important this is the external id and not the title dryrun=dryrun ) 3 2 特定のプレアノテーションを使用して指定されたプロジェクト/バッチにインプットを作成する kognic io 2 9 0以降で利用可能です これにより、1つのシーンから異なるプレアノテーション(またはプレアノテーションなし)を使用して複数のインプットを作成し、異なるプロジェクト/バッチに配置することができます。 特定のプレアノテーションまたはプレアノテーションなしでシーンからインプットを作成します。プロジェクトの最新のオ ープンバッチ、または指定されたバッチにインプットを追加し、アノテーション可能な状態にします。 \# scene is explicit, pre annotation is optional client input create from scene(scene uuid, project) # no preannotation client input create from scene(scene uuid, project, batch) # no preannotation client input create from scene(scene uuid, pre anno uuid, project) client input create from scene(scene uuid, pre anno uuid, project, batch) \# pre annotation is explicit, scene is implied client input create from pre annotation(pre anno uuid, project) client input create from pre annotation(pre anno uuid, project, batch) \# examples client input create from scene( scene uuid=scene response scene uuid, # mandatory, from step 1 pre annotation uuid=pre annotation response uuid # optional, from step 2 project=project, # important this is the external id and not the title dryrun=dryrun ) client input create from pre annotation( pre annotation uuid=pre annotation response uuid # mandatory, from step 2 project=project, # important this is the external id and not the title dryrun=dryrun ) openlabelサポート プレアノテーションはopenlabelフォーマット/スキーマを使用しますが、すべてのopenlabel機能がプレアノテーションでサポートされているわけではありません。 サポートされていないプレアノテーション機能 以下の機能または機能の組み合わせは現在サポートされていないか、部分的なサポートのみです。 静的ジオメトリ:未サポート objects objectdata 下のopenlabelで宣言されたバウンディングボックス、キュービoidなどが該当します。 ジオメトリ固有の属性:3dジオメトリでは未サポート これらはopenlabelの単一のジオメトリシェイプで宣言された属性です。つまり、1つのセンサーから見たオブジェクトにのみ適用される属性です。一般的な例として、各カメラで個別に記録れる occlusion があります。 ソース固有、ストリーム固有、またはセンサー固有の属性とも呼ばれます。 3dジオメトリとは、点群をアノテーションする際に描画できるもの(例:キュービoid)を指します。 ジオメトリ固有の属性は2dジオメトリ(例:バウンディングボックス)では使用できます。 docid\ i8t2meikkpcu2gloni5yo では、このように使用する前にプロパティをソース固有として指定する必要があることに注意してください。 stream 属性は特殊なケースであり、このルールから除外されます。 サポートされているプレアノテーション機能 ジオメトリ オブジェクトは同一フレーム内に複数の3dジオメトリを持つことはできません。 名称 openlabelフィールド 説明 属性 キュービオイド cuboid 3dキュービオイド バウンディングボックス bbox 2dバウンディングボックス 3dライン poly3d 3dのライン。閉じたラインにする場合は最初の点を末尾に追加する。 ポリゴン poly2d 2dの docid\ tfdiv3dlaafndehaklui is hole マルチポリゴン poly2d 2dの docid\ tfdiv3dlaafndehaklui is hole & polygon id カーブ poly2d 2dの docid\ tfdiv3dlaafndehaklui またはライン interpolation method 2d点 point2d docid\ tfdiv3dlaafndehaklui 2d点群 point2d docid\ tfdiv3dlaafndehaklui point class 3dセマンティックセグメンテーション binary 3dインスタンスセグメンテーション binary 3d点 point3d 3dレーン poly3d 3dレーン poly3d 各レーンエッジに1つずつ、計2つの poly3d を提供することで構築されます。 lane edge 属性を使用してレーンエッジを指定し、一方に right 、もう一方に left の値を設定します。このジオメトリは、オブジェクトが同一フレーム内に複数の3dジオメトリを持てないというルールの例外です。 lane edge lane edge すべてのジオメトリはプレアノテーションのルートではなく、フレーム下に指定する必要があることに注意してください。3dジオメトリは、単一ライダーの場合はライダー座標系で、複数ライダーの場合は参照座標系で表現する必要があります。キュービオイドの回転は==!エクスポート!==と同じである必要があります。2dジオメトリはピクセル座標で表現する必要があります。詳細については docid 3jkwdhqcmvnvbuzbouzmr を参照してください。 属性 テキスト 数値 ブール値 2dジオメトリの場合、属性はジオメトリ固有(ソース/センサー固有とも呼ばれる)またはオブジェクト固有として指定できます。属性は静的( objects キーで指定)または動的(フレーム内のオブジェクトの object data で指定)にすることができ、 docid\ i8t2meikkpcu2gloni5yo (存在する場合)によって許可されている必要があります。ジオメトリ固有 の属性(フレーム内の単一シェイプに現れるもの)もタスク定義でそのように宣言する必要があります。任意のプロパティをソース固有の方法で使用することはできません。 コンテキスト コンテキストはkognicプラットフォームでシーンのプロパティを定義するために使用されます。各コンテキストには1つのプロパティ値が含まれます。 コンテキストには4つのモードがあります。 静的グローバル — シーンのすべてのフレームとセンサーに対して有効な値 動的グローバル — すべてのセンサーに対して有効だが、フレームをまたいで変化する可能性がある値 静的ソース固有 — すべてのフレームに対して有効だが、1つの特定のストリームにのみ適用される値 静的ソース固有 — すべてのフレームに対して有効だが、1つの特定のストリームにのみ適用される値 以下の2種類のコンテキストオブジェクトを参照します。 コンテキストオブジェクト(または単にコンテキスト) — ルートキー contexts 下に定義される フレームコンテキストオブジェクト(または単にフレームコンテキスト) — フレーム内に定義される openlabelで使用されるすべてのコンテキストは、openlabelのルートにあるcontextキー下に定義する必要があります。kognicでは、コンテキストのキーはopenlabelの他の場所(例:フレーム内)でコンテキストを参照する際にのみ使用され、インクリメントする数字の文字列に設定されます。コンテキストタイプはkognicアプリのプロパティ名に対応し、プロパティの値はコンテキストの属性に設定されます。ソース固有のプロパティが複数のセンサーに存在する必要がある場合(例:各カメラセンサーに「車が見える」というブール値のプロパティがある場合)、同じコンテキストタイプを持つセンサーごとに1つのコンテキストオブジェクトが作成されます。コンテキストでは以下の属性タイプをサポートしています。 テキスト 数値 ブール値 ベクター — 文字列のみ コンテキストモード コンテキストにストリーム属性がある コンテキストに非ストリーム属性がある フレームコンテキストに属性がある コンテキストに非ストリーム属性が2つ以上ある フレームコンテキストに属性が2つ以上ある 静的グローバル ❌ ✅ ❌ ❌ ❌ 動的グローバル ❌ ❌ ✅ ❌ ❌ 静的ソース固有 ✅ ✅ ❌ ❌ ❌ 動的ソース固有 ✅ ❌ ✅ ❌ ❌ docid\ psyfyk8ranhgwtwmoztav セクションの例を参照してください。 フレーム すべてのプレアノテーションには、シーンで指定されたタイムスタンプの中から一意のタイムスタンプを持つフレームが含まれている必要があります。これは、タイムスタンプがプレアノテーション内のフレームをシーン内の正しいフレームにマッピングするために使用されるためです。静的な場合は、タイムスタンプ0の1つのフレームを使用する必要があります。 リレーション https //docs kognic com/api guide/openlabel format#lca9v のドキュメントに従ってサポートされています。ソース固有のリレーションはサポートされていません。 ジオメトリコレクションはリレーションの特殊なケースであり、 geometry collection タイプを使用することに注意してください。 ストリーム すべてのジオメトリには stream プロパティが指定されている必要があります。このプロパティは、ジオメトリが表示されるストリーム(またはセンサー)を決定します。ストリームはシーンで指定されたものの中にあり、同じタイプ(例: camera または lidar )である必要があります。 sparseness プレアノテーションはスパース(疎)にすることができます。つまり、オブジェクトやジオメトリはすべてのフレームに存在する必要はありません。代わりに、フレームの一部にのみ存在し、その間のフレームで補間することができます。この機能を活用することで、シーケンスのアノテーションプロセスを大幅に高速化できます。スパース性はオブジェクトデータポインターまたはブール値プロパティ interpolated の2つの方法で実現できます。前者はより簡潔なプレアノテーションにつながるため、ほとんどの場合に推奨される方法です。後者はプレアノテーションがkognicプラットフォームからエクスポートされたアノテーションから作成される場合に便利です。 補間はキーフレーム間のジオメトリ値を線形補間することで行われます。2dジオメトリの場合はピクセル座標で行われます。3dジオメトリの場合、補間はフレームローカル座標系またはワールド座標系のいずれかで行うことができます( docid 3jkwdhqcmvnvbuzbouzmr を参照)。これはアノテーション指示で設定されるため、不明な場合はkognicチームにお問い合わせください。ワールド座標系での補間は推奨されますが、シーンにエゴポーズが含まれている必要があることに注意してください。 オブジェクトデータポインター openlabelでは、オブジェクトデータポインターはオブジェクトの仕様を作成するために使用されます。例えば、特定のオブジェクトに使用される属性とジオメトリを指定できます。さらに、これらが存在するフレームを指定することもできます。ジオメトリがオブジェクトデータポインターで指定されている場合、そのジオメトリはオブジェクトデータポインターが指しているすべてのフレームに存在します。これらのフレームの一部でジオメトリが提供されていない場合は補間されます。ジオメトリはオブジェクトデータポインターの最初と最後のフレームに 必ず 提供する必要があることに注意してください。そうでない場合、プレアノテーションは拒否されます。オブジェクトデータポインターを使用する場合の制限として、ジオメトリはすべてのフレームで同じストリームに存在する必要があります。これは補間がストリーム座標系で行われるためです。異なるストリームで同じタイプのジオメトリを使用する必要がある場合は、異なるストリームのジオメトリに異なる名前を使用するだけで対応できます。 docid\ psyfyk8ranhgwtwmoztav にオブジェクトデータポインターの使用例が示されています。 オブジェクトデータポインター ブール値プロパティ interpolated は、ジオメトリを補間することを指定するために使用できます。ジオメトリは補間フレームにも存在している必要がありますが、そのジオメトリ値は無視されます。補間されたジオメトリはプレアノテーションの最初のフレームに対応するジオメトリ(補間済みかどうかにかかわらず)が必要であることに注意してください。そうでない場合、プレアノテーションは拒否されます。 interpolated プロパティを使用することは、プレアノテーションがkognicプラットフォームからエクスポートされたアノテーションから作成される場合に推奨される方法です。 docid\ psyfyk8ranhgwtwmoztav に interpolated プロパティの使用例が示されています。 属性 属性はジオメトリとは異なる方法で処理されます。属性がフレームに存在しない場合、オブジェクト(またはプロパティがソース固有の場合はジオメトリ)がそのフレームに存在する限り、最後の値が使用されます。オブジェクトがフレームに存在しない場合、属性は無視されます。密な属性はプレアノテーションがkognicプラットフォームにアップロードされる際に自動的にスパース化されます。 kognic予約済みオブジェクトプロパティ kognicプラットフォームでさまざまな動作を切り替えるために、オブジェクトに設定できる特定のプロパティがあります。 ロックされたジオメトリ プレアノテーション内のオブジェクトとそのジオメトリがすでに十分な品質である場合、またはプレアノテーションの使用中に変更されないようにする必要がある場合は、ロック済みとしてマークできます。ロックはオブジェクトレベルに設定され、そのオブジェクトのすべてのジオメトリに影響します。 { "openlabel" { "objects" { "object uuid" { "name" "object uuid", "object data" { "boolean" \[ { "name" "kognic locked geometries", "val" true } ] }, "object data pointers" {}, "type" "vehicle" } } } }import kognic openlabel models as olm uuid1 = str(uuid uuid4()) object = olm object( name=uuid1, type="car", object data=olm objectdata( boolean=\[ olm boolean(name="kognic locked geometries", val=true), ] ), ) openlabel = olm openlabel(objects={uuid1 object}, metadata=olm metadata(schema version="1 0 0")) openlabel annotation = olm openlabelannotation(openlabel=openlabel) 静止オブジェクト 静止オブジェクトとは、移動できるが移動しないものを指します。良い例として駐車中の車が挙げられます。これは、ランドマークのような移動できない静的オブジェクトとは異なります。オブジェクトを静止としてマークすることで、特定のプラットフォーム機能を有効化できます。 { "openlabel" { "objects" { "object uuid" { "name" "object uuid", "object data" { "boolean" \[ { "name" "kognic stationary object", "val" true } ] }, "object data pointers" {}, "type" "vehicle" } } } }import kognic openlabel models as olm uuid1 = str(uuid uuid4()) object = olm object( name=uuid1, type="car", object data=olm objectdata( boolean=\[ olm boolean(name="kognic stationary object", val=true), ] ), ) openlabel = olm openlabel(objects={uuid1 object}, metadata=olm metadata(schema version="1 0 0")) openlabel annotation = olm openlabelannotation(openlabel=openlabel) 例 以下にサポートされているプレアノテーションの例を示します。 静的プロパティを持つ3dキュービオイドと2dバウンディングボックス { "openlabel" { "frame intervals" \[], "frames" { "0" { "frame properties" { "timestamp" 0, "external id" "0", "streams" { "lidar1" {}, "zfc" {} } }, "objects" { "1232b4f4 e3ca 446a 91cb d8d403703df7" { "object data" { "bbox" \[ { "attributes" { "text" \[{ "name" "stream", "val" "zfc" }] }, "name" "bounding box 1", "val" \[1 0, 1 0, 40 0, 30 0] } ], "cuboid" \[ { "attributes" { "text" \[{ "name" "stream", "val" "lidar1" }] }, "name" "cuboid 89ac8a2b", "val" \[ 2 079312801361084, 18 919870376586914, 0 3359137773513794, 0 002808041640852679, 0 022641949116037438, 0 06772797660868829, 0 9974429197838155, 1 767102435869269, 4 099334155319101, 1 3691029802958168 ] } ] } } } } }, "metadata" { "schema version" "1 0 0" }, "objects" { "1232b4f4 e3ca 446a 91cb d8d403703df7" { "name" "1232b4f4 e3ca 446a 91cb d8d403703df7", "object data" { "text" \[{ "name" "color", "val" "red" }] }, "type" "passengercar" } }, "streams" { "lidar1" { "type" "lidar" }, "zfc" { "type" "camera" } } } } 動的プロパティを持つ3dライン { "openlabel" { "frame intervals" \[{ "frame end" 0, "frame start" 0 }], "frames" { "0" { "frame properties" { "streams" { "lidar" {} }, "timestamp" 0, "external id" "0" }, "objects" { "cc06aced d7dc 4638 a6e9 dc7f5e215340" { "object data" { "poly3d" \[ { "attributes" { "text" \[{ "name" "stream", "val" "lidar" }] }, "closed" false, "name" "line 3d 1", "val" \[ 5 0, 0 0, 0 0, 5 0, 10 0, 0 0, 5 0, 10 0, 0 0, 5 0, 0 0, 0 0, 5 0, 0 0, 0 0 ] } ], "text" \[{ "name" "occluded", "val" "no" }] } } } } }, "metadata" { "schema version" "1 0 0" }, "objects" { "cc06aced d7dc 4638 a6e9 dc7f5e215340" { "name" "cc06aced", "type" "region" } }, "streams" { "lidar" { "type" "lidar" }, "zfc" { "type" "camera" } } } } オブジェクトデータポインターを使用したスパース性 以下の例では、オブジェクト 1232b4f4 e3ca 446a 91cb d8d403703df7 には the bbox name というバウンディングボックスがあり、フレーム0と3に提供されています。フレーム1と2では、バウンディングボックスが補間されます { "openlabel" { "objects" { "1232b4f4 e3ca 446a 91cb d8d403703df7" { "name" "car name", "type" "car", "object data pointers" { "the bbox name" { "type" "bbox", "frame intervals" \[{"frame start" 0, "frame end" 3}] } } } }, "frames" { "0" { , "objects" { "1232b4f4 e3ca 446a 91cb d8d403703df7" { "object data" { "bbox" \[{"name" "the bbox name", }] } } } }, "1" {}, "2" {}, "3" { , "objects" { "1232b4f4 e3ca 446a 91cb d8d403703df7" { "object data" { "bbox" \[{"name" "the bbox name", }] } } } } } } } 補間プロパティを使用したスパース性 以下の例では、スパース性は interpolated プロパティを使用して決定されます。オブジェクト 1232b4f4 e3ca 446a 91cb d8d403703df7 にはバウンディングボックスがあり、フレーム1と2では interpolated プロパティがtrueに設定されていますが、フレーム0と3では設定されていません。フレーム1と2のジオメトリ値は無視され、代わりにフレー ム0と3のジオメトリ値から補間されます。 { "openlabel" { , "frames" { "0" { , "objects" { "1232b4f4 e3ca 446a 91cb d8d403703df7" { "object data" { "bbox" \[ { "attributes" { "stream" \[{ "name" "stream", "val" "cam" }], "boolean" \[{ "name" "interpolated", "val" false }] }, } ] } } } }, "1" { , "objects" { "1232b4f4 e3ca 446a 91cb d8d403703df7" { "object data" { "bbox" \[ { "attributes" { "stream" \[{ "name" "stream", "val" "cam" }], "boolean" \[{ "name" "interpolated", "val" true }] }, } ] } } } }, "2" { , "objects" { "1232b4f4 e3ca 446a 91cb d8d403703df7" { "object data" { "bbox" \[ { "attributes" { "stream" \[{ "name" "stream", "val" "cam" }], "boolean" \[{ "name" "interpolated", "val" true }] }, } ] } } } }, "3" { , "objects" { "1232b4f4 e3ca 446a 91cb d8d403703df7" { "object data" { "bbox" \[ { "attributes" { "stream" \[{ "name" "stream", "val" "cam" }], "boolean" \[{ "name" "interpolated", "val" true }] }, } ] } } } } } } } コンテキストを含むopenlabel { "openlabel" { "context" { "0" { // a global static context "name" "", // this has no meaning to us "type" "isdaytime", "attributes" { "boolean" \[{ "name" "", // this has no meaning to us "val" true }] } }, "1" { // a global dynamic context "name" "", "type" "numberofsignspassed", "attributes" {} }, "2" { // a stream specific static context "name" "", "type" "iscamerapointingforward", "attributes" { "text" \[{ "name" "stream", "value" "cam1"}], "boolean" \[{ "name" "", "value" true} } }, "3" { // same property as above but in a different sensor "name" "", "type" "iscamerapointingforward", "attributes" { "text" \[{ "name" "stream", "value" "cam2"}], "boolean" \[{ "name" "", "value" true} } }, "4" { // a stream specific dynamic context "name" "", "type" "landscapecharacteristics" "attributes" { "text" \[{ "name" "stream", "value" "cam1"}] } } }, "frames" { "0" { , "contexts" { "1" { "attributes" { "num" \[{ "name" "", "value" 7 }] } } } }, "1" {}, "2" {}, "3" { , "objects" { "4" { "attributes" { "vec" \[{ "name" "", "value" \["trees", "fields"] }] } } } } } } } 3dセマンティックセグメンテーションとインスタンスセグメンテーション 3dセグメンテーションタスクのプレアノテーションをアップロードする際、openlabelにはシーンに存在するクラス分類とインスタンスの両方が含まれます。クラス分類はオブジェクトタイプ 3dpointcloudsegmentation を持つ特別なオブジェクトによって保持されます。このオブジェクトにはrleを使用してエンコードされたクラス分類を含むバイナリオブジェクトデータエントリが必要です。インスタンスには classification id の値を持つオブジェクトエントリが必要です。kognicは以下のようなクラス分類の番号付けスキームを採用しています。 範囲 意味 0 未分類 1 255 セマンティック分類(例:道路、建物) 256 65535 インスタンス分類(例:車1、車2、歩行者1、歩行者2) { "openlabel" { "frames" { "0" { "objects" { "ecdb280e 0ff0 4f59 b9f2 9135e42f991c" { "object data" {} }, "b088dcbf c7fe 46a5 a71d 88ef49bdc107" { "object data" { "binary" \[ { "attributes" { "text" \[ { "val" "lidar", "name" "stream" } ] }, "data type" "", "encoding" "rle", "name" "labels", "val" "\<rle string>" } ] } } } } }, "metadata" { "schema version" "1 0 0" }, "objects" { "ecdb280e 0ff0 4f59 b9f2 9135e42f991c" { "name" "ecdb280e 0ff0 4f59 b9f2 9135e42f991c", "type" "tree", "object data" { "num" \[ { "val" 332 0, "name" "classification id" } ] } }, "b088dcbf c7fe 46a5 a71d 88ef49bdc107" { "name" "b088dcbf c7fe 46a5 a71d 88ef49bdc107", "type" "3dpointcloudsegmentation" } } } } リレーションとしてのジオメトリコレクション 以下は2つのカーブがジオメトリコレクションを形成する例です。ジオメトリコレクションは任意のタイプのジオメトリの任意のグループ化が可能であることに注意してください。 { "openlabel" { "frames" { "0" { "objects" { "824e20e4 b3bd 4ba8 8d40 9d32a3985312" { "object data" { "poly2d" \[ { "attributes" {}, "closed" false, "mode" "mode poly2d absolute", "name" "curve 518f2936", "val" \[] } ] } }, "923eb0cf ddf2 4eb3 881c 95846d8d1a3d" { "object data" { "poly2d" \[ { "attributes" {}, "closed" false, "mode" "mode poly2d absolute", "name" "curve e63dc662", "val" \[] } ] } }, "f7b8704f 985c 4369 93a8 5b0c77757ee9" { "object data" {} } } } }, "metadata" { "schema version" "1 0 0" }, "objects" { "824e20e4 b3bd 4ba8 8d40 9d32a3985312" { "name" "824e20e4 b3bd 4ba8 8d40 9d32a3985312", "object data" {}, "type" "dashed" // collection subtype 1 }, "923eb0cf ddf2 4eb3 881c 95846d8d1a3d" { "name" "923eb0cf ddf2 4eb3 881c 95846d8d1a3d", "object data" {}, "type" "solid" // collection subtype 2 }, "f7b8704f 985c 4369 93a8 5b0c77757ee9" { "name" "f7b8704f 985c 4369 93a8 5b0c77757ee9", "object data" {}, "type" "lanemarking" // the collection type } }, "relations" { "0" { "name" "0", // specifying the collection as a relation "rdf objects" \[ { "type" "object", "uid" "824e20e4 b3bd 4ba8 8d40 9d32a3985312" }, { "type" "object", "uid" "923eb0cf ddf2 4eb3 881c 95846d8d1a3d" } ], "rdf subjects" \[ { "type" "object", "uid" "f7b8704f 985c 4369 93a8 5b0c77757ee9" } ], "type" "geometry collection" } } } }
