Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Point cloud visualization is sparse #68

Open
AlexPasqua opened this issue Mar 21, 2022 · 11 comments
Open

Point cloud visualization is sparse #68

AlexPasqua opened this issue Mar 21, 2022 · 11 comments
Assignees
Labels
question Further information is requested

Comments

@AlexPasqua
Copy link

My point clouds are visualized as they have far less points than they actually have.
I attach 2 pictures: the first shows the visualization I get, while the second shows the correct one.

As a further note, the exemplary pointcloud provided by you is visualized correctly.

I'm running on Ubuntu 20.04.3 LTS and python 3.8.10.
This error happens both when installing labelCloud via pip and when performing a manual installation downloading the github repo.

Screenshot from 2022-03-21 18-27-02
image

@ch-sa
Copy link
Owner

ch-sa commented Mar 24, 2022

Hi @AlexPasqua,

so how did you get the point cloud in the second picture to load correctly?

Which format are you using and can you provide an example point cloud?

Best,
@ch-sa

@AlexPasqua
Copy link
Author

Thanks for the reply @ch-sa ,

so how did you get the point cloud in the second picture to load correctly?

I didn't manage to load the point cloud correctly, but a colleague of mine did, and I took that screenshot while on a video call with him.
Our setups seem identical, same Ubuntu version (20.04.3 LTS), same python version (3.8.10), same versions of the packages in requirements.txt etc.

Which format are you using and can you provide an example point cloud?

My point clouds are in .pcd format.
HERE I provide the point cloud depicted in the screenshots in my first comment.

Hope to receive some news soon,
Best

@ch-sa
Copy link
Owner

ch-sa commented Mar 24, 2022

I loaded your point cloud and it looks like this:
grafik

Is that what you expected? I checked the file and it is a colorless point cloud with 78011 points, which were all loaded by labelCloud:

========================== Loading pointcloud_116.pcd ==========================
Generating colors for colorless point cloud!
Number of Points: 78.011
Point Cloud Center: [-2.76 0.35 0.35]
Point Cloud Minimums: [-96. -18. 0.]
Point Cloud Maximums: [ 57. 195. 25.]
Initial Translation: [ 2.76 -0.35 -263.79]
Successfully loaded point cloud from pointclouds/pointcloud_116.pcd!
================================================================================

If this is what you expected and it is not working like that on your system, it looks like a setup issue. Then please provide the following to help debugging:

  1. Output of pip list or conda list
  2. config.ini from your project folder
  3. .labelCloud.log or copy the content of your terminal when trying to load the point cloud

@ch-sa ch-sa added the question Further information is requested label Mar 24, 2022
@AlexPasqua
Copy link
Author

Is that what you expected?

It's difficult to tell from that point of view, try to load this label (in KITTI format) and zoom to one of the bounding boxes, it the boxes are empty, than it's my same problem. There should be points (specifically in the shape of a cone) within the boxes.

Also, I tried to use a tool called Supervisely, and here the same pointcloud is loaded correctly

Then please provide the following to help debugging:

  1. Output of pip list or conda list
  2. config.ini from your project folder
  3. .labelCloud.log or copy the content of your terminal when trying to load the point cloud
  1. Output of pip list:
