Skip to content

The scanner app acquires RGB-D scans using iPhone LiDAR sensor and ARKit API, stores color, depth and IMU data on local memory and then uploads to PC for processing.

License

Notifications You must be signed in to change notification settings

xiongyiheng/ARKit-Scanner

Repository files navigation

iOS ARKit-Scanner App

The scanner app acquires RGB-D scans using iPhone LiDAR sensor and ARKit API, stores color, depth and IMU data on local memory and then uploads to PC for processing[Watch the video]. The whole project is built based on Displaying a Point Cloud Using Scene Depth and is used for data collection by ScanNet++.

Prerequisites for compilation

  • iPhone 13 pro (can work with other iPads and iPhones with LiDAR sensor but untested)
  • Xcode 14.0+
  • iOS 14.0+
  • iPadOS 14.0+

Build

  • Open pointCloudSample.xcodeproj with Xcode
  • Attach your iOS device and authorize the development machine to build to the device
  • Build the Scanner target for your device (select "pointCloudSample" and your attached device name at the top left next to the "play" icon, and click the "play" icon)
  • Detach the device from the development machine and run the Scanner app

Data Formats

metadata (*.json):

{"scene_name":"Xiong","scene_type":"apartment","color_width":"1920","color_height":"1440","depth_width":"256","depth_height":"192","intrinsic":"[1456.2087,0.0,0.0,0.0,1456.2087,0.0,962.67816,717.8443,1.0]","exposure duration":"0.016666666666666666"}

depth (*.bin): Compressed stream of depth frames from iPhone's LiDAR. Please refer to the postprocessing code for an example of how to parse the data.

rgb (*.mp4): A sequence of RGB frames in the form of mp4.

trans (*.json): Transform of camera for each frame in the format of:

{<frameID>:"[-0.12042544,-0.94454795,0.3054945,0.0,0.9779544,-0.16575992,-0.12699933,0.0,0.17059568,0.2834657,0.9436865,0.0,0.002562333,0.024424758,0.025746325,1.0]",...}

offset (*.json): Exposure offset for each frame in the format of:

{<frameID>:"8.328667",...}

imu (*.json): IMU data for each frame in the format of:


{<frameID>:"[0.0006190282292664051,-0.009413435123860836,-0.0021445199381560087,-0.006018027663230896,-0.008715152740478516,-0.0023995935916900635,0.0,0.0,0.0,0.5224416595374864,1.2367715496437015,-0.2551249550778954,0.16359558701515198,-0.9447304606437683,-0.2841145992279053]",...}

Each entry represents imu data in the order of: x rotation rate, y rotation rate, z rotation rate, x user-caused acceleration vector, y user-caused acceleration vector, z user-caused acceleration vector, x magnetic field, y magnetic field, z magnetic field, roll, pitch, yaw, x gravity vector, y gravity vector, z gravity vector.

Citation

If you find this code helpful, please consider citing and giving our code repository a star ⭐️:

@inproceedings{yeshwanth2023scannet++,
  title={Scannet++: A high-fidelity dataset of 3d indoor scenes},
  author={Yeshwanth, Chandan and Liu, Yueh-Cheng and Nie{\ss}ner, Matthias and Dai, Angela},
  booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision},
  pages={12--22},
  year={2023}
}

About

The scanner app acquires RGB-D scans using iPhone LiDAR sensor and ARKit API, stores color, depth and IMU data on local memory and then uploads to PC for processing.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published