Measure size of objects in real-time with Computer Vision | Opencv with Python
In this video, we will see how to calculate the dimensions of a fixed camera object on a flat surface. For example, if we want to measure the sizes of the nuts we can use the diameter.

Measuring the size of an object can be applied to anything, no matter what its outline, color, or background, and in this tutorial, we will see which technology to use and how best to do it.
1. Measure the size of objects, but first identifies the object and its mask
To measure the size of an object, it is necessary to identify its position in the image in order to detach it from the background. This procedure must be done for each individual object and a segmentation algorithm must be used to get the precise shape, in this case, we use Mask R-CNN.
I will not go into the details of this operation because I have covered the subject several times but it is necessary to search as many images as possible of the object to be measured, make the annotations with specific software (makesense.ai) and train a custom model.

Train a custom model
To simplify the training of a custom model for Mask R-CNN I created a notebook with Google Colab that allows you to simplify the steps to set up the training: You can Train Mask R-CNN to detect any custom object, easily and quickly.

Using the file, the result of the training, with Mask R-CNN it can be seen how the algorithm perfectly recognizes the objects and their shape.

2. Convert Mask into cm
Thanks to Mask R-CNN we obtained the mask of the object and consequently its position in space but to measure the object it is not enough, we have to convert pixel to cm to calculate the diameter.

I extract the object’s position and proceed with the calculations
for i in range(object_count): # 1. Rectangle y1, x1, y2, x2 = r["rois"][i] cv2.rectangle(img,(x1, y1), (x2, y2), (25, 15, 220), 3) # Width width = x2 - x1 #cv2.putText(img, str(width), (x1 , y1 - 10), cv2.FONT_HERSHEY_PLAIN, 1, (25, 15, 220), 2) # 1.4 CM = 153 # 14 MM = 153 # Ratio Pixels to MM ratio_px_mm = 153 / 14 mm = width / ratio_px_mm cm = mm / 10
and adding the text, I get this result

we got the first result but the figure is not perfectly visible, with some corrections to the code
cv2.rectangle(img, (x1, y1 - 60), (x1 + 270, y1 - 5), (25, 15, 220), -1) cv2.putText(img, "{} CM".format(round(cm, 2)), (x1, y1 - 10), cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 3)
everything becomes clearer


Hi there, I’m the founder of Pysource.
I’m a Computer Vision Consultant, developer and Course instructor.
I help Companies and Freelancers to easily and efficiently build Computer Vision Software.

Learn to build Computer Vision Software easily and efficiently.
This is a FREE Workshop where I'm going to break down the 4 steps that are necessary to build software to detect and track any object.
Sign UP for FREE