Package                 Version
----------------------- --------------------
addict                  2.4.0
anyio                   3.5.0
apturl                  0.5.2
argon2-cffi             21.3.0
argon2-cffi-bindings    21.2.0
asttokens               2.0.5
attrs                   21.4.0
Babel                   2.9.1
backcall                0.2.0
beautifulsoup4          4.10.0
bleach                  4.1.0
blinker                 1.4
Brlapi                  0.7.0
certifi                 2019.11.28
cffi                    1.15.0
chardet                 3.0.4
cheroot                 8.6.0
CherryPy                18.6.1
Click                   7.0
colorama                0.4.3
command-not-found       0.3
cryptography            2.8
cupshelpers             1.0
cycler                  0.11.0
dbus-python             1.2.16
debugpy                 1.5.1
decorator               5.1.1
defer                   1.0.6
defusedxml              0.7.1
deprecation             2.1.0
distro                  1.4.0
distro-info             0.23ubuntu1
entrypoints             0.3
executing               0.8.3
fonttools               4.30.0
httplib2                0.14.0
idna                    2.8
importlib-resources     5.4.0
ipykernel               6.9.2
ipython                 8.1.1
ipython-genutils        0.2.0
ipywidgets              7.7.0
jaraco.classes          3.2.1
jaraco.collections      3.5.1
jaraco.context          4.1.1
jaraco.functools        3.5.0
jaraco.text             3.7.0
jedi                    0.18.1
Jinja2                  3.0.3
joblib                  1.1.0
json5                   0.9.6
jsonschema              4.4.0
jupyter-client          7.1.2
jupyter-core            4.9.2
jupyter-packaging       0.11.1
jupyter-server          1.15.6
jupyterlab              3.3.2
jupyterlab-pygments     0.1.2
jupyterlab-server       2.11.2
jupyterlab-widgets      1.1.0
keyring                 18.0.1
kiwisolver              1.4.0
language-selector       0.1
launchpadlib            1.10.13
lazr.restfulclient      0.14.2
lazr.uri                1.0.3
louis                   3.12.0
macaroonbakery          1.3.1
MarkupSafe              2.1.1
matplotlib              3.5.1
matplotlib-inline       0.1.3
mistune                 0.8.4
more-itertools          8.12.0
nbclassic               0.3.7
nbclient                0.5.13
nbconvert               6.4.4
nbformat                5.2.0
nest-asyncio            1.5.4
netifaces               0.10.4
notebook                6.4.10
notebook-shim           0.1.0
numpy                   1.21.5
oauthlib                3.1.0
olefile                 0.46
open3d                  0.14.1
packaging               21.3
pandas                  1.4.1
pandocfilters           1.5.0
parso                   0.8.3
pexpect                 4.6.0
pickleshare             0.7.5
Pillow                  9.0.1
pip                     22.0.4
portend                 3.1.0
prometheus-client       0.13.1
prompt-toolkit          3.0.28
protobuf                3.6.1
psutil                  5.9.0
ptyprocess              0.7.0
pure-eval               0.2.2
pycairo                 1.16.2
pycparser               2.21
pycups                  1.9.73
Pygments                2.11.2
PyGObject               3.36.0
PyJWT                   1.7.1
pymacaroons             0.13.0
PyNaCl                  1.3.0
PyOpenGL                3.1.6
pyparsing               3.0.7
PyQt5                   5.14.2
PyQt5-Qt5               5.15.2
PyQt5-sip               12.9.1
pyRFC3339               1.1
pyrsistent              0.18.1
python-apt              2.0.0+ubuntu0.20.4.5
python-dateutil         2.8.2
python-debian           0.1.36ubuntu1
pytz                    2021.3
pyxdg                   0.26
PyYAML                  6.0
pyzmq                   22.3.0
reportlab               3.5.34
requests                2.22.0
requests-unixsocket     0.2.0
scikit-learn            1.0.2
scipy                   1.8.0
screen-resolution-extra 0.0.0
SecretStorage           2.3.1
Send2Trash              1.8.0
setuptools              60.10.0
simplejson              3.16.0
six                     1.14.0
sniffio                 1.2.0
soupsieve               2.3.1
stack-data              0.2.0
systemd-python          234
tempora                 5.0.1
terminado               0.13.3
testpath                0.6.0
threadpoolctl           3.1.0
tomlkit                 0.10.0
tornado                 6.1
tqdm                    4.63.0
traitlets               5.1.1
ubuntu-advantage-tools  27.2
ubuntu-drivers-common   0.0.0
ufw                     0.36
unattended-upgrades     0.1
urllib3                 1.25.8
wadllib                 1.3.3
wcwidth                 0.2.5
webencodings            0.5.1
websocket-client        1.3.1
wheel                   0.37.1
widgetsnbextension      3.6.0
xkit                    0.0.0
zc.lockfile             2.0
zipp                    3.7.0
  1. The file config.ini from my lableCloud folder: download here

  2. The file .lableCloud.log from my labelCloud folder: download here

@AlexPasqua
Copy link
Author

@ch-sa
As my colleague @francescofact made me notice, on Windows it works, but only after removing the version of PyQt5 from requirements.txt

@ch-sa
Copy link
Owner

ch-sa commented Apr 2, 2022

Hey @AlexPasqua,

so is the same point cloud looking differently on windows than my screenshot posted above?

(There were some issues with PyQt5 gut Windows, which is why I previously limited the PyQt versions to am older version. But this seems to have been fixed, so I dropped this limitation in the newest release of labelCloud.)

@francescofact
Copy link
Contributor

francescofact commented Apr 2, 2022

Hello @ch-sa
On Windows the point cloud is rendered correctly, while on three different linux machines the same point cloud is rendered as sparse points.

Correct Render on Windows:
image

Sparse Render on Linux:
image

@ch-sa
Copy link
Owner

ch-sa commented Apr 2, 2022

Hey @francescofact,

thanks for the screenshots. That's really odd. Seems like an issue with OpenGl, cause there is no difference in the logic between the operating systems.

