pointcloudset

pointcloudset: Efficient Analysis of Large Datasets of Point Clouds Recorded Over Time - Published in JOSS (2021)

https://github.com/virtual-vehicle/pointcloudset

Science Score: 100.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 7 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: joss.theoj.org
  • Committers with academic emails
    1 of 11 committers (9.1%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software

Keywords

4d-point-cloud convert las lidar lidar-point-cloud livox open3d ouster point-cloud pointcloud python riegl ros ros2 rosbag rostopic time-series time-series-analysis velodyne-sensor

Scientific Fields

Artificial Intelligence and Machine Learning Computer Science - 62% confidence
Last synced: 4 months ago · JSON representation ·

Repository

Efficient analysis of large datasets of point clouds recorded over time

Basic Info
Statistics
  • Stars: 50
  • Watchers: 4
  • Forks: 8
  • Open Issues: 15
  • Releases: 9
Topics
4d-point-cloud convert las lidar lidar-point-cloud livox open3d ouster point-cloud pointcloud python riegl ros ros2 rosbag rostopic time-series time-series-analysis velodyne-sensor
Created over 4 years ago · Last pushed 7 months ago
Metadata Files
Readme Changelog License Citation

README.rst

pointcloudset
=========================================

*Analyze large datasets of point clouds recorded over time in an efficient way.*

.. image:: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/tests_docker.yml/badge.svg
   :target: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/tests_docker.yml
   :alt: test status

.. image:: images/coverage.svg
   :target: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/tests.yml
   :alt: test coverage

.. image:: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/doc.yml/badge.svg
   :target: https://virtual-vehicle.github.io/pointcloudset/
    :alt: Documentation Status

.. image:: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/docker.yml/badge.svg
   :target: https://hub.docker.com/repository/docker/tgoelles/pointcloudset
   :alt: Docker

.. image:: https://badge.fury.io/py/pointcloudset.svg
    :target: https://badge.fury.io/py/pointcloudset
    :alt: PyPi badge

.. image:: https://pepy.tech/badge/pointcloudset/month
    :target: https://pepy.tech/project/pointcloudset
    :alt: PyPi badge

.. image:: https://joss.theoj.org/papers/10.21105/joss.03471/status.svg
   :target: https://joss.theoj.org/papers/10.21105/joss.03471#
   :alt: JOSS badge

.. image:: https://img.shields.io/badge/code%20style-ruff-000000.svg
   :target: https://github.com/astral-sh/ruff
   :alt: code style ruff


.. inclusion-marker-do-not-remove

`Code`_ | `Documentation`_

.. _Code: https://github.com/virtual-vehicle/pointcloudset
.. _Documentation: https://virtual-vehicle.github.io/pointcloudset/




Features
################################################
* Handles point clouds over time
* Directly read ROS files and many pointcloud file formats.
* Generate a dataset from multiple pointclouds. For example from thousands of .las files.
* Building complex pipelines with a clean and maintainable code

.. code-block:: python

   newpointcloud = pointcloud.limit("x",-5,5).filter("quantile","reflectivity", ">",0.5)

* Apply arbitrary functions to datasets of point clouds

.. code-block:: python

   def isolate_target(frame: PointCloud) -> PointCloud:
      return frame.limit("x",0,1).limit("y",0,1)

   def diff_to_pointcloud(pointcloud: PointCloud, to_compare: PointCloud) -> PointCloud:
      return pointcloud.diff("pointcloud", to_compare)

   result = dataset.apply(isolate_target).apply(diff_to_pointcloud, to_compare=dataset[0])

* Includes powerful aggregation method *agg* similar to pandas

.. code-block:: python

  dataset.agg(["min","max","mean","std"])

* Support for large files with lazy evaluation and parallel processing

.. image:: https://raw.githubusercontent.com/virtual-vehicle/pointcloudset/master/images/dask.gif
   :width: 600

* Support for numerical data per point (intensity, range, noise …)
* Interactive 3D visualisation

.. image:: https://raw.githubusercontent.com/virtual-vehicle/pointcloudset/master/images/tree.gif
   :width: 600

* High level processing based on dask, pandas, open3D and pyntcloud
* Docker image is available
* Optimised - but not limited to - automotive lidar
* A command line tool to convert ROS 1 & 2 files


Use case examples
################################################

- Post processing and analytics of a lidar dataset recorded by ROS
- A collection of multiple lidar scans from a terrestrial laser scanner
- Comparison of multiple point clouds to a ground truth
- Analytics of point clouds over time
- Developing algorithms on a single frame and then applying them to huge datasets


Installation with pip
################################################

Install python package with pip:

.. code-block:: console

   pip install pointcloudset

Installation with Docker
################################################

The easiest way to get started is to use the pre-build docker `tgoelles/pointcloudset`_.

.. _tgoelles/pointcloudset: https://hub.docker.com/repository/docker/tgoelles/pointcloudset

Quickstart
################################################

Reading ROS1 or ROS2 files:

.. code-block:: python

   import pointcloudset as pcs
   from pathlib import Path
   import urllib.request

   urllib.request.urlretrieve(
      "https://github.com/virtual-vehicle/pointcloudset/raw/master/tests/testdata/test.bag", "test.bag"
   )

   dataset = pcs.Dataset.from_file(Path("test.bag"), topic="/os1_cloud_node/points", keep_zeros=False)
   pointcloud = dataset[1]
   pointcloud.plot("x", hover_data=True)

You can also generate a dataset from multiple pointclouds form a large variety or formats like las, pcd, csv and more.

.. code-block:: python

   import pointcloudset as pcs
   from pathlib import Path
   import urllib.request

   urllib.request.urlretrieve(
      "https://github.com/virtual-vehicle/pointcloudset/raw/master/tests/testdata/las_files/test_tree.las",
      "test_tree.las",
   )
   urllib.request.urlretrieve(
      "https://github.com/virtual-vehicle/pointcloudset/raw/master/tests/testdata/las_files/test_tree.pcd",
      "test_tree.pcd",
   )

   las_pc = pcs.PointCloud.from_file(Path("test_tree.las"))
   pcd_pc = pcs.PointCloud.from_file(Path("test_tree.pcd"))
   dataset = pcs.Dataset.from_instance("pointclouds", [las_pc, pcd_pc])
   pointcloud = dataset[1]

   pointcloud.plot("z", hover_data=True)

* Read the `html documentation`_.
* Have a look at the `tutorial notebooks`_ in the documentation folder
* For even more usage examples you can have a look at the tests

.. _html documentation: https://virtual-vehicle.github.io/pointcloudset/
.. _tutorial notebooks: https://github.com/virtual-vehicle/pointcloudset/tree/master/doc/sphinx/source/tutorial_notebooks




CLI to convert ROS1 and ROS2 files: pointcloudset convert
##########################################################

The package includes a powerful CLI to convert pointclouds in ROS1 & 2 files into formats like pointcloudset and a folder with csv or las.
It is capable of handling both mcap and db3 ROS2 files.

.. code-block:: console

   pointcloudset convert test.bag --output-format las --output-dir converted_las

.. image:: https://raw.githubusercontent.com/virtual-vehicle/pointcloudset/master/images/cli_demo.gif
   :width: 600

You can view PointCloud2 messages with

.. code-block:: console

   pointcloudset topics test.bag

Tipp: If you have uv installed you can simply run:

.. code-block:: console

   uvx pointcloudset --help

Comparison to related packages
################################################

#. `ROS `_ -  bagfiles can contain many point clouds from different sensors.
   The downside of the format is that it is only suitable for serial access and not well suited for data analytics and post processing.
#. `pyntcloud `_ - Only for single point clouds. This package is used as the basis for the
   PointCloud object.
#. `open3d `_ - Only for single point clouds. Excellent package, which is used for some
   methods on the PointCloud.
#. `pdal `_ - Works also with pipelines on point clouds but is mostly focused on single point cloud processing.
   Pointcloudset is purely in python and based on pandas DataFrames. In addition pointcloudset works in parallel to process large datasets.


Citation and contact
################################################

.. |orcid| image:: https://orcid.org/sites/default/files/images/orcid_16x16.png
   :target: https://orcid.org/0000-0002-3925-6260>

|orcid| `Thomas Gölles `_
email: thomas.goelles@v2c2.at

Please cite our `JOSS paper`_ if you use pointcloudset.

.. _JOSS paper: https://joss.theoj.org/papers/10.21105/joss.03471#

.. code-block:: bib

   @article{Goelles2021,
     doi = {10.21105/joss.03471},
     url = {https://doi.org/10.21105/joss.03471},
     year = {2021},
     publisher = {The Open Journal},
     volume = {6},
     number = {65},
     pages = {3471},
     author = {Thomas Goelles and Birgit Schlager and Stefan Muckenhuber and Sarah Haas and Tobias Hammer},
     title = {`pointcloudset`: Efficient Analysis of Large Datasets of Point Clouds Recorded Over Time},
     journal = {Journal of Open Source Software}
   }



Owner

  • Name: Virtual Vehicle
  • Login: virtual-vehicle
  • Kind: organization
  • Location: Inffeldgasse 21a. 8010 Graz, Austria

VIRTUAL VEHICLE Research GmbH

JOSS Publication

pointcloudset: Efficient Analysis of Large Datasets of Point Clouds Recorded Over Time
Published
September 28, 2021
Volume 6, Issue 65, Page 3471
Authors
Thomas Goelles ORCID
Virtual Vehicle Research GmbH, Inffeldgasse 21A, 8010 Graz, Austria
Birgit Schlager ORCID
Virtual Vehicle Research GmbH, Inffeldgasse 21A, 8010 Graz, Austria, Graz University of Technology, Rechbauerstrasse 12, 8010 Graz, Austria
Stefan Muckenhuber ORCID
Virtual Vehicle Research GmbH, Inffeldgasse 21A, 8010 Graz, Austria, University of Graz, Heinrichstrasse 36, 8010 Graz, Austria
Sarah Haas
Virtual Vehicle Research GmbH, Inffeldgasse 21A, 8010 Graz, Austria
Tobias Hammer
Virtual Vehicle Research GmbH, Inffeldgasse 21A, 8010 Graz, Austria
Editor
Hugo Ledoux ORCID
Tags
lidar point cloud ROS

Citation (CITATION.cff)

ff-version: 1.2.0
message: "If you use this software, please cite it as below."
preferred-citation:
  type: article
  authors:
  - family-names: "Goelles"
    given-names: "Thomas"
  - family-names: "Schlager"
    given-names: "Birgit"
  - family-names: "Muckenhuber"
    given-names: "Stefan"
  - family-names: "Haas"
    given-names: "Sarah"
  - family-names: "Hammer"
    given-names: "Tobias"  
  journal: "Journal of Open Source Software"
  volume: 6
  issue: 65
  start: 3471
  end: 3471
  title: "`pointcloudset`: Efficient Analysis of Large Datasets of Point Clouds Recorded Over Time"
  url: "https://doi.org/10.21105/joss.03471"
  doi: "10.21105/joss.03471"
  year: 2021

GitHub Events

Total
  • Create event: 6
  • Release event: 3
  • Issues event: 12
  • Watch event: 7
  • Delete event: 4
  • Issue comment event: 8
  • Push event: 81
  • Pull request event: 7
  • Fork event: 1
Last Year
  • Create event: 6
  • Release event: 3
  • Issues event: 12
  • Watch event: 7
  • Delete event: 4
  • Issue comment event: 8
  • Push event: 81
  • Pull request event: 7
  • Fork event: 1

Committers

Last synced: 5 months ago

All Time
  • Total Commits: 1,531
  • Total Committers: 11
  • Avg Commits per committer: 139.182
  • Development Distribution Score (DDS): 0.295
Past Year
  • Commits: 78
  • Committers: 1
  • Avg Commits per committer: 78.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Thomas Gölles t****s@g****m 1,080
thomasgoelles t****s@v****t 313
Birgit Schlager b****r@v****t 99
github-actions[bot] g****] 8
stefanmuckenhuber s****r@v****t 8
Sarah Haas s****s@v****t 7
tobiashammer t****r@v****t 6
Christoph Gaisberger c****r@u****t 4
tobiashammer h****s@g****e 2
hechth h****t@r****z 2
tobiashammer t****r@v****t 2
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 42
  • Total pull requests: 41
  • Average time to close issues: 5 months
  • Average time to close pull requests: 2 days
  • Total issue authors: 6
  • Total pull request authors: 8
  • Average comments per issue: 1.6
  • Average comments per pull request: 0.32
  • Merged pull requests: 39
  • Bot issues: 0
  • Bot pull requests: 1
Past Year
  • Issues: 6
  • Pull requests: 5
  • Average time to close issues: about 21 hours
  • Average time to close pull requests: about 1 hour
  • Issue authors: 1
  • Pull request authors: 2
  • Average comments per issue: 0.33
  • Average comments per pull request: 0.0
  • Merged pull requests: 4
  • Bot issues: 0
  • Bot pull requests: 1
Top Authors
Issue Authors
  • tgoelles (27)
  • hechth (9)
  • RonaldEnsing (2)
  • mrrevillo0815 (2)
  • dependabot[bot] (1)
  • Grisly00 (1)
  • tobiashammer (1)
Pull Request Authors
  • tgoelles (33)
  • hugoledoux (2)
  • Grisly00 (2)
  • birgitschlager (1)
  • tobiashammer (1)
  • hechth (1)
  • dependabot[bot] (1)
  • danielskatz (1)
Top Labels
Issue Labels
enhancement (9) documentation (4) bug (4) docker (2) TLS (1) wontfix (1) URGENT (1) dependencies (1)
Pull Request Labels
dependencies (1)

Packages

  • Total packages: 2
  • Total downloads:
    • pypi 71 last-month
  • Total dependent packages: 0
    (may contain duplicates)
  • Total dependent repositories: 1
    (may contain duplicates)
  • Total versions: 50
  • Total maintainers: 1
proxy.golang.org: github.com/virtual-vehicle/pointcloudset
  • Versions: 26
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 6.5%
Average: 6.7%
Dependent repos count: 6.9%
Last synced: 4 months ago
pypi.org: pointcloudset

Analyze large datasets of point clouds recorded over time in an efficient way

  • Versions: 24
  • Dependent Packages: 0
  • Dependent Repositories: 1
  • Downloads: 71 Last month
Rankings
Dependent packages count: 10.1%
Stargazers count: 10.5%
Forks count: 13.3%
Average: 14.5%
Downloads: 16.9%
Dependent repos count: 21.5%
Maintainers (1)
Last synced: 4 months ago

Dependencies

.github/workflows/doc.yml actions
  • actions/checkout v2 composite
  • crazy-max/ghaction-github-pages v2 composite
.github/workflows/docker.yml actions
  • actions/checkout v2 composite
  • docker/build-push-action v2 composite
  • docker/login-action v1 composite
  • docker/setup-buildx-action v1 composite
  • docker/setup-qemu-action v1 composite
.github/workflows/publish_on_pypi.yml actions
  • actions/checkout v2 composite
  • pypa/gh-action-pypi-publish release/v1 composite
.github/workflows/tests_docker.yml actions
  • actions/checkout v2 composite
  • ad-m/github-push-action master composite
  • tj-actions/verify-changed-files v6 composite
tests/testdata/kitti_velodyne/kitti_2011_09_26_drive_0002_synced/meta.json cpan
pyproject.toml pypi
  • dask >=2023.11.0
  • fastparquet *
  • ipywidgets *
  • laspy *
  • numpy <2
  • open3d >=0.16.0
  • pandas *
  • plotly *
  • pyntcloud *
  • rich *
  • rosbags >=0.9.15
  • typer *
uv.lock pypi
  • 177 dependencies