ReUseX is a tool for processing scan data captured with an iPhone / iPad for the purpose of mapping buildings. Currently the only supported source is the StrayScanner app which can be found in the App Store. The app captures LiDAR data as png depth images and RGB images as a mp4 video file, as well as as odometry data in a csv file. Together with confidence mapps stored as png images, these files are used to create a point cloud representation of the scanned environment. The point cloud is then used to create a simplified 3d surface modle of the scanned environment, while the images are used to semantically segment the point cloud into individual components, such as walls, windows, doors, etc.
This project definces its dependencies in a nix flake file, to lauch a development shell first install nix and then run:
nix develop
git clone https://github.com/pfmephisto/ReUseX
cd ReUseX
nix build
As of now, the project uses the following dependencies, though an updated list can be found in the flake.nix
file:
Core dependencies:
- pcl
- eigen
- cgal
- opencv
- boost
- tbb
- mpfr
Logging dependencies:
- fmt
- spdlog
- spdmon
Solvers dependencies:
- g2o
- embree
- scip-solver
- gurobi
I/O dependencies:
- opennurbs
- hdf5
- highfive
- xtensor
- xtensor-io
Visualization dependencies:
- glfw
- imgui
- glm
- libGLU
Python dependencies:
- pybind11
- python
Am example of how to access the data in the point cloud from Python:
As long as fields are continuous in memory, structured_to_unstructured
will provide a view of the data rather than a copy.
from numpy.lib.recfunctions import structured_to_unstructured
cloud = PointCloud("path_to_file.pcd")
data = np.asarray(cloud)
# View of position values
structured_to_unstructured(data[["x","y","z"]])
# View of normal values
structured_to_unstructured(data[["normal_x","normal_y","normal_z"]])
# View of RGB values
data["rgb"].view("u4").reshape(-1, 1).view("u1")[:, :3]