From 3ee73c0a3a4ae3e420377545f7aa643e22f0d9bf Mon Sep 17 00:00:00 2001 From: Tritin Truong Date: Fri, 28 Feb 2020 16:39:02 -0500 Subject: [PATCH 1/5] Initial cuboid description --- cvat/apps/documentation/user_guide.md | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/cvat/apps/documentation/user_guide.md b/cvat/apps/documentation/user_guide.md index 594e64c4161..7e0a23a929f 100644 --- a/cvat/apps/documentation/user_guide.md +++ b/cvat/apps/documentation/user_guide.md @@ -28,6 +28,7 @@ - [Annotation with box by 4 points](#annotation-with-box-by-4-points) - [Annotation with polygons](#annotation-with-polygons) - [Annotation with polylines](#annotation-with-polylines) + - [Annotation with cuboids](#annotation-with-cuboids) - [Annotation with points](#annotation-with-points) - [Points in annotation mode](#points-in-annotation-mode) - [Linear interpolation with one point](#linear-interpolation-with-one-point) @@ -1017,6 +1018,39 @@ automatically. You can adjust the polyline after it has been drawn. ![](static/documentation/images/image039.jpg) + +## Annotation with cuboids + +It is used to annotate 3 dimensional objects such as cars, boxes, etc... +Currently the feature supports one point perspective and has the contraint where the vertical edges are exactly parallel to the sides. + +### Creating the cuboid + +Before starting, you have to be sure that ``Cuboid`` is selected. + +Press ``N`` for entering drawing mode. There are many ways to draw a cuboid. You may draw the cuboid by placing 4 points, after which the drawing completes automatically. The first 3 points will represent a plane of the cuboid while the last point represents the depth of that plane. For the first 3 points, it is recomended to only draw the 2 closest side faces, as well as the top and bottom face. + +A few examples: + + +### Editing the cuboid + +The cuboid can be edited in multiple ways, by dragging points or by dragging certain faces. +First notice that there is a face that is painted with pink lines only, let us call it the front face. + +The cuboid can be moved by simply dragging the shape as normal. +The cuboid can be extended by dragging on the point in the middle of the edges. +The cuboid can also be extended up and down by dragging the point at the vertices. + +To draw with perpective effects it is assumed that the front face is the closest to the camera. To begin simply drag the points on the vertices that are not on the pink/front face while holding ``Shift``. The cuboid can then be edited as usual. + +If you wish to reset perspective effects, you may right click on cuboid, and select ``Reset Perspective`` to return to a regular cuboid. + +The location of the pink face can be swapped with the adjacent visible side face. This is done by right clicking on the cuboid and selecting ``Switch Perspective Orientation``. Note that this will also reset the perspective effects. + +Certain faces of the cuboid can also be edited, these faces are the left, right and dorsal faces, relative to the pink face. +Simply drag the faces to move them independently from the rest of the cuboid. + ## Annotation with points ### Points in annotation mode From 55b1d3a0e444c595eeee05aae29a8264b66d453a Mon Sep 17 00:00:00 2001 From: Tritin Truong Date: Fri, 28 Feb 2020 17:31:15 -0500 Subject: [PATCH 2/5] Added Gifs --- .../documentation/images/CuboidDrawing1.gif | Bin 0 -> 716427 bytes .../documentation/images/CuboidDrawing2.gif | Bin 0 -> 720088 bytes .../documentation/images/CuboidDrawing3.gif | Bin 0 -> 1398788 bytes .../documentation/images/CuboidEditing1.gif | Bin 0 -> 1763895 bytes .../documentation/images/CuboidEditing2.gif | Bin 0 -> 1943905 bytes .../images/EditingPerspective.gif | Bin 0 -> 1486047 bytes .../documentation/images/ResetPerspective.gif | Bin 0 -> 954704 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 cvat/apps/documentation/static/documentation/images/CuboidDrawing1.gif create mode 100644 cvat/apps/documentation/static/documentation/images/CuboidDrawing2.gif create mode 100644 cvat/apps/documentation/static/documentation/images/CuboidDrawing3.gif create mode 100644 cvat/apps/documentation/static/documentation/images/CuboidEditing1.gif create mode 100644 cvat/apps/documentation/static/documentation/images/CuboidEditing2.gif create mode 100644 cvat/apps/documentation/static/documentation/images/EditingPerspective.gif create mode 100644 cvat/apps/documentation/static/documentation/images/ResetPerspective.gif diff --git a/cvat/apps/documentation/static/documentation/images/CuboidDrawing1.gif b/cvat/apps/documentation/static/documentation/images/CuboidDrawing1.gif new file mode 100644 index 0000000000000000000000000000000000000000..42b31b06e217a95ae55d277c55d6ffdc06feed74 GIT binary patch literal 716427 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 z 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