# ਆਪਣੇ IoT ਡਿਵਾਈਸ ਤੋਂ ਸਟਾਕ ਗਿਣੋ - ਵਰਚੁਅਲ IoT ਹਾਰਡਵੇਅਰ ਅਤੇ ਰਾਸਪਬੈਰੀ ਪਾਈ ਪੇਸ਼ਗੂਈਆਂ ਅਤੇ ਉਨ੍ਹਾਂ ਦੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਦੇ組ਮਿਲਨ ਨੂੰ ਇੱਕ ਚਿੱਤਰ ਵਿੱਚ ਸਟਾਕ ਗਿਣਣ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ। ## ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਦਿਖਾਓ ਇੱਕ ਮਦਦਗਾਰ ਡੀਬੱਗਿੰਗ ਕਦਮ ਵਜੋਂ, ਤੁਸੀਂ ਸਿਰਫ ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਨੂੰ ਪ੍ਰਿੰਟ ਹੀ ਨਹੀਂ ਕਰ ਸਕਦੇ, ਬਲਕਿ ਉਹਨਾਂ ਨੂੰ ਉਸ ਚਿੱਤਰ 'ਤੇ ਖਿੱਚ ਸਕਦੇ ਹੋ ਜੋ ਡਿਸਕ 'ਤੇ ਲਿਖਿਆ ਗਿਆ ਸੀ ਜਦੋਂ ਇੱਕ ਚਿੱਤਰ ਕੈਪਚਰ ਕੀਤਾ ਗਿਆ ਸੀ। ### ਟਾਸਕ - ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਪ੍ਰਿੰਟ ਕਰੋ 1. ਯਕੀਨੀ ਬਣਾਓ ਕਿ `stock-counter` ਪ੍ਰੋਜੈਕਟ VS Code ਵਿੱਚ ਖੁੱਲ੍ਹਾ ਹੈ, ਅਤੇ ਜੇ ਤੁਸੀਂ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਵਰਤ ਰਹੇ ਹੋ ਤਾਂ ਵਰਚੁਅਲ ਵਾਤਾਵਰਣ ਐਕਟੀਵੇਟ ਕੀਤਾ ਹੋਵੇ। 1. `for` ਲੂਪ ਵਿੱਚ `print` ਸਟੇਟਮ ਨੂੰ ਹੇਠਾਂ ਦਿੱਤੇ ਅਨੁਸਾਰ ਬਦਲੋ ਤਾਂ ਜੋ ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਨੂੰ ਕਨਸੋਲ 'ਤੇ ਪ੍ਰਿੰਟ ਕੀਤਾ ਜਾ ਸਕੇ: ```python print(f'{prediction.tag_name}:\t{prediction.probability * 100:.2f}%\t{prediction.bounding_box}') ``` 1. ਐਪ ਚਲਾਓ ਅਤੇ ਕੈਮਰਾ ਨੂੰ ਸ਼ੈਲਫ 'ਤੇ ਕੁਝ ਸਟਾਕ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰੋ। ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਕਨਸੋਲ 'ਤੇ ਪ੍ਰਿੰਟ ਕੀਤੀਆਂ ਜਾਣਗੀਆਂ, ਜਿਨ੍ਹਾਂ ਵਿੱਚ 0-1 ਦੇ ਵੈਲਿਊਜ਼ ਲਈ left, top, width ਅਤੇ height ਸ਼ਾਮਲ ਹਨ। ```output pi@raspberrypi:~/stock-counter $ python3 app.py tomato paste: 33.42% {'additional_properties': {}, 'left': 0.3455171, 'top': 0.09916268, 'width': 0.14175442, 'height': 0.29405564} tomato paste: 34.41% {'additional_properties': {}, 'left': 0.48283678, 'top': 0.10242918, 'width': 0.11782813, 'height': 0.27467814} tomato paste: 31.25% {'additional_properties': {}, 'left': 0.4923783, 'top': 0.35007596, 'width': 0.13668466, 'height': 0.28304994} tomato paste: 31.05% {'additional_properties': {}, 'left': 0.36416405, 'top': 0.37494493, 'width': 0.14024884, 'height': 0.26880276} ``` ### ਟਾਸਕ - ਚਿੱਤਰ 'ਤੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਖਿੱਚੋ 1. Pip ਪੈਕੇਜ [Pillow](https://pypi.org/project/Pillow/) ਚਿੱਤਰਾਂ 'ਤੇ ਖਿੱਚਣ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਇਸਨੂੰ ਹੇਠਾਂ ਦਿੱਤੇ ਕਮਾਂਡ ਨਾਲ ਇੰਸਟਾਲ ਕਰੋ: ```sh pip3 install pillow ``` ਜੇ ਤੁਸੀਂ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਵਰਤ ਰਹੇ ਹੋ, ਤਾਂ ਇਹ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਇਹ ਐਕਟੀਵੇਟ ਕੀਤੇ ਗਏ ਵਰਚੁਅਲ ਵਾਤਾਵਰਣ ਤੋਂ ਚਲਾਇਆ ਜਾਵੇ। 1. `app.py` ਫਾਈਲ ਦੇ ਉੱਪਰ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਇੰਪੋਰਟ ਸਟੇਟਮ ਸ਼ਾਮਲ ਕਰੋ: ```python from PIL import Image, ImageDraw, ImageColor ``` ਇਹ ਚਿੱਤਰ ਨੂੰ ਸੋਧਣ ਲਈ ਲੋੜੀਂਦਾ ਕੋਡ ਇੰਪੋਰਟ ਕਰਦਾ ਹੈ। 1. `app.py` ਫਾਈਲ ਦੇ ਅੰਤ ਵਿੱਚ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ: ```python with Image.open('image.jpg') as im: draw = ImageDraw.Draw(im) for prediction in predictions: scale_left = prediction.bounding_box.left scale_top = prediction.bounding_box.top scale_right = prediction.bounding_box.left + prediction.bounding_box.width scale_bottom = prediction.bounding_box.top + prediction.bounding_box.height left = scale_left * im.width top = scale_top * im.height right = scale_right * im.width bottom = scale_bottom * im.height draw.rectangle([left, top, right, bottom], outline=ImageColor.getrgb('red'), width=2) im.save('image.jpg') ``` ਇਹ ਕੋਡ ਪਹਿਲਾਂ ਸੇਵ ਕੀਤੇ ਚਿੱਤਰ ਨੂੰ ਸੋਧਣ ਲਈ ਖੋਲ੍ਹਦਾ ਹੈ। ਇਹ ਪੇਸ਼ਗੂਈਆਂ ਦੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਨੂੰ ਲੂਪ ਕਰਦਾ ਹੈ ਅਤੇ 0-1 ਦੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਵੈਲਿਊਜ਼ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਹੇਠਾਂ ਸੱਜੇ ਕੋਆਰਡੀਨੇਟ ਦੀ ਗਣਨਾ ਕਰਦਾ ਹੈ। ਇਹਨਾਂ ਨੂੰ ਚਿੱਤਰ ਦੇ ਮਾਪਾਂ ਨਾਲ ਗੁਣਾ ਕਰਕੇ ਚਿੱਤਰ ਕੋਆਰਡੀਨੇਟ ਵਿੱਚ ਬਦਲਿਆ ਜਾਂਦਾ ਹੈ। ਉਦਾਹਰਣ ਲਈ, ਜੇ left ਵੈਲਿਊ 0.5 ਹੈ ਅਤੇ ਚਿੱਤਰ 600 ਪਿਕਸਲ ਚੌੜਾ ਹੈ, ਤਾਂ ਇਹ 300 ਵਿੱਚ ਬਦਲ ਜਾਵੇਗਾ (0.5 x 600 = 300)। ਹਰ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਨੂੰ ਲਾਲ ਲਾਈਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਚਿੱਤਰ 'ਤੇ ਖਿੱਚਿਆ ਜਾਂਦਾ ਹੈ। ਆਖਿਰਕਾਰ ਸੋਧਿਆ ਗਿਆ ਚਿੱਤਰ ਸੇਵ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਅਸਲ ਚਿੱਤਰ ਨੂੰ ਓਵਰਰਾਈਟ ਕਰਦੇ ਹੋਏ। 1. ਐਪ ਚਲਾਓ ਅਤੇ ਕੈਮਰਾ ਨੂੰ ਸ਼ੈਲਫ 'ਤੇ ਕੁਝ ਸਟਾਕ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰੋ। ਤੁਸੀਂ VS Code ਐਕਸਪਲੋਰਰ ਵਿੱਚ `image.jpg` ਫਾਈਲ ਦੇਖੋਗੇ ਅਤੇ ਇਸਨੂੰ ਚੁਣ ਕੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਦੇਖ ਸਕਦੇ ਹੋ। ![4 ਟਮਾਟਰ ਪੇਸਟ ਦੇ ਕੈਨ, ਹਰ ਕੈਨ ਦੇ ਆਲੇ-ਦੁਆਲੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸ](../../../../../translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.pa.jpg) ## ਸਟਾਕ ਗਿਣੋ ਉਪਰ ਦਿੱਤੇ ਚਿੱਤਰ ਵਿੱਚ, ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਵਿੱਚ ਥੋੜ੍ਹਾ ਜਿਹਾ ਓਵਰਲੈਪ ਹੈ। ਜੇ ਇਹ ਓਵਰਲੈਪ ਬਹੁਤ ਵੱਧ ਹੋਵੇ, ਤਾਂ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਇੱਕੋ ਚੀਜ਼ ਨੂੰ ਦਰਸਾ ਸਕਦੇ ਹਨ। ਚੀਜ਼ਾਂ ਨੂੰ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਗਿਣਣ ਲਈ, ਤੁਹਾਨੂੰ ਮਹੱਤਵਪੂਰਨ ਓਵਰਲੈਪ ਵਾਲੇ ਬਾਕਸਾਂ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰਨਾ ਪਵੇਗਾ। ### ਟਾਸਕ - ਓਵਰਲੈਪ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰਦੇ ਹੋਏ ਸਟਾਕ ਗਿਣੋ 1. Pip ਪੈਕੇਜ [Shapely](https://pypi.org/project/Shapely/) ਇੰਟਰਸੈਕਸ਼ਨ ਦੀ ਗਣਨਾ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਜੇ ਤੁਸੀਂ ਰਾਸਪਬੈਰੀ ਪਾਈ ਵਰਤ ਰਹੇ ਹੋ, ਤਾਂ ਤੁਹਾਨੂੰ ਪਹਿਲਾਂ ਇੱਕ ਲਾਇਬ੍ਰੇਰੀ ਡਿਪੈਂਡੈਂਸੀ ਇੰਸਟਾਲ ਕਰਨੀ ਪਵੇਗੀ: ```sh sudo apt install libgeos-dev ``` 1. Shapely Pip ਪੈਕੇਜ ਇੰਸਟਾਲ ਕਰੋ: ```sh pip3 install shapely ``` ਜੇ ਤੁਸੀਂ ਵਰਚੁਅਲ IoT ਡਿਵਾਈਸ ਵਰਤ ਰਹੇ ਹੋ, ਤਾਂ ਇਹ ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਇਹ ਐਕਟੀਵੇਟ ਕੀਤੇ ਗਏ ਵਰਚੁਅਲ ਵਾਤਾਵਰਣ ਤੋਂ ਚਲਾਇਆ ਜਾਵੇ। 1. `app.py` ਫਾਈਲ ਦੇ ਉੱਪਰ ਹੇਠਾਂ ਦਿੱਤਾ ਗਿਆ ਇੰਪੋਰਟ ਸਟੇਟਮ ਸ਼ਾਮਲ ਕਰੋ: ```python from shapely.geometry import Polygon ``` ਇਹ ਪੋਲਿਗਨ ਬਣਾਉਣ ਲਈ ਲੋੜੀਂਦਾ ਕੋਡ ਇੰਪੋਰਟ ਕਰਦਾ ਹੈ ਤਾਂ ਜੋ ਓਵਰਲੈਪ ਦੀ ਗਣਨਾ ਕੀਤੀ ਜਾ ਸਕੇ। 1. ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਖਿੱਚਣ ਵਾਲੇ ਕੋਡ ਤੋਂ ਉੱਪਰ ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਸ਼ਾਮਲ ਕਰੋ: ```python overlap_threshold = 0.20 ``` ਇਹ ਓਵਰਲੈਪ ਦੀ ਪ੍ਰਤੀਸ਼ਤਤਾ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦਾ ਹੈ ਜਿਸ ਤੋਂ ਬਾਅਦ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਇੱਕੋ ਚੀਜ਼ ਮੰਨੇ ਜਾਂਦੇ ਹਨ। 0.20 ਇੱਕ 20% ਓਵਰਲੈਪ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। 1. Shapely ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਓਵਰਲੈਪ ਦੀ ਗਣਨਾ ਕਰਨ ਲਈ, ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਨੂੰ Shapely ਪੋਲਿਗਨ ਵਿੱਚ ਬਦਲਣਾ ਪਵੇਗਾ। ਇਹ ਕਰਨ ਲਈ ਹੇਠਾਂ ਦਿੱਤਾ ਫੰਕਸ਼ਨ ਸ਼ਾਮਲ ਕਰੋ: ```python def create_polygon(prediction): scale_left = prediction.bounding_box.left scale_top = prediction.bounding_box.top scale_right = prediction.bounding_box.left + prediction.bounding_box.width scale_bottom = prediction.bounding_box.top + prediction.bounding_box.height return Polygon([(scale_left, scale_top), (scale_right, scale_top), (scale_right, scale_bottom), (scale_left, scale_bottom)]) ``` ਇਹ ਪੇਸ਼ਗੂਈ ਦੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਪੋਲਿਗਨ ਬਣਾਉਂਦਾ ਹੈ। 1. ਓਵਰਲੈਪਿੰਗ ਚੀਜ਼ਾਂ ਨੂੰ ਹਟਾਉਣ ਲਈ ਲਾਜ਼ਮੀ ਤਰਕ ਵਿੱਚ ਸਾਰੀਆਂ ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਦੀ ਤੁਲਨਾ ਸ਼ਾਮਲ ਹੈ। ਜੇ ਕਿਸੇ ਵੀ ਜੋੜੇ ਦੀ ਪੇਸ਼ਗੂਈਆਂ ਦੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਓਵਰਲੈਪ ਥ੍ਰੈਸ਼ਹੋਲਡ ਤੋਂ ਵੱਧ ਹੋ ਜਾਂਦੇ ਹਨ, ਤਾਂ ਇੱਕ ਪੇਸ਼ਗੂਈ ਨੂੰ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਹੇਠਾਂ ਦਿੱਤਾ ਕੋਡ ਇਹ ਕੰਮ ਕਰਦਾ ਹੈ: ```python to_delete = [] for i in range(0, len(predictions)): polygon_1 = create_polygon(predictions[i]) for j in range(i+1, len(predictions)): polygon_2 = create_polygon(predictions[j]) overlap = polygon_1.intersection(polygon_2).area smallest_area = min(polygon_1.area, polygon_2.area) if overlap > (overlap_threshold * smallest_area): to_delete.append(predictions[i]) break for d in to_delete: predictions.remove(d) print(f'Counted {len(predictions)} stock items') ``` ਓਵਰਲੈਪ Shapely ਦੇ `Polygon.intersection` ਮੈਥਡ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਗਣਨਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਜੋ ਇੱਕ ਪੋਲਿਗਨ ਵਾਪਸ ਕਰਦਾ ਹੈ ਜਿਸ ਵਿੱਚ ਓਵਰਲੈਪ ਹੁੰਦਾ ਹੈ। ਇਸ ਪੋਲਿਗਨ ਤੋਂ ਖੇਤਰਫਲ ਦੀ ਗਣਨਾ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਓਵਰਲੈਪ ਥ੍ਰੈਸ਼ਹੋਲਡ ਇੱਕ ਅਬਸੋਲਿਊਟ ਵੈਲਿਊ ਨਹੀਂ ਹੈ, ਪਰ ਇਹ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਦੀ ਪ੍ਰਤੀਸ਼ਤਤਾ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ। ਇਸ ਲਈ ਸਭ ਤੋਂ ਛੋਟਾ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਲੱਭਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਓਵਰਲੈਪ ਥ੍ਰੈਸ਼ਹੋਲਡ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਹ ਖੇਤਰਫਲ ਗਣਨਾ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਜੋ ਛੋਟੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਦੇ ਓਵਰਲੈਪ ਪ੍ਰਤੀਸ਼ਤਤਾ ਥ੍ਰੈਸ਼ਹੋਲਡ ਤੋਂ ਵੱਧ ਨਹੀਂ ਹੋ ਸਕਦਾ। ਜੇ ਓਵਰਲੈਪ ਇਸ ਤੋਂ ਵੱਧ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਪੇਸ਼ਗੂਈ ਨੂੰ ਹਟਾਉਣ ਲਈ ਚਿੰਨ੍ਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਜਦੋਂ ਇੱਕ ਪੇਸ਼ਗੂਈ ਨੂੰ ਹਟਾਉਣ ਲਈ ਚਿੰਨ੍ਹਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਇਸਨੂੰ ਮੁੜ ਜਾਂਚਣ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ। ਇਸ ਲਈ ਅੰਦਰੂਨੀ ਲੂਪ ਅਗਲੀ ਪੇਸ਼ਗੂਈ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਤੁਰੰਤ ਬਾਹਰ ਨਿਕਲ ਜਾਂਦਾ ਹੈ। ਤੁਸੀਂ ਇੱਕ ਲਿਸਟ ਤੋਂ ਚੀਜ਼ਾਂ ਨੂੰ ਹਟਾ ਨਹੀਂ ਸਕਦੇ ਜਦੋਂ ਤੁਸੀਂ ਇਸ 'ਤੇ ਇਟਰੇਟ ਕਰ ਰਹੇ ਹੋ। ਇਸ ਲਈ ਓਵਰਲੈਪ ਥ੍ਰੈਸ਼ਹੋਲਡ ਤੋਂ ਵੱਧ ਓਵਰਲੈਪ ਵਾਲੇ ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਨੂੰ `to_delete` ਲਿਸਟ ਵਿੱਚ ਸ਼ਾਮਲ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਅਤੇ ਆਖਿਰ ਵਿੱਚ ਹਟਾ ਦਿੱਤਾ ਜਾਂਦਾ ਹੈ। ਆਖਿਰਕਾਰ ਸਟਾਕ ਗਿਣਤੀ ਕਨਸੋਲ 'ਤੇ ਪ੍ਰਿੰਟ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ IoT ਸੇਵਾ ਨੂੰ ਭੇਜਿਆ ਜਾ ਸਕਦਾ ਹੈ ਤਾਂ ਜੋ ਸਟਾਕ ਲੈਵਲ ਘੱਟ ਹੋਣ 'ਤੇ ਚੇਤਾਵਨੀ ਦਿੱਤੀ ਜਾ ਸਕੇ। ਇਹ ਸਾਰਾ ਕੋਡ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਖਿੱਚਣ ਤੋਂ ਪਹਿਲਾਂ ਹੈ, ਇਸ ਲਈ ਤੁਸੀਂ ਓਵਰਲੈਪ ਤੋਂ ਬਿਨਾਂ ਸਟਾਕ ਪੇਸ਼ਗੂਈਆਂ ਨੂੰ ਜਨਰੇਟ ਕੀਤੇ ਚਿੱਤਰਾਂ 'ਤੇ ਦੇਖੋਗੇ। > 💁 ਇਹ ਓਵਰਲੈਪ ਨੂੰ ਹਟਾਉਣ ਦਾ ਬਹੁਤ ਸਧਾਰਨ ਤਰੀਕਾ ਹੈ, ਸਿਰਫ਼ ਓਵਰਲੈਪ ਵਾਲੇ ਜੋੜੇ ਵਿੱਚ ਪਹਿਲੇ ਨੂੰ ਹਟਾਉਣਾ। ਪ੍ਰੋਡਕਸ਼ਨ ਕੋਡ ਲਈ, ਤੁਸੀਂ ਇੱਥੇ ਹੋਰ ਤਰਕ ਸ਼ਾਮਲ ਕਰਨਾ ਚਾਹੋਗੇ, ਜਿਵੇਂ ਕਿ ਕਈ ਚੀਜ਼ਾਂ ਦੇ ਓਵਰਲੈਪ ਨੂੰ ਧਿਆਨ ਵਿੱਚ ਰੱਖਣਾ ਜਾਂ ਜੇਕਰ ਇੱਕ ਬਾਊਂਡਿੰਗ ਬਾਕਸ ਦੂਜੇ ਵਿੱਚ ਸ਼ਾਮਲ ਹੈ। 1. ਐਪ ਚਲਾਓ ਅਤੇ ਕੈਮਰਾ ਨੂੰ ਸ਼ੈਲਫ 'ਤੇ ਕੁਝ ਸਟਾਕ ਵੱਲ ਇਸ਼ਾਰਾ ਕਰੋ। ਆਉਟਪੁੱਟ ਓਵਰਲੈਪ ਥ੍ਰੈਸ਼ਹੋਲਡ ਤੋਂ ਵੱਧ ਓਵਰਲੈਪ ਤੋਂ ਬਿਨਾਂ ਬਾਊਂਡਿੰਗ ਬਾਕਸਾਂ ਦੀ ਗਿਣਤੀ ਦਰਸਾਏਗੀ। `overlap_threshold` ਵੈਲਿਊ ਨੂੰ ਸਮਾਧਾਨ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਤਾਂ ਜੋ ਪੇਸ਼ਗੂਈਆਂ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕੀਤਾ ਜਾ ਸਕੇ। > 💁 ਤੁਸੀਂ ਇਹ ਕੋਡ [code-count/pi](../../../../../5-retail/lessons/2-check-stock-device/code-count/pi) ਜਾਂ [code-count/virtual-iot-device](../../../../../5-retail/lessons/2-check-stock-device/code-count/virtual-iot-device) ਫੋਲਡਰ ਵਿੱਚ ਲੱਭ ਸਕਦੇ ਹੋ। 😀 ਤੁਹਾਡਾ ਸਟਾਕ ਕਾਊਂਟਰ ਪ੍ਰੋਗਰਾਮ ਸਫਲ ਰਿਹਾ! --- **ਅਸਵੀਕਰਤੀ**: ਇਹ ਦਸਤਾਵੇਜ਼ AI ਅਨੁਵਾਦ ਸੇਵਾ [Co-op Translator](https://github.com/Azure/co-op-translator) ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ ਹੈ। ਜਦੋਂ ਕਿ ਅਸੀਂ ਸਹੀਤਾ ਲਈ ਯਤਨਸ਼ੀਲ ਹਾਂ, ਕਿਰਪਾ ਕਰਕੇ ਧਿਆਨ ਦਿਓ ਕਿ ਸਵੈਚਾਲਿਤ ਅਨੁਵਾਦਾਂ ਵਿੱਚ ਗਲਤੀਆਂ ਜਾਂ ਅਸੁਚੀਤਤਾਵਾਂ ਹੋ ਸਕਦੀਆਂ ਹਨ। ਮੂਲ ਦਸਤਾਵੇਜ਼ ਨੂੰ ਇਸਦੀ ਮੂਲ ਭਾਸ਼ਾ ਵਿੱਚ ਅਧਿਕਾਰਤ ਸਰੋਤ ਮੰਨਿਆ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ। ਮਹੱਤਵਪੂਰਨ ਜਾਣਕਾਰੀ ਲਈ, ਪੇਸ਼ੇਵਰ ਮਨੁੱਖੀ ਅਨੁਵਾਦ ਦੀ ਸਿਫਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਸ ਅਨੁਵਾਦ ਦੀ ਵਰਤੋਂ ਤੋਂ ਪੈਦਾ ਹੋਣ ਵਾਲੇ ਕਿਸੇ ਵੀ ਗਲਤਫਹਿਮੀ ਜਾਂ ਗਲਤ ਵਿਆਖਿਆ ਲਈ ਅਸੀਂ ਜ਼ਿੰਮੇਵਾਰ ਨਹੀਂ ਹਾਂ।