You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: doc/source/annotation_tool.rst
+6-2Lines changed: 6 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -49,9 +49,9 @@ Main toolbox
49
49
~~~~~~~~~~~~
50
50
51
51
The main toolbox contains the list of existing control points as well as several controls.
52
-
The basic controls are explained here. Scroll to :ref:`additional-controls` for information on the rest.
52
+
The basic controls are explained here. Scroll to :ref:`advanced-features` for information on the rest.
53
53
54
-
- The 'Load', 'Save' buttons save and load the ground control points into a ``ground_control_points.json`` file with :ref:`json-gcps`.
54
+
- The 'Load', 'Save' buttons save and load the ground control points into a ``ground_control_points.json`` file (see the JSON file format section in the Ground Control Points documentation).
55
55
- If there is a ``ground_control_points.json`` file in the dataset directory, it will be loaded upon launch.
56
56
- Control points can be added or removed with the 'Add GCP' and 'Remove GCP' buttons. The active point can be selected from the dropdown.
57
57
- By selecting a point in the list it becomes active and can be annotated on all images.
@@ -84,6 +84,7 @@ Assuming that you have a set of ground control points whose geodetic coordinates
84
84
You can use ``data/berlin`` for this example.
85
85
2. Generate a ``ground_control_points.json`` file with all your measured ground control points and place it in the root of the dataset
86
86
See the example below. Note how the 'observations' is empty as we will generate those using the annotation tool.
87
+
87
88
::
88
89
89
90
"points": [
@@ -93,6 +94,7 @@ Assuming that you have a set of ground control points whose geodetic coordinates
93
94
"observations": []
94
95
}
95
96
]
97
+
96
98
3. Launch the annotation tool, note how the control points dropdown contains your ground control points.
97
99
4. Scroll through all the images, annotating each GCP on all the locations where it is visible.
98
100
5. Click on 'save' to overwrite the ``ground_control_points.json`` file with your annotations.
@@ -122,6 +124,8 @@ The 'Flex' and 'Full' buttons produce additional analysis results and
122
124
are explained in :ref:`two-reconstruction-annotation`
2. Install the dependencies (we recommend using conda)
16
+
2. Install the dependencies (we recommend using conda)::
16
17
17
18
conda env create --file conda.yml --yes
18
19
conda activate opensfm
19
20
20
-
3. Build OpenSfM
21
+
3. Build OpenSfM::
21
22
22
23
pip install -e .
23
24
@@ -45,7 +46,7 @@ The way to install these dependencies depends on your system. We recommend using
45
46
Installing dependencies using Conda (recommended)
46
47
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
47
48
48
-
Creating a conda environment will take care of installing all dependencies. Make sure you have conda or miniconda installed. From the project root directory, run::
49
+
Creating a conda environment will take care of installing all dependencies. Make sure you have conda or miniconda installed. From the project root directory, run::
49
50
50
51
conda env create --file conda.yml --yes
51
52
@@ -58,19 +59,19 @@ and you are ready to build OpenSfM.
58
59
(Anaconda dependencies installation has been tested under MacOS (Sequoia), Ubuntu 24.04 and Fedora 42.)
59
60
60
61
Installing dependencies on Ubuntu
61
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62
63
63
64
If you are not using conda, see this `Dockerfile.ubuntu24 <https://github.com/mapillary/OpenSfM/blob/main/Dockerfile.ubuntu24>`_ for the commands to install all dependencies on Ubuntu 24.04.
64
65
65
66
66
67
Installing dependencies on MacOSX
67
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
68
69
69
70
While it is possible to install all dependencies using brew, we recommend using the conda instructions above instead.
70
71
71
72
72
73
Installing dependencies on Windows
73
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
74
75
75
76
Install git_.
76
77
@@ -101,23 +102,37 @@ Once the dependencies have been installed, you can build OpenSfM by running the
101
102
102
103
This will first install python dependencies on your current python environment, and then build OpenSfM and install it in editable mode.
103
104
105
+
104
106
Building Docker images
105
107
----------------------
106
108
107
-
You can also use OpenSfM inside docker. We provide example Dockerfiles for Ubuntu 20.04 and 24.04. Build it by running the following command from the main folder::
109
+
You can also use OpenSfM inside docker. We provide example Dockerfiles for Ubuntu 20.04 and 24.04. Build it by running the following command from the main folder::
Copy file name to clipboardExpand all lines: doc/source/gcp.rst
-2Lines changed: 0 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,8 +12,6 @@ In the bundle adjustment step, GCP observations are used as a constraint to refi
12
12
13
13
GPSs can be specified in two file formats. If existing, both are loaded.
14
14
15
-
.. _json-gcps:
16
-
17
15
JSON file format
18
16
~~~~~~~~~~~~~~~~
19
17
GCPs can be specified by adding a text file named ``ground_control_points.json`` at the root folder of the dataset. The format of the file should be as follows::
Copy file name to clipboardExpand all lines: doc/source/rig.rst
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,18 +12,19 @@ Coordinate Systems
12
12
Rig are defined by a fixed assembly of cameras that are triggered at the same instant.
13
13
The following terms define such assembly and capture in OpenSfM terminology :
14
14
15
-
- A `RigCamera` is a camera of the rig assembly defined as a combination of an existing camera model (it refers only to its ID) and its pose wrt. the rig assembly coordinate frame. `RigCamera` are defined in the `rig_cameras.json` as the following::
15
+
- A `RigCamera` is a camera of the rig assembly defined as a combination of an existing camera model (it refers only to its ID) and its pose wrt. the rig assembly coordinate frame. `RigCamera` are defined in the `rig_cameras.json` as the following::
16
16
17
-
{
18
-
"RIG_CAMERA_ID":
19
17
{
20
-
"translation": translation of the rig frame wrt. the RigCamera frame
21
-
"rotation": rotation bringing a point from rig frame to the RigCamera frame
22
-
"camera": camera model ID of this RigCamera
23
-
},
24
-
...
18
+
"RIG_CAMERA_ID":
19
+
{
20
+
"translation": translation of the rig frame wrt. the RigCamera frame
21
+
"rotation": rotation bringing a point from rig frame to the RigCamera frame
22
+
"camera": camera model ID of this RigCamera
23
+
},
24
+
...
25
+
}
25
26
26
-
- A `RigInstance` is a list of `Shots`, each of which correspond to a `RigCamera` of the `RigModel` and the actual pose of the `RigModel` in the world : it's indeed an instantiation of the `RigModel` by combining `Shots`. These instances are defined in the `rig_assignments.json` file as follows::
27
+
- A `RigInstance` is a list of `Shots`, each of which correspond to a `RigCamera` of the `RigModel` and the actual pose of the `RigModel` in the world : it's indeed an instantiation of the `RigModel` by combining `Shots`. These instances are defined in the `rig_assignments.json` file as follows::
27
28
28
29
{
29
30
"RIG_INSTANCE_ID1": {
@@ -57,8 +58,7 @@ The following terms define such assembly and capture in OpenSfM terminology :
Copy file name to clipboardExpand all lines: doc/source/sensor_database.rst
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ Calibration Database
9
9
Overview
10
10
--------
11
11
12
-
In order to produce accurate geometry, structure-from-motion (SfM) needs to have correct estimates of the imaging sensor geometry, such as : lens type (fisheye, perspective, spherical), focal, distorsion, principal point. Please refer to the `Geometric Models`_ section for a comprehensive list of camera internal parameters (calibration).
12
+
In order to produce accurate geometry, structure-from-motion (SfM) needs to have correct estimates of the imaging sensor geometry, such as : lens type (fisheye, perspective, spherical), focal, distorsion, principal point. Please refer to the :doc:`geometry` section for a comprehensive list of camera internal parameters (calibration).
13
13
14
14
While reconstructing the scene (using incremental SfM), OpenSfM will adjust for the camera calibration values that best explain the seen geometry. However, in order to get optimal and failsafe results, it is recommended to have a first good guess of the calibration values. By default, OpenSfM will try to get these values by reading the image EXIFs, where the focal length can be red, and is one of the most important of the calibration values. However, sometimes, EXIFs does not contain such value, or it is erroneous, and/or it is better to have other values than just the focal length.
15
15
@@ -21,18 +21,18 @@ Here comes sensors databases to the rescue. These are files stored under ``opens
21
21
sensor_data_detailed.json
22
22
-------------------------
23
23
24
-
This file contains physical sensor's width and height, in millimeters, for a given ``model make`` sensor (see `extract_metadata`_). It means that if only the focal length is available in the EXIFs, since we also have the sensor physical size, we know the full sensor geometry.
24
+
This file contains physical sensor's width and height, in millimeters, for a given ``model make`` sensor (see ``extract_metadata`` command). It means that if only the focal length is available in the EXIFs, since we also have the sensor physical size, we know the full sensor geometry.
25
25
26
26
27
27
sensor_data.json
28
28
----------------
29
29
30
-
This file contains a multiplicative factor for a given ``model make`` sensor (see `extract_metadata`_). When applied to the EXIFs focal length, this factor gives the focal 35mm equivalent. Since we know the dimensions of 35mm equivalent (24x32 mm), we again know the full sensor geometry.
30
+
This file contains a multiplicative factor for a given ``model make`` sensor (see ``extract_metadata`` command). When applied to the EXIFs focal length, this factor gives the focal 35mm equivalent. Since we know the dimensions of 35mm equivalent (24x32 mm), we again know the full sensor geometry.
31
31
32
32
camera_calibration.json
33
33
------------------------
34
34
35
-
This file contains the full definition (in OpenSfM format) of camera calibrations. Calibration are for a given ``make`` (see `extract_metadata`_), and then, they're further refined :
35
+
This file contains the full definition (in OpenSfM format) of camera calibrations. Calibration are for a given ``make`` (see ``extract_metadata`` command), and then, they're further refined :
36
36
- If ``ALL`` is specified, then the calibration is valid for all ``make model`` camera independant of their ``model`` value
37
37
- If ``MODEL`` is specified, then calibrations are per actual ``model``
38
38
- If ``FOCAL`` is specified, then calibrations are per focal length red from the EXIFs
0 commit comments