A tool for measuring height in microns of arbitrary sized objects using a webcam and a laser level.
This is the software component in building a highly accurate measurement device primarily used in a similar way to a surface plate. Sofar measurements are attainable between 0.5um - 2um in repeated measurements.
Because of how image sensor technology has progressed, we can use that as the basis of a highly accurate measurement device. This tool works by reading the laser sensor’s intensity values on a webcam with its camera lens taken off. An image sensor off a typical $15 webcam is about 3mm wide and has a resolution of FHD (1920x1080). This means that each light sensor is in the range of 1-5 microns in size.
The camera sensor is mounted at 90 degree angle so the wide direction is vertical. This gives a high coverage to sense the beam and also rescues power source based noise like PWM noise in switching power supplies.
The laser beam can be a point or a preferred horizontal line (like in a self leveling laser that I am using). We take the mean of each row (ex 1080 pixels wide) reshaping the 2D image into a 1D array. We then take this 1D array and fit a gaussian curve to it to find the center point. Finally converting the pixel position into physical height from calculations based on the physical size of the sensor to its resolution.
Further improvements reaching sub-pixel noise can be done by multisampling the results, smoothing out the luminosity noise in the 1D array, and removal of outliers by percentage.
This tool is based on the hard work of this original Java tool but using a different base language Python and further changes to improve its accuracy and usability, and sample speed.
Binary installer can be downloaded on PyPI https://pypi.org/project/laser-level-webcam/
pip install laser-level-webcam==1.0.0
and than running the command:
laser-level-webcam
Follow these steps to install the Python program:
Start by cloning the repository containing the Python program to your local machine. Open a terminal and run the following command:
git clone https://github.com/bhowiebkr/laser-level-webcam.git
Navigate to the cloned repository directory using the cd command:
cd laser-level-webcam
Next, create a virtual environment for isolating the program's dependencies. Run the following commands:
2a. if you are missing virtualenv, install it with pip
pip install virtualenv
2b. Setup the virtualenv:
virtualenv venv
Activate the virtual environment to start using it.
.\venv\Scripts\activate
The program's required packages are listed in the requirements.txt file. This will install the packages into the virtual environmnent setup in step 2. To install these packages, run the following command:
pip install -r requirements.txt
This command uses pip
to install the packages specified in the requirements.txt file.
After installing the required packages, you are ready to run the Python program:
python.exe laser_level_tool/main.py
We run the main.py
file in the laser_level_tool
directory
I’ll make a video explaining this tool and the workflow in greater detail, but in the meantime, work from the left to the right of the tool. Some helpful tips:
This project is licensed under the MIT License. See the LICENSE
file for details.