You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ur/5-retail/lessons/2-check-stock-device/single-board-computer-count...

177 lines
14 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!--
CO_OP_TRANSLATOR_METADATA:
{
"original_hash": "9c4320311c0f2c1884a6a21265d98a51",
"translation_date": "2025-08-26T21:35:02+00:00",
"source_file": "5-retail/lessons/2-check-stock-device/single-board-computer-count-stock.md",
"language_code": "ur"
}
-->
# اپنے 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 کے درمیان ہوں گی۔
```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 کی قدروں کا استعمال کرتے ہوئے نیچے دائیں کوآرڈینیٹ کا حساب لگاتا ہے۔ یہ قدریں تصویر کے کوآرڈینیٹس میں تبدیل کی جاتی ہیں، تصویر کے متعلقہ طول و عرض سے ضرب دے کر۔ مثال کے طور پر، اگر بائیں قدر 0.5 ہو اور تصویر 600 پکسلز چوڑی ہو، تو یہ 300 میں تبدیل ہو جائے گی (0.5 x 600 = 300)۔
ہر باؤنڈنگ باکس تصویر پر ایک سرخ لائن کے ذریعے کھینچا جاتا ہے۔ آخر میں ترمیم شدہ تصویر محفوظ کی جاتی ہے، اور اصل تصویر کو اوور رائٹ کر دیا جاتا ہے۔
1. ایپ کو چلائیں اور کیمرے کو شیلف پر موجود اسٹاک کی طرف رکھیں۔ آپ VS Code ایکسپلورر میں `image.jpg` فائل دیکھیں گے، اور آپ اسے منتخب کر کے باؤنڈنگ باکسز دیکھ سکیں گے۔
![ٹماٹر پیسٹ کے 4 کین، ہر کین کے ارد گرد باؤنڈنگ باکسز](../../../../../translated_images/rpi-stock-with-bounding-boxes.b5540e2ecb7cd49f1271828d3be412671d950e87625c5597ea97c90f11e01097.ur.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. اوورلیپنگ اشیاء کو ہٹانے کی منطق میں تمام باؤنڈنگ باکسز کا موازنہ شامل ہوتا ہے، اور اگر کسی بھی پیشگوئی کے جوڑے کے باؤنڈنگ باکسز اوورلیپ تھریشولڈ سے زیادہ اوورلیپ کرتے ہیں، تو ایک پیشگوئی کو حذف کر دیا جاتا ہے۔ تمام پیشگوئیوں کا موازنہ کرنے کے لیے، آپ پیشگوئی 1 کا موازنہ 2، 3، 4 وغیرہ سے کرتے ہیں، پھر 2 کا موازنہ 3، 4 وغیرہ سے۔ درج ذیل کوڈ یہ کام کرتا ہے:
```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) کا استعمال کرتے ہوئے ترجمہ کی گئی ہے۔ ہم درستگی کے لیے کوشش کرتے ہیں، لیکن براہ کرم آگاہ رہیں کہ خودکار ترجمے میں غلطیاں یا غیر درستیاں ہو سکتی ہیں۔ اصل دستاویز کو اس کی اصل زبان میں مستند ذریعہ سمجھا جانا چاہیے۔ اہم معلومات کے لیے، پیشہ ور انسانی ترجمہ کی سفارش کی جاتی ہے۔ ہم اس ترجمے کے استعمال سے پیدا ہونے والی کسی بھی غلط فہمی یا غلط تشریح کے ذمہ دار نہیں ہیں۔