Project
EasyScanner — Phone Laser Line Scanner
Hand-held 3D scanning with a phone, a line laser and a printed board. An open Android app and printable parts, v0.2.
A hand-held laser line scanner built from an Android phone, a line laser on a printed ball mount and a printed ChArUco board. The phone finds its own pose from the board, triangulates the laser stripe and builds a point cloud in millimetres, right on the device.
Version v0.2. The app scans on a real phone: camera calibration, laser-plane calibration and a hand-held scan exported as a PLY (see the first scan below). The accuracy of real scans has not been measured yet. The APK is on the v0.2 release page.
How it works
The laser must draw a line, not a dot: a line laser module fans its beam into a flat sheet of light. Where the sheet meets the object it draws a stripe; the camera sees the stripe and the board at once, so every stripe pixel becomes a 3D point in the board's frame. Keep the board in view while you sweep the line over the object.
First scan on a real phone
From the phone's screen recording on 2026-10-19: camera calibration (64 views of the board), the laser plane (rms 0.35 mm), a hand-held scan of a phone and its export, 254 219 points. The recording predates the rename, so the screens still say HandScanner.
The cloud itself, as the phone exported it, minus the stray stripes that missed the phone (202 k of 254 k points kept):
The scanner
The phone sits in the clamp with its cameras facing down; the clamp snaps onto an aluminium U profile, and the ball mount at the profile's end holds the laser.
What you need
- An Android phone, Android 10 or newer, arm64.
- A line laser module with a Ø12 mm body, red or green.
- A 16 × 13 × 1.5 mm aluminium U profile, about 120 mm long.
- An M5 × 25 socket head screw and an M5 tap, for the ball.
- The printed parts (PLA is fine) and a printed ChArUco board.
How to use it
- Print the parts from the repo's
cad/. - Assemble: the phone clamp and the laser mount on the profile, the laser in its ring; tilt the ball so the stripe crosses the camera's view.
- Install the app: download the APK from
Releases
and open it on the phone (allow installing from this source). It is signed
with a development key; you can also build it yourself from
android/. - Print a board and enter its numbers in the app's Settings → ChArUco board.
- Calibrate the camera first (Camera mode), then the laser plane (Laser mode).
- Scan: put the object on the board and sweep the laser over it. Export
writes a PLY in millimetres, Z up with the object standing over the board,
copies it to
Download/EasyScannerand opens the share sheet.
ChArUco boards
Vector PDFs at true scale. All use DICT_5X5_100 (dictionary id 5 in the app)
and marker ids from 0. Print at 100 %, never "Fit to page", check the 100 mm
scale bar and glue the sheet flat onto something stiff. Other sizes:
charuco/make_board.py.
| Paper | Squares (X × Y) | Square | Marker | Download |
|---|---|---|---|---|
| A4 | 4 × 6 | 45 mm | 33.3 mm | |
| A3 | 6 × 8 | 45 mm | 33.3 mm | |
| A2 | 8 × 10 | 45 mm | 33.3 mm | |
| A1 | 9 × 13 | 60 mm | 44.4 mm | |
| A0 | 10 × 14 | 80 mm | 59.2 mm |
Get the code
Hand-held laser line scanner from an Android phone: the app (Kotlin + a Rust core with OpenCV), printable parts, the assembly and ChArUco boards. v0.2.
What is new is in the v0.2 release notes.
A kit of working pieces, not a finished product: adapt it to the phone, laser and profile you have. Code is Apache-2.0; hardware designs are CERN-OHL-S-2.0. The phone clamp is a remix of Tripod Mobile Phone Clamp V2 by Stamos and stays under CC BY-NC-SA 4.0, and so do the renders, part shots and 3D model on this page that show it.
Project blog













