{"id":13442819,"url":"https://github.com/virtual-vehicle/pointcloudset","last_synced_at":"2025-05-12T09:57:13.099Z","repository":{"id":37705517,"uuid":"374983317","full_name":"virtual-vehicle/pointcloudset","owner":"virtual-vehicle","description":"Efficient analysis of large datasets of point clouds recorded over time","archived":false,"fork":false,"pushed_at":"2025-04-28T14:53:38.000Z","size":99932,"stargazers_count":48,"open_issues_count":14,"forks_count":8,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-05-03T04:38:23.384Z","etag":null,"topics":["3d","4d","4d-point-cloud","convert","lidar","lidar-point-cloud","livox","open3d","ouster","point-cloud","pointcloud","python","riegl","ros","ros2","rosbag","rostopic","time-series","time-series-analysis","velodyne-sensor"],"latest_commit_sha":null,"homepage":"https://virtual-vehicle.github.io/pointcloudset/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/virtual-vehicle.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.rst","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-06-08T11:24:54.000Z","updated_at":"2025-04-29T09:13:03.000Z","dependencies_parsed_at":"2025-04-13T19:51:16.520Z","dependency_job_id":null,"html_url":"https://github.com/virtual-vehicle/pointcloudset","commit_stats":{"total_commits":1453,"total_committers":11,"mean_commits":132.0909090909091,"dds":0.3103922918100481,"last_synced_commit":"cfb895b9113e750a8ff7c6d179188f423772a7de"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtual-vehicle%2Fpointcloudset","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtual-vehicle%2Fpointcloudset/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtual-vehicle%2Fpointcloudset/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/virtual-vehicle%2Fpointcloudset/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/virtual-vehicle","download_url":"https://codeload.github.com/virtual-vehicle/pointcloudset/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253712613,"owners_count":21951779,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","4d","4d-point-cloud","convert","lidar","lidar-point-cloud","livox","open3d","ouster","point-cloud","pointcloud","python","riegl","ros","ros2","rosbag","rostopic","time-series","time-series-analysis","velodyne-sensor"],"created_at":"2024-07-31T03:01:51.643Z","updated_at":"2025-05-12T09:57:13.092Z","avatar_url":"https://github.com/virtual-vehicle.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"pointcloudset\n=========================================\n\n*Analyze large datasets of point clouds recorded over time in an efficient way.*\n\n.. image:: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/tests_docker.yml/badge.svg\n   :target: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/tests_docker.yml\n   :alt: test status\n\n.. image:: images/coverage.svg\n   :target: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/tests.yml\n   :alt: test coverage\n\n.. image:: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/doc.yml/badge.svg\n   :target: https://virtual-vehicle.github.io/pointcloudset/\n    :alt: Documentation Status\n\n.. image:: https://github.com/virtual-vehicle/pointcloudset/actions/workflows/docker.yml/badge.svg\n   :target: https://hub.docker.com/repository/docker/tgoelles/pointcloudset\n   :alt: Docker\n\n.. image:: https://badge.fury.io/py/pointcloudset.svg\n    :target: https://badge.fury.io/py/pointcloudset\n    :alt: PyPi badge\n\n.. image:: https://pepy.tech/badge/pointcloudset/month\n    :target: https://pepy.tech/project/pointcloudset\n    :alt: PyPi badge\n\n.. image:: https://joss.theoj.org/papers/10.21105/joss.03471/status.svg\n   :target: https://joss.theoj.org/papers/10.21105/joss.03471#\n   :alt: JOSS badge\n\n.. image:: https://img.shields.io/badge/code%20style-ruff-000000.svg\n   :target: https://github.com/astral-sh/ruff\n   :alt: code style ruff\n\n\n.. inclusion-marker-do-not-remove\n\n`Code`_ | `Documentation`_\n\n.. _Code: https://github.com/virtual-vehicle/pointcloudset\n.. _Documentation: https://virtual-vehicle.github.io/pointcloudset/\n\n\n\n\nFeatures\n################################################\n* Handles point clouds over time\n* Building complex pipelines with a clean and maintainable code\n\n.. code-block:: python\n\n   newpointcloud = pointcloud.limit(\"x\",-5,5).filter(\"quantile\",\"reflectivity\", \"\u003e\",0.5)\n\n* Apply arbitrary functions to datasets of point clouds\n\n.. code-block:: python\n\n   def isolate_target(frame: PointCloud) -\u003e PointCloud:\n      return frame.limit(\"x\",0,1).limit(\"y\",0,1)\n\n   def diff_to_pointcloud(pointcloud: PointCloud, to_compare: PointCloud) -\u003e PointCloud:\n      return pointcloud.diff(\"pointcloud\", to_compare)\n\n   result = dataset.apply(isolate_target).apply(diff_to_pointcloud, to_compare=dataset[0])\n\n* Includes powerful aggregation method *agg* similar to pandas\n\n.. code-block:: python\n\n  dataset.agg([\"min\",\"max\",\"mean\",\"std\"])\n\n* Support for large files with lazy evaluation and parallel processing\n\n.. image:: https://raw.githubusercontent.com/virtual-vehicle/pointcloudset/master/images/dask.gif\n   :width: 600\n\n* Support for numerical data per point (intensity, range, noise …)\n* Interactive 3D visualisation\n\n.. image:: https://raw.githubusercontent.com/virtual-vehicle/pointcloudset/master/images/tree.gif\n   :width: 600\n\n* High level processing based on dask, pandas, open3D and pyntcloud\n* Docker image is available\n* Optimised - but not limited to - automotive lidar\n* Directly read ROS files and many pointcloud file formats\n* A command line tool to convert ROS 1 \u0026 2 files\n\n\nUse case examples\n################################################\n\n- Post processing and analytics of a lidar dataset recorded by ROS\n- A collection of multiple lidar scans from a terrestrial laser scanner\n- Comparison of multiple point clouds to a ground truth\n- Analytics of point clouds over time\n- Developing algorithms on a single frame and then applying them to huge datasets\n\n\nInstallation with pip\n################################################\n\nInstall python package with pip:\n\n.. code-block:: console\n\n   pip install pointcloudset\n\nInstallation with Docker\n################################################\n\nThe easiest way to get started is to use the pre-build docker `tgoelles/pointcloudset`_.\n\n.. _tgoelles/pointcloudset: https://hub.docker.com/repository/docker/tgoelles/pointcloudset\n\nQuickstart\n################################################\n\n.. code-block:: python\n\n   from pointcloudset import Dataset, PointCloud\n   from pathlib import Path\n   import urllib.request\n\n   urllib.request.urlretrieve(\"https://github.com/virtual-vehicle/pointcloudset/raw/master/tests/testdata/test.bag\", \"test.bag\")\n   urllib.request.urlretrieve(\"https://github.com/virtual-vehicle/pointcloudset/raw/master/tests/testdata/las_files/test_tree.las\", \"test_tree.las\")\n\n   dataset = Dataset.from_file(Path(\"test.bag\"), topic=\"/os1_cloud_node/points\", keep_zeros=False)\n   pointcloud = dataset[1]\n   tree = PointCloud.from_file(Path(\"test_tree.las\"))\n\n   tree.plot(\"x\", hover_data=True)\n\nThis produces the plot from the animation above.\n\n* Read the `html documentation`_.\n* Have a look at the `tutorial notebooks`_ in the documentation folder\n* For even more usage examples you can have a look at the tests\n\n.. _html documentation: https://virtual-vehicle.github.io/pointcloudset/\n.. _tutorial notebooks: https://github.com/virtual-vehicle/pointcloudset/tree/master/doc/sphinx/source/tutorial_notebooks\n\n\nCLI to convert ROS1 and ROS2 files: pointcloudset convert\n##########################################################\n\nThe package includes a powerful CLI to convert pointclouds in ROS1 \u0026 2 files into many formats like pointcloudset, csv, las and many more.\nIt is capable of handling both mcap and db3 ROS files.\n\n.. code-block:: console\n\n   pointcloudset convert --output-format csv --output-dir converted_csv test.bag\n\n.. image:: https://raw.githubusercontent.com/virtual-vehicle/pointcloudset/master/images/cli_demo.gif\n   :width: 600\n\nYou can view PointCloud2 messages with\n\n.. code-block:: console\n\n   pointcloudset topics test.bag\n\n\nComparison to related packages\n################################################\n\n#. `ROS \u003chttp://wiki.ros.org/rosbag/Code%20API\u003e`_ -  bagfiles can contain many point clouds from different sensors.\n   The downside of the format is that it is only suitable for serial access and not well suited for data analytics and post processing.\n#. `pyntcloud \u003chttps://github.com/daavoo/pyntcloud\u003e`_ - Only for single point clouds. This package is used as the basis for the\n   PointCloud object.\n#. `open3d \u003chttps://github.com/intel-isl/Open3D\u003e`_ - Only for single point clouds. Excellent package, which is used for some\n   methods on the PointCloud.\n#. `pdal \u003chttps://github.com/PDAL/PDAL\u003e`_ - Works also with pipelines on point clouds but is mostly focused on single point cloud processing.\n   Pointcloudset is purely in python and based on pandas DataFrames. In addition pointcloudset works in parallel to process large datasets.\n\n\nCitation and contact\n################################################\n\n.. |orcid| image:: https://orcid.org/sites/default/files/images/orcid_16x16.png\n   :target: https://orcid.org/0000-0002-3925-6260\u003e\n\n|orcid| `Thomas Gölles \u003chttps://orcid.org/0000-0002-3925-6260\u003e`_\nemail: thomas.goelles@v2c2.at\n\nPlease cite our `JOSS paper`_ if you use pointcloudset.\n\n.. _JOSS paper: https://joss.theoj.org/papers/10.21105/joss.03471#\n\n.. code-block:: bib\n\n   @article{Goelles2021,\n     doi = {10.21105/joss.03471},\n     url = {https://doi.org/10.21105/joss.03471},\n     year = {2021},\n     publisher = {The Open Journal},\n     volume = {6},\n     number = {65},\n     pages = {3471},\n     author = {Thomas Goelles and Birgit Schlager and Stefan Muckenhuber and Sarah Haas and Tobias Hammer},\n     title = {`pointcloudset`: Efficient Analysis of Large Datasets of Point Clouds Recorded Over Time},\n     journal = {Journal of Open Source Software}\n   }\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirtual-vehicle%2Fpointcloudset","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvirtual-vehicle%2Fpointcloudset","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvirtual-vehicle%2Fpointcloudset/lists"}