From ea51df5fa12b91769b5808e7027194360536b29e Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Thu, 15 Jun 2023 15:21:41 +0200 Subject: [PATCH 01/10] first version of annotation context manual text --- .../annotation-context/example.py | 20 ++++++ .../annotation-context/example.rs | 1 + docs/content/concepts/annotation-context.md | 61 +++++++++++++++++++ docs/content/concepts/batches.md | 2 +- docs/content/concepts/entity-path.md | 2 +- 5 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 docs/code-examples/annotation-context/example.py create mode 100644 docs/code-examples/annotation-context/example.rs create mode 100644 docs/content/concepts/annotation-context.md diff --git a/docs/code-examples/annotation-context/example.py b/docs/code-examples/annotation-context/example.py new file mode 100644 index 000000000000..5d81e43cc2dc --- /dev/null +++ b/docs/code-examples/annotation-context/example.py @@ -0,0 +1,20 @@ +# Annotation context with two classes, using two labled classes, of which ones defines a color. +# Applies to all entities below "masks". +rr.log_annotation_context( + "masks", + [ + rr.AnnotationInfo(id=0, label="Background"), + rr.AnnotationInfo(id=1, label="Person", color=(0, 0, 0)), + ], +) + +# Annotation context with simple keypoints & keypoint connections. +# Applies to all entities below "detections". +rr.log_annotation_context( + "detections", + rr.ClassDescription( + info=rr.AnnotationInfo(label="Snake"), + keypoint_annotations=[rr.AnnotationInfo(id=i, color=(255 / 10 * i, 0, 0)) for i in range(10)], + keypoint_connections=[(i, i + 1) for i in range(9)], + ), +) diff --git a/docs/code-examples/annotation-context/example.rs b/docs/code-examples/annotation-context/example.rs new file mode 100644 index 000000000000..70b786d12ed0 --- /dev/null +++ b/docs/code-examples/annotation-context/example.rs @@ -0,0 +1 @@ +// TODO diff --git a/docs/content/concepts/annotation-context.md b/docs/content/concepts/annotation-context.md new file mode 100644 index 000000000000..60fe5a8167e1 --- /dev/null +++ b/docs/content/concepts/annotation-context.md @@ -0,0 +1,61 @@ +--- +title: Annotation Context +order: 4 +--- + +# Overview + +Any visualization that assigns an identifier ("Class ID") to an instance or entity can profit from using annotations. +By using an Annotation Context, you can associated labels and colors to a given class. + + +This is particularly useful for visualizing the output classifications algorithms +(as demonstrated by the [Detect and Track Objects](https://github.com/rerun-io/rerun/tree/latest/examples/python/detect_and_track_objects) example), +but can be used more generally for any kind of categorization within a scene. + +TODO: screenshot + +## Keypoints & Keypoint Connections + +Rerun allows you to define keypoints within a class. +Each keypoint can define its own properties (colors, labels, etc.) that overwrite its parent class. + +A typical example for keypoints would be the joints of a skeleton within a pose detection: +In that case, the entire detected pose/skeleton is assigned a Class ID and each joint within gets a Keypoint ID. + +To help you more with this (and similar) usecase(s), you can define connections between keypoints +as part of your annotation class description: +The viewer will draw the connecting lines for all connected keypoints whenever that class is used. +Just as with labels & colors this allows you to use the same connection information on any instance that class in your scene. + +Keypoints are currently only applicable to 2D and 3D points. + +TODO: screenshot + +# How to log an Annotation Context + +Annotation Context is typically logged as [timeless](TODO:) data, but can change over time if needed. + +The Annotation Context is defined as a list of Class Descriptions that define how classes are styled +(as well as optional keypoint style & connection). + +Annotation contexts are logged with: + +* Python: [`log_annotation_context`](TODO:) +* Rust: [TODO:] + +code-example: annotation-context + + +# Which Entities are affected + +Each entity that uses a Class ID component (and optionally Keypoint ID components) will look for +the nearest ancestor that in the [entity path hierarchy](TODO:) that has an Annotation Context defined. + +# Segmentation images + +Segmentation images are single channel integer images/tensors where each pixel represents a class id. +By default, Rerun will automatically assign colors to each class id, but by defining an Annotation Context, +you can explicitly determine the color of each class. + +TODO: code links. diff --git a/docs/content/concepts/batches.md b/docs/content/concepts/batches.md index 80ad5d3ca168..f22b70f7b0dc 100644 --- a/docs/content/concepts/batches.md +++ b/docs/content/concepts/batches.md @@ -1,6 +1,6 @@ --- title: Batch Data -order: 4 +order: 5 --- Rerun has built-in support for batch data. Whenever you have a collection of things that all have the same type, rather diff --git a/docs/content/concepts/entity-path.md b/docs/content/concepts/entity-path.md index 47ff7823e8de..fc12bf72b813 100644 --- a/docs/content/concepts/entity-path.md +++ b/docs/content/concepts/entity-path.md @@ -45,7 +45,7 @@ Path hierarchy plays an important role in a number of different functions within * With the [Transform System](spaces-and-transforms.md) the `transform` component logged to any Entity always describes the relationship between that Entity and its direct parent. - * When resolving the meaning of `class_id` and `keypoint_id` components, Rerun uses the Annotation Context from the nearest ancestor in the hierarchy. + * When resolving the meaning of Class ID and Keypoint ID components, Rerun uses the Annotation Context from the nearest ancestor in the hierarchy. * When adding data to [Blueprints](../reference/viewer/blueprint.md), it is common to add a path and all of its descendants. * When using the `log_cleared` API, it is possible to mark an entity and all of its descendants as being cleared. * In the future, it will also be possible to use path-hierarchy to set default-values for descendants. From 3816baa1cc31a62593a1aa4aaf639e1d098e4a24 Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Thu, 15 Jun 2023 15:25:31 +0200 Subject: [PATCH 02/10] slight python example improvement --- docs/code-examples/annotation-context/example.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/docs/code-examples/annotation-context/example.py b/docs/code-examples/annotation-context/example.py index 5d81e43cc2dc..ff50741e78a2 100644 --- a/docs/code-examples/annotation-context/example.py +++ b/docs/code-examples/annotation-context/example.py @@ -1,7 +1,6 @@ # Annotation context with two classes, using two labled classes, of which ones defines a color. -# Applies to all entities below "masks". rr.log_annotation_context( - "masks", + "masks", # Applies to all entities below "masks". [ rr.AnnotationInfo(id=0, label="Background"), rr.AnnotationInfo(id=1, label="Person", color=(0, 0, 0)), @@ -9,12 +8,11 @@ ) # Annotation context with simple keypoints & keypoint connections. -# Applies to all entities below "detections". rr.log_annotation_context( - "detections", + "detections", # Applies to all entities below "detections". rr.ClassDescription( info=rr.AnnotationInfo(label="Snake"), - keypoint_annotations=[rr.AnnotationInfo(id=i, color=(255 / 10 * i, 0, 0)) for i in range(10)], + keypoint_annotations=[rr.AnnotationInfo(id=i, color=(0, 255 / 9 * i, 0)) for i in range(10)], keypoint_connections=[(i, i + 1) for i in range(9)], ), ) From ca250331036f7fa1cdc03379034746cd8dc4078b Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Thu, 15 Jun 2023 19:50:29 +0200 Subject: [PATCH 03/10] links --- docs/content/concepts/annotation-context.md | 25 ++++++++++++--------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/docs/content/concepts/annotation-context.md b/docs/content/concepts/annotation-context.md index 60fe5a8167e1..0622672adc2c 100644 --- a/docs/content/concepts/annotation-context.md +++ b/docs/content/concepts/annotation-context.md @@ -3,19 +3,19 @@ title: Annotation Context order: 4 --- -# Overview +## Overview Any visualization that assigns an identifier ("Class ID") to an instance or entity can profit from using annotations. By using an Annotation Context, you can associated labels and colors to a given class. - This is particularly useful for visualizing the output classifications algorithms (as demonstrated by the [Detect and Track Objects](https://github.com/rerun-io/rerun/tree/latest/examples/python/detect_and_track_objects) example), but can be used more generally for any kind of categorization within a scene. TODO: screenshot -## Keypoints & Keypoint Connections + +### Keypoints & Keypoint Connections Rerun allows you to define keypoints within a class. Each keypoint can define its own properties (colors, labels, etc.) that overwrite its parent class. @@ -32,30 +32,33 @@ Keypoints are currently only applicable to 2D and 3D points. TODO: screenshot -# How to log an Annotation Context -Annotation Context is typically logged as [timeless](TODO:) data, but can change over time if needed. +### How to log an Annotation Context + +Annotation Context is typically logged as [timeless](./timelines#timeless-data) data, but can change over time if needed. The Annotation Context is defined as a list of Class Descriptions that define how classes are styled (as well as optional keypoint style & connection). Annotation contexts are logged with: -* Python: [`log_annotation_context`](TODO:) -* Rust: [TODO:] +* Python: [`log_annotation_context`](https://ref.rerun.io/docs/python/latest/common/annotations/#rerun.log_annotation_context) +* Rust: [`AnnotationContext`](https://docs.rs/rerun/latest/rerun/external/re_log_types/component_types/context/struct.AnnotationContext.html) code-example: annotation-context -# Which Entities are affected +## Which Entities are affected Each entity that uses a Class ID component (and optionally Keypoint ID components) will look for -the nearest ancestor that in the [entity path hierarchy](TODO:) that has an Annotation Context defined. +the nearest ancestor that in the [entity path hierarchy](./entity-path#path-hierarchy-functions) that has an Annotation Context defined. + -# Segmentation images +## Segmentation images Segmentation images are single channel integer images/tensors where each pixel represents a class id. By default, Rerun will automatically assign colors to each class id, but by defining an Annotation Context, you can explicitly determine the color of each class. -TODO: code links. +* Python: [`log_segmentation_image`](https://ref.rerun.io/docs/python/latest/common/images/#rerun.log_segmentation_image) +* Rust: Log a [`Tensor`](https://docs.rs/rerun/latest/rerun/components/struct.Tensor.html) with [`TensorDataMeaning::ClassId`](https://docs.rs/rerun/latest/rerun/components/enum.TensorDataMeaning.html#variant.ClassId) From 528b2f6360056fdef2f48180943a6fe411fd614d Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Thu, 15 Jun 2023 20:15:42 +0200 Subject: [PATCH 04/10] images --- docs/content/concepts/annotation-context.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/content/concepts/annotation-context.md b/docs/content/concepts/annotation-context.md index 0622672adc2c..32181e1cdc73 100644 --- a/docs/content/concepts/annotation-context.md +++ b/docs/content/concepts/annotation-context.md @@ -12,7 +12,7 @@ This is particularly useful for visualizing the output classifications algorithm (as demonstrated by the [Detect and Track Objects](https://github.com/rerun-io/rerun/tree/latest/examples/python/detect_and_track_objects) example), but can be used more generally for any kind of categorization within a scene. -TODO: screenshot +![classids](https://static.rerun.io/5508e3fd5b2fdc020eda0bd545ccb97d26a01303_classids.png) ### Keypoints & Keypoint Connections @@ -30,7 +30,7 @@ Just as with labels & colors this allows you to use the same connection informat Keypoints are currently only applicable to 2D and 3D points. -TODO: screenshot +![keypoints](https://static.rerun.io/a8be4dff9cf1d2793d5a5f0d5c4bb058d1430ea8_keypoints.png) ### How to log an Annotation Context @@ -61,4 +61,6 @@ By default, Rerun will automatically assign colors to each class id, but by defi you can explicitly determine the color of each class. * Python: [`log_segmentation_image`](https://ref.rerun.io/docs/python/latest/common/images/#rerun.log_segmentation_image) -* Rust: Log a [`Tensor`](https://docs.rs/rerun/latest/rerun/components/struct.Tensor.html) with [`TensorDataMeaning::ClassId`](https://docs.rs/rerun/latest/rerun/components/enum.TensorDataMeaning.html#variant.ClassId) +* Rust: Log a [`Tensor`](https://docs.rs/rerun/latest/rerun/components/struct.Tensor.html) with [`TensorDataMeaning::ClassId`](https://docs.rs/rerun/latest/rerun/components/enum.TensorDataMeaning.html#variant.ClassIpython ./) + +![segmentation image](https://static.rerun.io/7c47738b791a7faaad8f0221a78c027300d407fc_segmentation_image.png) From 49041026aaffa17ceb49dac52a9dbb20790d79ee Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Thu, 15 Jun 2023 20:29:43 +0200 Subject: [PATCH 05/10] rust example --- .../annotation-context/example.py | 2 +- .../annotation-context/example.rs | 57 ++++++++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/docs/code-examples/annotation-context/example.py b/docs/code-examples/annotation-context/example.py index ff50741e78a2..89861969dca2 100644 --- a/docs/code-examples/annotation-context/example.py +++ b/docs/code-examples/annotation-context/example.py @@ -1,4 +1,4 @@ -# Annotation context with two classes, using two labled classes, of which ones defines a color. +# Annotation context with two classes, using two labeled classes, of which ones defines a color. rr.log_annotation_context( "masks", # Applies to all entities below "masks". [ diff --git a/docs/code-examples/annotation-context/example.rs b/docs/code-examples/annotation-context/example.rs index 70b786d12ed0..2a573fd8aa48 100644 --- a/docs/code-examples/annotation-context/example.rs +++ b/docs/code-examples/annotation-context/example.rs @@ -1 +1,56 @@ -// TODO +// Annotation context with two classes, using two labeled classes, of which ones defines a color. +MsgSender::new("masks") // Applies to all entities below "masks". + .with_timeless(true) + .with_component(&[AnnotationContext { + class_map: [ + ClassDescription { + info: AnnotationInfo { + id: 0, + label: Some(Label("Background".into())), + color: None, + }, + ..Default::default() + }, + ClassDescription { + info: AnnotationInfo { + id: 0, + label: Some(Label("Background".into())), + color: Some(ColorRGBA(0x000000)), + }, + ..Default::default() + }, + ] + .into_iter() + .map(|class| (ClassId(class.info.id), class)) + .collect(), + }])? + .send(rec_stream)?; + +// Annotation context with simple keypoints & keypoint connections. +MsgSender::new("detections") // Applies to all entities below "detections". + .with_timeless(true) + .with_component(&[AnnotationContext { + class_map: std::iter::once(( + ClassId(0), + ClassDescription { + info: AnnotationInfo { + id: 0, + label: Some(Label("Snake".into())), + color: None, + }, + keypoint_map: (0..10) + .map(|i| AnnotationInfo { + id: i, + label: None, + color: Some(ColorRGBA::from_rgb(0, (255 / 9 * i) as u8, 0)), + }) + .map(|keypoint| (KeypointId(keypoint.id), keypoint)) + .collect(), + keypoint_connections: (0..9) + .map(|i| (KeypointId(i), KeypointId(i + 1))) + .collect(), + }, + )) + .collect(), + }])? + .send(rec_stream)?; From a76a701d18c76d5676da937d804db8095a3645a7 Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Thu, 15 Jun 2023 20:36:10 +0200 Subject: [PATCH 06/10] small improvements --- docs/content/concepts/annotation-context.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/content/concepts/annotation-context.md b/docs/content/concepts/annotation-context.md index 32181e1cdc73..99273e1065f6 100644 --- a/docs/content/concepts/annotation-context.md +++ b/docs/content/concepts/annotation-context.md @@ -5,19 +5,20 @@ order: 4 ## Overview -Any visualization that assigns an identifier ("Class ID") to an instance or entity can profit from using annotations. -By using an Annotation Context, you can associated labels and colors to a given class. +Any visualization that assigns an identifier ("Class ID") to an instance or entity can profit from using Annotations. +By using an Annotation Context, you can associate labels and colors with a given class and then re-use +that class across entities. This is particularly useful for visualizing the output classifications algorithms (as demonstrated by the [Detect and Track Objects](https://github.com/rerun-io/rerun/tree/latest/examples/python/detect_and_track_objects) example), -but can be used more generally for any kind of categorization within a scene. +but can be used more generally for any kind of reoccurring categorization within a Rerun recording. ![classids](https://static.rerun.io/5508e3fd5b2fdc020eda0bd545ccb97d26a01303_classids.png) ### Keypoints & Keypoint Connections -Rerun allows you to define keypoints within a class. +Rerun allows you to define keypoints *within* a class. Each keypoint can define its own properties (colors, labels, etc.) that overwrite its parent class. A typical example for keypoints would be the joints of a skeleton within a pose detection: @@ -33,7 +34,7 @@ Keypoints are currently only applicable to 2D and 3D points. ![keypoints](https://static.rerun.io/a8be4dff9cf1d2793d5a5f0d5c4bb058d1430ea8_keypoints.png) -### How to log an Annotation Context +### Logging an Annotation Context Annotation Context is typically logged as [timeless](./timelines#timeless-data) data, but can change over time if needed. @@ -48,7 +49,7 @@ Annotation contexts are logged with: code-example: annotation-context -## Which Entities are affected +## Affected Entities Each entity that uses a Class ID component (and optionally Keypoint ID components) will look for the nearest ancestor that in the [entity path hierarchy](./entity-path#path-hierarchy-functions) that has an Annotation Context defined. From a54a8729798932d331a28d24c7684ec9eecb6f9d Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Thu, 15 Jun 2023 20:39:02 +0200 Subject: [PATCH 07/10] link from entity paths to annotation context docs --- docs/content/concepts/entity-path.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/concepts/entity-path.md b/docs/content/concepts/entity-path.md index fc12bf72b813..d23e2f4075cd 100644 --- a/docs/content/concepts/entity-path.md +++ b/docs/content/concepts/entity-path.md @@ -45,7 +45,7 @@ Path hierarchy plays an important role in a number of different functions within * With the [Transform System](spaces-and-transforms.md) the `transform` component logged to any Entity always describes the relationship between that Entity and its direct parent. - * When resolving the meaning of Class ID and Keypoint ID components, Rerun uses the Annotation Context from the nearest ancestor in the hierarchy. + * When resolving the meaning of Class ID and Keypoint ID components, Rerun uses the [Annotation Context](./annotation-context) from the nearest ancestor in the hierarchy. * When adding data to [Blueprints](../reference/viewer/blueprint.md), it is common to add a path and all of its descendants. * When using the `log_cleared` API, it is possible to mark an entity and all of its descendants as being cleared. * In the future, it will also be possible to use path-hierarchy to set default-values for descendants. From 16894abcca7d3274c8e599ca8a65a9a3a38ce63f Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Thu, 15 Jun 2023 20:40:28 +0200 Subject: [PATCH 08/10] link fix --- docs/content/concepts/annotation-context.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/concepts/annotation-context.md b/docs/content/concepts/annotation-context.md index 99273e1065f6..316ea6ed0e91 100644 --- a/docs/content/concepts/annotation-context.md +++ b/docs/content/concepts/annotation-context.md @@ -62,6 +62,6 @@ By default, Rerun will automatically assign colors to each class id, but by defi you can explicitly determine the color of each class. * Python: [`log_segmentation_image`](https://ref.rerun.io/docs/python/latest/common/images/#rerun.log_segmentation_image) -* Rust: Log a [`Tensor`](https://docs.rs/rerun/latest/rerun/components/struct.Tensor.html) with [`TensorDataMeaning::ClassId`](https://docs.rs/rerun/latest/rerun/components/enum.TensorDataMeaning.html#variant.ClassIpython ./) +* Rust: Log a [`Tensor`](https://docs.rs/rerun/latest/rerun/components/struct.Tensor.html) with [`TensorDataMeaning::ClassId`](https://docs.rs/rerun/latest/rerun/components/enum.TensorDataMeaning.html#variant.ClassId) ![segmentation image](https://static.rerun.io/7c47738b791a7faaad8f0221a78c027300d407fc_segmentation_image.png) From e95dae2f4f0edc99b789792a9a12f7b24a4a756e Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Fri, 16 Jun 2023 10:40:12 +0200 Subject: [PATCH 09/10] PR feedback --- .../code-examples/annotation-context/example.py | 2 +- .../code-examples/annotation-context/example.rs | 4 ++-- docs/content/concepts/annotation-context.md | 17 +++++++++-------- docs/content/concepts/entity-path.md | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/docs/code-examples/annotation-context/example.py b/docs/code-examples/annotation-context/example.py index 89861969dca2..9c02c70931ec 100644 --- a/docs/code-examples/annotation-context/example.py +++ b/docs/code-examples/annotation-context/example.py @@ -3,7 +3,7 @@ "masks", # Applies to all entities below "masks". [ rr.AnnotationInfo(id=0, label="Background"), - rr.AnnotationInfo(id=1, label="Person", color=(0, 0, 0)), + rr.AnnotationInfo(id=1, label="Person", color=(255, 0, 0)), ], ) diff --git a/docs/code-examples/annotation-context/example.rs b/docs/code-examples/annotation-context/example.rs index 2a573fd8aa48..111a909f3627 100644 --- a/docs/code-examples/annotation-context/example.rs +++ b/docs/code-examples/annotation-context/example.rs @@ -14,8 +14,8 @@ MsgSender::new("masks") // Applies to all entities below "masks". ClassDescription { info: AnnotationInfo { id: 0, - label: Some(Label("Background".into())), - color: Some(ColorRGBA(0x000000)), + label: Some(Label("Person".into())), + color: Some(ColorRGBA(0xFF000000)), }, ..Default::default() }, diff --git a/docs/content/concepts/annotation-context.md b/docs/content/concepts/annotation-context.md index 316ea6ed0e91..adec5d60c23f 100644 --- a/docs/content/concepts/annotation-context.md +++ b/docs/content/concepts/annotation-context.md @@ -5,15 +5,16 @@ order: 4 ## Overview -Any visualization that assigns an identifier ("Class ID") to an instance or entity can profit from using Annotations. +Any visualization that assigns an identifier ("Class ID") to an instance or entity can benefit from using Annotations. By using an Annotation Context, you can associate labels and colors with a given class and then re-use that class across entities. -This is particularly useful for visualizing the output classifications algorithms -(as demonstrated by the [Detect and Track Objects](https://github.com/rerun-io/rerun/tree/latest/examples/python/detect_and_track_objects) example), + +This is particularly useful for visualizing the output of classifications algorithms +(as demonstrated by the [Detect and Track Objects](https://github.com/rerun-io/rerun/tree/main/examples/python/detect_and_track_objects) example), but can be used more generally for any kind of reoccurring categorization within a Rerun recording. -![classids](https://static.rerun.io/5508e3fd5b2fdc020eda0bd545ccb97d26a01303_classids.png) +![class_ids](https://static.rerun.io/5508e3fd5b2fdc020eda0bd545ccb97d26a01303_classids.png) ### Keypoints & Keypoint Connections @@ -21,10 +22,10 @@ but can be used more generally for any kind of reoccurring categorization within Rerun allows you to define keypoints *within* a class. Each keypoint can define its own properties (colors, labels, etc.) that overwrite its parent class. -A typical example for keypoints would be the joints of a skeleton within a pose detection: +A typical example usage of keypoints is annotating the joints of a skeleton within a pose detection: In that case, the entire detected pose/skeleton is assigned a Class ID and each joint within gets a Keypoint ID. -To help you more with this (and similar) usecase(s), you can define connections between keypoints +To help you more with this (and similar) use-case(s), you can also define connections between keypoints as part of your annotation class description: The viewer will draw the connecting lines for all connected keypoints whenever that class is used. Just as with labels & colors this allows you to use the same connection information on any instance that class in your scene. @@ -36,7 +37,7 @@ Keypoints are currently only applicable to 2D and 3D points. ### Logging an Annotation Context -Annotation Context is typically logged as [timeless](./timelines#timeless-data) data, but can change over time if needed. +Annotation Context is typically logged as [timeless](timelines.md#timeless-data) data, but can change over time if needed. The Annotation Context is defined as a list of Class Descriptions that define how classes are styled (as well as optional keypoint style & connection). @@ -52,7 +53,7 @@ code-example: annotation-context ## Affected Entities Each entity that uses a Class ID component (and optionally Keypoint ID components) will look for -the nearest ancestor that in the [entity path hierarchy](./entity-path#path-hierarchy-functions) that has an Annotation Context defined. +the nearest ancestor that in the [entity path hierarchy](entity-path.md#path-hierarchy-functions) that has an Annotation Context defined. ## Segmentation images diff --git a/docs/content/concepts/entity-path.md b/docs/content/concepts/entity-path.md index d23e2f4075cd..d29f8723f0bf 100644 --- a/docs/content/concepts/entity-path.md +++ b/docs/content/concepts/entity-path.md @@ -45,7 +45,7 @@ Path hierarchy plays an important role in a number of different functions within * With the [Transform System](spaces-and-transforms.md) the `transform` component logged to any Entity always describes the relationship between that Entity and its direct parent. - * When resolving the meaning of Class ID and Keypoint ID components, Rerun uses the [Annotation Context](./annotation-context) from the nearest ancestor in the hierarchy. + * When resolving the meaning of Class ID and Keypoint ID components, Rerun uses the [Annotation Context](annotation-context.md) from the nearest ancestor in the hierarchy. * When adding data to [Blueprints](../reference/viewer/blueprint.md), it is common to add a path and all of its descendants. * When using the `log_cleared` API, it is possible to mark an entity and all of its descendants as being cleared. * In the future, it will also be possible to use path-hierarchy to set default-values for descendants. From 9711742edb0ac7fa1cadb621efb09d19700d3ebd Mon Sep 17 00:00:00 2001 From: Andreas Reich Date: Fri, 16 Jun 2023 10:43:15 +0200 Subject: [PATCH 10/10] "spelling" --- docs/content/concepts/annotation-context.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/content/concepts/annotation-context.md b/docs/content/concepts/annotation-context.md index adec5d60c23f..0cad14e64b18 100644 --- a/docs/content/concepts/annotation-context.md +++ b/docs/content/concepts/annotation-context.md @@ -9,7 +9,7 @@ Any visualization that assigns an identifier ("Class ID") to an instance or enti By using an Annotation Context, you can associate labels and colors with a given class and then re-use that class across entities. - + This is particularly useful for visualizing the output of classifications algorithms (as demonstrated by the [Detect and Track Objects](https://github.com/rerun-io/rerun/tree/main/examples/python/detect_and_track_objects) example), but can be used more generally for any kind of reoccurring categorization within a Rerun recording.