Skip to content
Merged
Show file tree
Hide file tree
Changes from 33 commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
07b0fe1
Adding O2D training specification (#112)
lioum Mar 17, 2025
7649d4b
Add training S3D specification (#139)
lioum May 12, 2025
ecd12ef
Add support for Computing Buckets (#143)
cnovel May 15, 2025
3f2173c
Correct Training specifications
cnovel Nov 21, 2025
3d00992
Better description
cnovel Nov 21, 2025
5687a0c
Add alias for version_name field of TrainingS3DSpecifications (#247)
lioum Dec 8, 2025
b276e3c
Implemented detector handler
lioum Jan 26, 2026
729d855
Fixed tests
lioum Feb 18, 2026
9fbb701
Updated TrainingS3D example
lioum Feb 18, 2026
501ce9f
Remove CRS outputs and segmented as in S3D Specifications (#289)
EHS-BENTLEY-SYSTEMS May 11, 2026
226a924
Added PointTransformerV3 to S3D Training models
pierre-seguin-bentley May 19, 2026
819fbbd
Accidentaly removed a line in last commit
pierre-seguin-bentley May 19, 2026
93ad67f
Merge branch 'feature/2.3.0' into feature/AnalyseV2
pierre-seguin-bentley Jun 4, 2026
95dfbc4
Tmp/ehs/update cd (#299)
EHS-BENTLEY-SYSTEMS Jun 10, 2026
27a25de
Updated training specs for release
pierre-seguin-bentley Jun 15, 2026
adc09fb
Updated training specs python examples
pierre-seguin-bentley Jun 15, 2026
52caf91
Updated training specs examples again
pierre-seguin-bentley Jun 15, 2026
0dd5b4b
Fixed bad named / alias for samplingResolution option of CD
pierre-seguin-bentley Jun 15, 2026
8c5cad2
CD and Clearance parameters fixes
RenaudKeriven Jun 16, 2026
5fe0d24
Oops
RenaudKeriven Jun 16, 2026
ddc5c4f
Analysis job specifs
RenaudKeriven Jun 22, 2026
d464d72
CD locations
RenaudKeriven Jun 22, 2026
c5842ef
CD fix
RenaudKeriven Jun 23, 2026
f0e3b95
Merge main in feature/AnalysisV2 and fix conflicts
dbiguenet Jul 7, 2026
bbc2d24
Potential fix for pull request finding
dbiguenet Jul 7, 2026
6e501df
Potential fix for pull request finding
dbiguenet Jul 7, 2026
3b6d16a
Remove orig files
dbiguenet Jul 7, 2026
9548392
Merge remote-tracking branch 'origin/feature/AnalyseV2' into AnalysisV2
dbiguenet Jul 7, 2026
95598e9
Fix data_handler.py
dbiguenet Jul 7, 2026
688011d
Potential fix for pull request finding
dbiguenet Jul 7, 2026
11497c0
Remove crs from s3d doc
dbiguenet Jul 7, 2026
102f631
Fix data_handler.py
dbiguenet Jul 7, 2026
41f11ad
Merge remote-tracking branch 'origin/feature/AnalyseV2' into AnalysisV2
dbiguenet Jul 7, 2026
c97590e
Fix change detection tests
dbiguenet Jul 7, 2026
aceb2fe
Fix change detection tests
dbiguenet Jul 7, 2026
ba16bdc
Fix typescript change detection example
dbiguenet Jul 7, 2026
c0c9842
Fix misspelled TrainingS3D in job.ts
dbiguenet Jul 7, 2026
23ba1ee
Potential fix for pull request finding
dbiguenet Jul 7, 2026
168389f
Potential fix for pull request finding
dbiguenet Jul 7, 2026
b7edf70
Potential fix for pull request finding
dbiguenet Jul 7, 2026
9fe5409
Fix preset in change detection. Will be released later.
dbiguenet Jul 7, 2026
12f1278
Merge remote-tracking branch 'origin/feature/AnalyseV2' into AnalysisV2
dbiguenet Jul 7, 2026
50b704f
Potential fix for pull request finding
dbiguenet Jul 7, 2026
358b075
Fix typescript change detection
dbiguenet Jul 7, 2026
379cb39
Potential fix for pull request finding
dbiguenet Jul 7, 2026
2a80cf5
Fix python job.py tests
dbiguenet Jul 7, 2026
f99869a
Merge remote-tracking branch 'origin/feature/AnalyseV2' into AnalysisV2
dbiguenet Jul 7, 2026
294b501
Remove clearance
dbiguenet Jul 7, 2026
9a37d86
Try to fix tests error
dbiguenet Jul 7, 2026
eb2ec81
Fix another issue in change detection tests
dbiguenet Jul 7, 2026
df4d187
Removed detector data handler (#315)
lioum Jul 8, 2026
0bdf6df
Remove unused properties
cnovel Jul 9, 2026
a1e7d97
Fix doc
cnovel Jul 9, 2026
01ad1ca
Remove bad option from TS
cnovel Jul 9, 2026
5d47b2e
Enable preset in CD
cnovel Jul 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import reality_capture.specifications.change_detection as change_detection

cd_inputs = change_detection.ChangeDetectionInputs(model3dA="279db84b-090f-4922-b9a5-7a4fd0a71fcd",
model3dB="40af080d-7ata-48c8-974c-610820fe90f2")
cd_outputs = [change_detection.ChangeDetectionOutputsCreate.OBJECTS3D]
cd_inputs = change_detection.ChangeDetectionInputs(model3DA="279db84b-090f-4922-b9a5-7a4fd0a71fcd",
model3DB="40af080d-7ata-48c8-974c-610820fe90f2")
cd_outputs = [change_detection.ChangeDetectionOutputsCreate.LOCATIONS3D_AS_GEOJSON]
Comment thread
Copilot marked this conversation as resolved.
Outdated
cd_options = change_detection.ChangeDetectionOptions()
Comment thread
Copilot marked this conversation as resolved.
cds = change_detection.ChangeDetectionSpecificationsCreate(inputs=cd_inputs, outputs=cd_outputs, options=cd_options)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import reality_capture.specifications.clearance as clearance

clearance_inputs = clearance.ClearanceInputs(model3d="084985b0-71b5-4b02-a788-db261dd0730c",
clearance_inputs = clearance.ClearanceInputs(model3D="084985b0-71b5-4b02-a788-db261dd0730c",
clearanceFootprint="635f801b-82cc-4477-8d59-f01eb2fea1d9")
clearance_outputs = [clearance.ClearanceOutputsCreate.OVF_AREAS, clearance.ClearanceOutputsCreate.OVF_LINES]
clearance_specs = clearance.ClearanceSpecificationsCreate(inputs=clearance_inputs, outputs=clearance_outputs)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

eval_s3d_inputs = eval_s3d.EvalS3DInputs(reference="587a14fd-305a-474c-b037-26d4ee8829d9",
prediction="08342927-859c-4563-a4b8-6c6cfb7d5bb3")
eval_s3d_outputs = [eval_s3d.EvalS3DOutputsCreate.SEGMENTATION3D, eval_s3d.EvalS3DOutputsCreate.SEGMENTED_POINT_CLOUD,
eval_s3d_outputs = [eval_s3d.EvalS3DOutputsCreate.SEGMENTATION3D, eval_s3d.EvalS3DOutputsCreate.SEGMENTED_MODEL_3D,
eval_s3d.EvalS3DOutputsCreate.REPORT]
eval_s3ds = eval_s3d.EvalS3DSpecificationsCreate(inputs=eval_s3d_inputs, outputs=eval_s3d_outputs)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
s3d_inputs = segmentation3d.Segmentation3DInputs(meshes="401975b7-0c0a-4498-5896-84987921f4bb",
pointCloudSegmentationDetector="08342927-859c-4563-a4b8-6c6cfb7d5bb3")
s3d_outputs = [segmentation3d.Segmentation3DOutputsCreate.SEGMENTATION3D,
segmentation3d.Segmentation3DOutputsCreate.SEGMENTED_POINT_CLOUD]
segmentation3d.Segmentation3DOutputsCreate.SEGMENTED_MODEL_3D]
s3d_options = segmentation3d.Segmentation3DOptions()
s3ds = segmentation3d.Segmentation3DSpecificationsCreate(inputs=s3d_inputs, outputs=s3d_outputs, options=s3d_options)
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
s3d_inputs = segmentation3d.Segmentation3DInputs(pointClouds="401975b7-0c0a-4498-5896-84987921f4bb",
pointCloudSegmentationDetector="08342927-859c-4563-a4b8-6c6cfb7d5bb3")
s3d_outputs = [segmentation3d.Segmentation3DOutputsCreate.SEGMENTATION3D,
segmentation3d.Segmentation3DOutputsCreate.SEGMENTED_POINT_CLOUD]
segmentation3d.Segmentation3DOutputsCreate.SEGMENTED_MODEL_3D]
s3d_options = segmentation3d.Segmentation3DOptions()
s3ds = segmentation3d.Segmentation3DSpecificationsCreate(inputs=s3d_inputs, outputs=s3d_outputs, options=s3d_options)
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
s3d_inputs = segmentation3d.Segmentation3DInputs(meshes="401975b7-0c0a-4498-5896-84987921f4bb",
pointCloudSegmentationDetector="08342927-859c-4563-a4b8-6c6cfb7d5bb3")
s3d_outputs = [segmentation3d.Segmentation3DOutputsCreate.SEGMENTATION3D,
segmentation3d.Segmentation3DOutputsCreate.SEGMENTED_POINT_CLOUD,
segmentation3d.Segmentation3DOutputsCreate.SEGMENTED_MODEL_3D,
segmentation3d.Segmentation3DOutputsCreate.LINES3D]
s3d_options = segmentation3d.Segmentation3DOptions()
s3ds = segmentation3d.Segmentation3DSpecificationsCreate(inputs=s3d_inputs, outputs=s3d_outputs, options=s3d_options)
14 changes: 14 additions & 0 deletions python_sdk/docs/specifications/examples/training_s3d_default.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import reality_capture.specifications.training as training

training_s3d_inputs = training.TrainingS3DInputs(
segmentations3D=["401975b7-0c0a-4498-5896-84987921f4bb"],
detectorName="example-detector",
)

training_s3d_outputs = [
training.TrainingS3DOutputsCreate.DETECTOR,
]

training_s3ds = training.TrainingS3DSpecificationsCreate(
inputs=training_s3d_inputs, outputs=training_s3d_outputs
)
22 changes: 22 additions & 0 deletions python_sdk/docs/specifications/examples/training_s3d_options.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import reality_capture.specifications.training as training

training_s3d_inputs = training.TrainingS3DInputs(
segmentations3D=["401975b7-0c0a-4498-5896-84987921f4bb"],
detectorName="example-detector",
)

training_s3d_outputs = [
training.TrainingS3DOutputsCreate.DETECTOR,
]

training_s3d_options = training.TrainingS3DOptions(
epochs=2,
spacing=0.2,
model=training.Segmentation3DTrainingModel.SPLATNET,
features=[training.PointCloudFeature.RGB, training.PointCloudFeature.INTENSITY],
versionNumber="1.0",
)

training_s3ds = training.TrainingS3DSpecificationsCreate(
inputs=training_s3d_inputs, outputs=training_s3d_outputs, options=training_s3d_options
)
3 changes: 3 additions & 0 deletions python_sdk/docs/specifications/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ Specifications regroup all the settings used to create jobs with our APIs.
eval_s3d
eval_sortho
clearance
training_s3d


Modeling
Expand All @@ -60,12 +61,14 @@ Analysis
* :doc:`/specifications/change_detection` will take two point clouds or two meshes to to get 3D regions that capture the changes.
* :doc:`/specifications/eval_o2d`, :doc:`/specifications/eval_o3d`, :doc:`/specifications/eval_s2d`, :doc:`/specifications/eval_s3d` and :doc:`/specifications/eval_sortho` will compare a prediction to a reference for a specific detection.
* :doc:`/specifications/clearance` uses a 3D model and a footprint to compute clearance information.
* :doc:`/specifications/training_s3d` will train an s3d detector from ContextScenes
Comment thread
cnovel marked this conversation as resolved.
Outdated

.. Conversion
.. ==========

.. * :doc:`/specifications/point_cloud_conversion` will convert point clouds from one format to another.


Utilities
=========

Expand Down
4 changes: 1 addition & 3 deletions python_sdk/docs/specifications/objects2d.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Objects 2D

The *Objects 2D* job uses a photo object detector to detect 2D objects in photos. This job produces a context scene annotated with 2D objects.
If the context scene input is oriented, it can turn these 2D objects into 3D objects and produce a context scene annotated with 3D objects.
Optionally, these 3D objects that can be exported in another formats, such as 3D Tiles, DGN, SHP, or GeoJSON.
Optionally, these 3D objects that can be exported in another formats, such as 3D Tiles, SHP, or GeoJSON.

.. contents:: Quick access
:local:
Expand Down Expand Up @@ -36,7 +36,6 @@ This job has three different purposes :
| *meshes* (optional)
- | *objects2d*,
| *objects3d*,
| *objects3d_as_dgn* (optional),
| *objects3d_as_3d_tiles* (optional),
| *objects3d_as_geojson* (optional),
| *locations3d_as_shp* (optional),
Expand All @@ -52,7 +51,6 @@ This job has three different purposes :
| *point_clouds* (optional),
| *meshes* (optional)
- | *objects3d*,
| *objects3d_as_dgn* (optional),
| *objects3d_as_3d_tiles* (optional),
| *objects3d_as_geojson* (optional),
| *locations3d_as_shp* (optional),
Expand Down
6 changes: 1 addition & 5 deletions python_sdk/docs/specifications/segmentation2d.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Segmentation 2D
===============

The Segmentation 2D job uses a photo segmentation detector to classify pixels in photos. If photos are oriented, it can project the segmentation on meshes or point clouds, and detect 3D lines and 3D polygons. This job produces segmented photos and a context scene pointing to these photos. Optionally, it can also produce context scenes annotated with 3D polygons and 3D lines. Those can be exported in another formats, such as 3D Tiles, DGN, or GeoJSON.
The Segmentation 2D job uses a photo segmentation detector to classify pixels in photos. If photos are oriented, it can project the segmentation on meshes or point clouds, and detect 3D lines and 3D polygons. This job produces segmented photos and a context scene pointing to these photos. Optionally, it can also produce context scenes annotated with 3D polygons and 3D lines. Those can be exported in another formats, such as 3D Tiles, or GeoJSON.

.. contents:: Quick access
:local:
Expand Down Expand Up @@ -38,11 +38,9 @@ This job has three different purposes :
- | *segmentation2d*,
| *segmented_photos*,
| *lines3d* (optional),
| *lines3d_as_dgn* (optional),
| *lines3d_as_3d_tiles* (optional),
| *lines3d_as_geojson* (optional),
| *polygons3d* (optional),
| *polygons3d_as_dgn* (optional),
| *polygons3d_as_3d_tiles* (optional),
| *polygons3d_as_geojson* (optional)
- | *min_photos*,
Expand All @@ -58,11 +56,9 @@ This job has three different purposes :
| *segmentation2d*,
| *point_clouds*/*meshes*
- | *lines3d* (optional),
| *lines3d_as_dgn* (optional),
| *lines3d_as_3d_tiles* (optional),
| *lines3d_as_geojson* (optional),
| *polygons3d* (optional),
| *polygons3d_as_dgn* (optional),
| *polygons3d_as_3d_tiles* (optional),
| *polygons3d_as_geojson* (optional)
- | *min_photos*,
Expand Down
34 changes: 5 additions & 29 deletions python_sdk/docs/specifications/segmentation3d.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Segmentation 3D
===============

The Segmentation 3D job uses a point cloud segmentation detector to classify each point of a point cloud. It produces a segmented point cloud (in OPC format) and a context scene pointing to this point cloud. The segmented point cloud can be exported as LAS, LAZ, POD or PLY. Optionally, it can also produce context scenes annotated with 3D objects, 3D polygons and/or 3D lines. Those can be exported in another format, such as 3D Tiles, SHP, DGN, or GeoJSON.
The Segmentation 3D job uses a point cloud segmentation detector to classify each point of a point cloud. It produces a segmented point cloud (in OPC format) and a context scene pointing to this point cloud. Optionally, it can also produce context scenes annotated with 3D objects, 3D polygons and/or 3D lines. Those can be exported in another format, such as 3D Tiles, SHP, or GeoJSON.

.. contents:: Quick access
:local:
Expand All @@ -27,26 +27,16 @@ This job has four different purposes :
| *point_cloud_segmentation_detector*,
| *clip_polygon* (optional)
- | *segmentation3d*,
| *segmented_point_cloud*,
| *segmentation3d_as_las* (optional),
| *segmentation3d_as_laz* (optional),
| *segmentation3d_as_pod* (optional),
| *segmentation3d_as_ply* (optional)
| *segmented_model_3d*
- | *save_confidence*,
| *crs*
* - | Segment a collection
| of meshes
- | *meshes*,
| *point_cloud_segmentation_detector*,
| *clip_polygon* (optional)
- | *segmentation3d*,
| *segmented_point_cloud*,
| *segmentation3d_as_las* (optional),
| *segmentation3d_as_laz* (optional),
| *segmentation3d_as_pod* (optional),
| *segmentation3d_as_ply* (optional)
| *segmented_model_3d*
- | *save_confidence*,
| *crs*
* - | Segment a collection
| of point clouds or meshes
| and infer 3D objects,
Expand All @@ -55,23 +45,16 @@ This job has four different purposes :
| *point_cloud_segmentation_detector*,
| *clip_polygon* (optional)
- | *segmentation3d*,
| *segmented_point_cloud*,
| *segmentation3d_as_las* (optional),
| *segmentation3d_as_laz* (optional),
| *segmentation3d_as_pod* (optional),
| *segmentation3d_as_ply* (optional),
| *segmented_model_3d*,
| *objects3d* (optional),
| *objects3d_as_dgn* (optional),
| *objects3d_as_3d_tiles* (optional),
| *objects3d_as_geojson* (optional),
| *locations3d_as_shp* (optional),
| *locations3d_as_geojson* (optional),
| *lines3d* (optional),
| *lines3d_as_dgn* (optional),
| *lines3d_as_3d_tiles* (optional),
| *lines3d_as_geojson* (optional),
| *polygons3d* (optional),
| *polygons3d_as_dgn* (optional),
| *polygons3d_as_3d_tiles* (optional),
| *polygons3d_as_geojson* (optional)
- | *remove_small_components*,
Expand All @@ -83,22 +66,15 @@ This job has four different purposes :
| lines and 3D polygons
- | *segmentation3d*,
| *clip_polygon* (optional)
- | *segmentation3d_as_las* (optional),
| *segmentation3d_as_laz* (optional),
| *segmentation3d_as_pod* (optional),
| *segmentation3d_as_ply* (optional),
| *objects3d* (optional),
| *objects3d_as_dgn* (optional),
- | *objects3d* (optional),
| *objects3d_as_3d_tiles* (optional),
| *objects3d_as_geojson* (optional),
| *locations3d_as_shp* (optional),
| *locations3d_as_geojson* (optional),
| *lines3d* (optional),
| *lines3d_as_dgn* (optional),
| *lines3d_as_3d_tiles* (optional),
| *lines3d_as_geojson* (optional),
| *polygons3d* (optional),
| *polygons3d_as_dgn* (optional),
| *polygons3d_as_3d_tiles* (optional),
| *polygons3d_as_geojson* (optional)
- | *remove_small_components*,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Segmentation Orthophoto
=======================

The Segmentation Orthophoto job uses an orthophoto segmentation detector to classify pixels in orthophotos. It produces segmented orthophotos and a context pointing to these orthophotos. Depending on the detector, it can detect 2D lines and 2D polygons. Optionally, these 2D lines and 2D polygons can be exported as SHP, DGN or GeoJSON files.
The Segmentation Orthophoto job uses an orthophoto segmentation detector to classify pixels in orthophotos. It produces segmented orthophotos and a context pointing to these orthophotos. Depending on the detector, it can detect 2D lines and 2D polygons. Optionally, these 2D lines and 2D polygons can be exported as SHP or GeoJSON files.

.. contents:: Quick access
:local:
Expand All @@ -28,7 +28,6 @@ Purposes
| *polygons2d_as_shp* (optional),
| *polygons2d_as_geojson* (optional),
| *lines2d* (optional),
| *lines2d_as_dgn* (optional),
| *lines2d_as_shp* (optional),
| *lines2d_as_geojson* (optional)
- |
Expand Down
61 changes: 61 additions & 0 deletions python_sdk/docs/specifications/training_s3d.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
============
Training S3D
============

The *Training S3D* job uses a ContextScene containing annotated pointclouds to train a new S3D detector.

.. contents:: Quick access
:local:
:depth: 2

Purpose
=======

This job has the following purposes:


.. list-table::
:widths: auto
:header-rows: 1

* - Purpose
- Inputs
- Possible outputs
- Useful options
* - Train new detector on a dataset (ContextScene)
- | *scene*,
- | *detector*,
- | *epochs*
| *max_train_split*
Comment thread
dbiguenet marked this conversation as resolved.
Outdated

Comment thread
Copilot marked this conversation as resolved.
Outdated

Examples
========

In this example, we will create a specification for submitting a Training S3D job to produce a new S3D detector from a ContextScene.

.. literalinclude:: examples/training_s3d_new_default.py
:language: Python
Comment thread
Copilot marked this conversation as resolved.
Comment thread
dbiguenet marked this conversation as resolved.

Classes
=======

.. currentmodule:: reality_capture.specifications.training

.. autopydantic_model:: TrainingS3DSpecificationsCreate

.. autoclass:: TrainingS3DOutputsCreate
:show-inheritance:
:members:
:undoc-members:

.. autopydantic_model:: TrainingS3DSpecifications

.. autopydantic_model:: TrainingS3DInputs
:model-show-json: False

.. autopydantic_model:: TrainingS3DOutputs
:model-show-json: False

.. autopydantic_model:: TrainingS3DOptions
:model-show-json: False
Loading
Loading