Will try to have a look on it tomorrow.

@ch-sa
Copy link
Owner

ch-sa commented Apr 3, 2022

Ciao @AlexPasqua and @francescofact,

after quite some debugging I rooted the problem in the loading of the *.pcd file via Open3D. As you probably noticed the points are located in a grid and this is cause the floats seem to be ignored (rounded) on loading:

Loading point cloud from pointclouds/pointcloud_116.pcd using Open3DHandler.
First point cloud points:
0. [-0. 11. 0.]

  1. [-0. 8. 0.]
  2. [0. 7. 0.]
  3. [-0. 8. 0.]
  4. [-0. 7. 0.]

(In reality the first point is located at -0.20108423 11.055668 0.56653374!)

So what I did was converting your *.pcd point cloud into a *.ply file:

import open3d as o3d
pcd = o3d.io.read_point_cloud("pointclouds/pointcloud_116.pcd")
o3d.io.write_point_cloud("pointclouds/pointcloud_116.ply", pcd)

... and this could be loaded and displayed correctly inside labelCloud:
labelCloud_with_ply

Loading point cloud from pointclouds/pointcloud_116.pcd using Open3DHandler.
First point cloud points:
0. [-0. 11. 0.]

  1. [-0. 8. 0.]
  2. [0. 7. 0.]
  3. [-0. 8. 0.]
  4. [-0. 7. 0.]
    ============================================= Loading pointcloud_116.pcd =============================================
    Successfully loaded point cloud from pointclouds/pointcloud_116.pcd!
    Number of Points: 78011
    Number of Colors: None
    Point Cloud Center: [-2.76 0.35 0.35]
    Point Cloud Minimums: [-96. -18. 0.]
    Point Cloud Maximums: [ 57. 195. 25.]
    Initial Translation: [ 2.76 -0.35 -263.79]
    ======================================================================================================================
    There is currently no active bounding box to manipulate.
    There is currently no active bounding box to manipulate.
    Alignmode was changed to False!
    Imported 0 labels from labels/pointcloud_116.json.
    Loaded 0 bboxes!
    There is currently no active bounding box to manipulate.
    Intialized widget.
    Resized widget.
    Showing GUI...
    File labels/pointcloud_116.json already exists, replacing file ...
    Exported 0 labels to labels/pointcloud_116.json in CentroidFormat formatting!
    Loading next point cloud...
    Loading point cloud from pointclouds/pointcloud_116.ply using Open3DHandler.
    First point cloud points:
  5. [-0.20108423 11.055668 0.56653374]
  6. [-0.14641869 8.0501413 0.27004918]
  7. [0.42134565 7.7175632 0.21332707]
  8. [-0.76665801 8.4111414 0.18340768]
  9. [-0.14466441 7.9536901 0.12580046]
    ============================================= Loading pointcloud_116.ply =============================================
    Successfully loaded point cloud from pointclouds/pointcloud_116.ply!
    Number of Points: 78011
    Number of Colors: None
    Point Cloud Center: [-3.03 0.33 0.35]
    Point Cloud Minimums: [-96.05 -18.34 -0.34]
    Point Cloud Maximums: [ 57.49 195.42 25.65]
    Initial Translation: [ 3.03 -0.33 -264.82]

I would say this is a bug of Open3D but when running in interactive Python the same code as in labelCloud it suddenly works:

>>> import open3d as o3d
>>> o3d.__version__
'0.15.2'
>>> pcd = o3d.io.read_point_cloud("pointclouds/pointcloud_116.pcd")
>>> pcd.points[0]
array([-0.20108423, 11.055668  ,  0.56653374])

You can bypass this problem in shorthand by converting your point clouds into a different file format (like shown above). I will look into the issue with *.pcd files but am a bit clueless atm. due the same code producing different results depending if is used inside labelCloud or ipython.

@ch-sa
Copy link
Owner

ch-sa commented Apr 3, 2022

FYI: @francescofact , @AlexPasqua

This issue seems only to happen after initializing a QApplication:

import sys

from PyQt5.QtWidgets import QApplication

import open3d as o3d

QApplication(sys.argv)

pcd = o3d.io.read_point_cloud("pointcloud_116.pcd")
print(f"First point: {pcd.points[0]}")  # prints "First point: [-0. 11.  0.]"

I opened a bug ticket in Open3D for this:
isl-org/Open3D#4969

You can follow the progress there and until then maybe use a different format.

@AlexPasqua
Copy link
Author

Thanks for the support @ch-sa 😃

ch-sa added a commit that referenced this issue Jun 16, 2022
 - add warning when loading *.pcd point clouds

Relates: #68 #80
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

3 participants