- ضروری اجزاء
- یولو
- راسبیری پائی میں اوپن سی وی انسٹال کرنا
- راسبیری پائی میں دوسرے مطلوبہ پیکجز انسٹال کرنا
- پروگرام کی وضاحت
- معاشرتی فاصلہ وصولی کے پروجیکٹ کی جانچ کرنا
کوویڈ ۔19 کے زمانے میں ، متعدی وائرس کی منتقلی کو کم کرنے کے لئے سماجی دوری ایک موثر طریقہ ہے۔ لوگوں کو مشورہ دیا جاتا ہے کہ وہ ایک دوسرے سے اپنا رابطہ کم سے کم کریں تاکہ براہ راست رابطے کے ذریعہ اس بیماری کا خطرہ کم سے کم ہوجائے۔ محفوظ فاصلہ برقرار رکھنا ایک بہت سے مقامات جیسے فیکٹریوں ، بینکوں ، بسوں یا ریلوے اسٹیشنوں وغیرہ کے ل a ایک چیلنج ہے۔
لہذا ہمارے پچھلے کورونا سیفٹی منصوبوں جیسے آٹومیٹک سینیٹائزر مشین اور کنٹیکٹ لیس درجہ حرارت کی نگرانی کے تسلسل میں ، ہم یہاں اوپن سی وی اور راسبیری پائی کا استعمال کرتے ہوئے ایک سوشل ڈسٹینسگ ڈٹیکٹر سسٹم بنانے جا رہے ہیں ۔ ہم گہری نیورل نیٹ ورک ماڈیول کے ساتھ YOLO v3 آبجیکٹ ڈیٹیکشن الگورتھم کا وزن استعمال کریں گے۔
امیج پروسیسنگ پروجیکٹس کے لئے راسبیری پائی ہمیشہ ایک اچھا انتخاب ہوتا ہے کیونکہ اس میں دوسرے کنٹرولرز کے مقابلے میں زیادہ میموری اور رفتار ہوتی ہے۔ ہم نے پہلے امیج پروسیسنگ کے کچھ پیچیدہ منصوبوں جیسے چہرے کی نشانی کا پتہ لگانے اور چہرے کی شناخت کی درخواست کے لئے راسبیری پائ استعمال کیا تھا۔
ضروری اجزاء
- راسبیری پائ 4
یہاں ہمیں صرف RPI 4 کی ضرورت ہے جس میں اس میں اوپن سی وی نصب ہے۔ اوپن سی وی کا استعمال یہاں ڈیجیٹل امیج پروسیسنگ کے لئے کیا گیا ہے۔ ڈیجیٹل امیج پروسیسنگ کی سب سے عمومی ایپلی کیشنز آبجیکٹ کا پتہ لگانے ، چہرے کی شناخت اور لوگوں کا مقابلہ کرتے ہیں۔
یولو
یولو (آپ صرف ایک بار نظر آتے ہیں) ریئل ٹائم آبجیکٹ ڈیٹیکشن کے لئے ایک سمارٹ کنووولیشن نیورل نیٹ ورک (CNN) ہے۔ YOLOv3 ، آبجیکٹ کا پتہ لگانے کے الگورتھم کا جدید ترین ورژن ، YOLO تصاویر اور ویڈیوز میں 80 مختلف اشیاء کو پہچان سکتا ہے ، اور یہ انتہائی تیز ہے اور اس کی عمدہ درستی ہے۔ الگورتھم پوری شبیہہ پر ایک واحد اعصابی نیٹ ورک کا اطلاق کرتا ہے ، پھر اس تصویر کو علاقوں میں الگ کرتا ہے اور ہر علاقے کے لئے حدود خانوں اور احتمالات کا حساب لگاتا ہے۔ بیس یوولو ماڈل 45 فریم فی سیکنڈ میں حقیقی وقت میں تصاویر پر کارروائی کرسکتا ہے۔ یولو ماڈل دوسرے پتہ لگانے کے دیگر طریقوں جیسے ایس ایس ڈی اور آر سی این این کو پیچھے چھوڑ دیتا ہے۔
ہم اس پروجیکٹ میں جو YOLOV3 ماڈل استعمال کرنے جا رہے ہیں وہ یہاں سے ڈاؤن لوڈ کیا جاسکتا ہے۔
راسبیری پائی میں اوپن سی وی انسٹال کرنا
اوپن سی وی اور دیگر انحصارات کو انسٹال کرنے سے پہلے ، راسبیری پائی کو مکمل طور پر اپ ڈیٹ کرنے کی ضرورت ہے۔ راسبیری پائی کو اس کے تازہ ترین ورژن میں تازہ کاری کرنے کے لئے درج ذیل کمانڈز کا استعمال کریں۔
sudo اپٹ اپ ڈیٹ
پھر اپنے راسبیری پائ پر اوپن سی وی انسٹال کرنے کے لئے مطلوبہ انحصار انسٹال کرنے کے لئے درج ذیل کمانڈز کا استعمال کریں۔
libhdf5-dev -y sudo apt-get install libhdf5-serial-dev آپ خود انسٹال کریں libatlas-base-dev انسٹال کریں libjasper-dev -y sudo apt-get نصب کریں libqtgui4 -y سودو مناسب حاصل انسٹال libqt4 ٹیسٹ -y
آخر میں ، ذیل کے احکامات کا استعمال کرتے ہوئے راسبیری پائی پر اوپن سی وی انسٹال کریں۔
pip3 انسٹال کریں اوپنکیو-شراکت-ازگر == 4.1.0.25
اگر آپ اوپن سی وی میں نئے ہیں تو ، راسبیری پائی کے ساتھ ہمارے پچھلے اوپن سی وی سبق کو چیک کریں۔
- سی ایم کیک کا استعمال کرتے ہوئے راسبیری پائی پر اوپن سی وی انسٹال کرنا
- راسبیری پائی اور اوپن سی وی کے ساتھ حقیقی وقت کا سامنا کرنا پڑتا ہے
- راسبیری پائی اور اوپن سی وی کا استعمال کرتے ہوئے لائسنس پلیٹ کی پہچان
- اوپن سی وی اور راسبیری پائ کا استعمال کرتے ہوئے ہجوم سائز کا تخمینہ
ہم نے ابتدائی سطح سے شروع ہونے والے اوپن سی وی سبق کا ایک سلسلہ بھی تیار کیا ہے۔
راسبیری پائی میں دوسرے مطلوبہ پیکجز انسٹال کرنا
راسبیری پائی برائے معاشرتی فاصلے کا پتہ لگانے والے کو پروگرام کرنے سے پہلے ، آئیے دوسرے مطلوبہ پیکیجز انسٹال کریں۔
امپٹلز کا انسٹال کرنا: امپٹلز کو امیجنگ پروسیسنگ کے ضروری کاموں کو بنانے کے لئے استعمال کیا جاتا ہے جیسے اوپن سی وی کے ذریعہ ترجمہ ، گردش ، نیا سائز ، کنکال ، اور میٹپلوٹلیب امیجیز کو آسان بنانا۔ امپلٹ انسٹال کرنے کے لئے نیچے دیئے گئے کمانڈ کا استعمال کریں:
پائپ 3 انسٹال کریں
پروگرام کی وضاحت
صفحے کے آخر میں مکمل کوڈ دیا گیا ہے۔ یہاں ہم بہتر وضاحت کے لئے کوڈ کے اہم حصوں کی وضاحت کر رہے ہیں۔
لہذا کوڈ کے آغاز پر ، تمام مطلوبہ لائبریریاں درآمد کریں جو اس منصوبے میں استعمال ہونے والی ہیں۔
درآمد NP درآمد کے طور پر NP درآمد cv2 درآمد imutils درآمد OS وقت
چیک کریں () تقریب کی ویڈیو کے ایک فریم میں دو اشیاء یا دو پوائنٹس کے درمیان فاصلے کا حساب کرنے کے لئے استعمال کیا جاتا ہے. پوائنٹس a اور b فریم میں دو چیزوں کی نشاندہی کرتے ہیں۔ یہ دو نکات اشیاء کے مابین یکلیڈیائی دوری کا حساب لگانے کے لئے استعمال ہوتے ہیں ۔
Def چیک (a ، b): دور = ((a - b) ** 2 + 550 / ((a + b) / 2) * (a - b) ** 2) ** 0.5 انشانکن = (a + b) / 2 اگر 0 <دور <0.25 * انشانکن: واپسی ٹھیک ہے اور: جھوٹا واپس
سیٹ اپ فنکشن یولو وزن ، سی ایف جی فائل ، کوکو نام فائل کے لئے راستے متعین کرنے کے لئے استعمال کیا جاتا ہے۔ os.path ماڈیول عام پاتھ نام کے ہیرا پھیری کے ل is استعمال ہوتا ہے۔ os.path.join () ماڈیول کی ایک ذیلی ماڈیول ہے os.path اور ہوشیاری سے ایک یا ایک سے زیادہ راستے اجزاء شامل ہونے کے لئے استعمال کیا. cv2.dnn.readNetFromDarknet () طریقہ نیٹ ورک میں محفوظ شدہ وزن کو لوڈ کرنے کے لئے استعمال کیا جاتا ہے۔ وزن کو لوڈ کرنے کے بعد ، نیٹ.بیٹ لائر نامز ماڈل کا استعمال کرتے ہوئے نیٹ ورک میں استعمال ہونے والی تمام پرتوں کی فہرست نکالیں ۔
Def سیٹ اپ (یولو): گلوبل نیورل_نیٹ ، ایل این ، LABELS وزن = os.path.sep.join () تشکیل = os.path.sep.join () لیبل پاتھ = os.path.sep.join () لیبل = کھلا (لیبل پیٹ)). پڑھیں (). پٹی (). تقسیم ("\ n") neural_net = cv2.dnn.readNetFromDarknet (تشکیل، وزن) ln = neural_net.getLayerNames () ln = - 1] i میں neural_net.getUnconnectedOutLayers ()]
امیج پروسیسنگ فنکشن کے اندر ، ہم ویڈیو کا ایک سنگل فریم لے جاتے ہیں اور پھر اس میں ہر بھیڑ کے درمیان موجود سماجی دوری کی شناخت کے ل process اس پر کارروائی کرتے ہیں۔ فنکشن کی پہلی دو لائنوں میں ، ہم ویڈیو فریم کے طول و عرض (ڈبلیو ، ایچ) کو بطور (کوئی نہیں ، کوئی نہیں) طے کرتے ہیں۔ اگلی لائن میں ، ہم نے بیچ میں فریموں کو لوڈ کرنے اور انہیں نیٹ ورک کے ذریعے چلانے کے لئے cv2.dnn.blobFromImage () طریقہ استعمال کیا ۔ بلاب فنکشن ایک فریم پر مطلب گھٹاؤ ، اسکیلنگ ، اور چینل تبدیل کرتا ہے۔
(ایچ ، ڈبلیو) = (کوئی نہیں ، کوئی نہیں) فریم = امیجک کوپی () اگر ڈبلیو کوئی نہیں ہے یا ایچ کوئی نہیں ہے: (ایچ ، ڈبلیو) = فریم.شیپ بلاب = cv2.dnn.blobFromImage (فریم ، 1 / 255.0 ، (416 ، 416) ، swapRB = سچ ، فصل = جھوٹی) neural_net.setInput (بلاب) اسٹارٹ ٹائم = ٹائم ٹائم () لیئر آؤٹ پٹ = neural_net.forward (ln)
YOLO کی پرت کے نتائج میں قدروں کا ایک مجموعہ ہوتا ہے۔ یہ اقدار ہمیں اس بات کی وضاحت میں مدد کرتی ہیں کہ کون سا اعتراض کس طبقے سے ہے ۔ ہم پرت آؤٹ پٹس میں ہر آؤٹ پٹ کو لوپ کرتے ہیں اور جیسے ہی ہم لوگوں کا پتہ لگاتے ہیں ، ہم کلاس لیبل کو "فرد" کے بطور مقرر کرتے ہیں۔ ہر ایک کی کھوج سے ، ہمیں ایک باؤنڈنگ باکس ملتا ہے جو آؤٹ پٹ میں پتہ لگانے کے لئے ہمیں X سینٹر ، Y سینٹر ، چوڑائی ، اور باکس کی اونچائی فراہم کرتا ہے۔
اسکورز = پتہ لگانے کے میکسی_کلاس = np.argmax اعتماد (اسکور) اعتماد = اسکور اگر LABELS == "شخص": اگر اعتماد> 0.5: باکس = پتہ لگانے * np.array () (CenterX، CenterY، چوڑائی، اونچائی) = box.astype ("انٹ") x = انٹ (سینٹر ایکس - (چوڑائی / 2)) ی = انٹ (سینٹر وائی - (اونچائی / 2)) آؤٹ لائن ۔اپینڈ () اعترافات
اس کے بعد ، موجودہ تمام خانے کے وسط کے درمیان فاصلہ کا پتہ لگانے کے ساتھ دیگر تمام بکسوں کا پتہ لگائیں۔ اگر باؤنڈنگ بکس قریب ہیں تو پھر اسٹیٹس کو سچ میں تبدیل کریں۔
برائے رینج (لین (سینٹر)): ج ان ان رینج (لین (سینٹر)) کے لئے: قریب = چیک (مرکز ، وسط) اگر قریب ہے تو: جوڑوں.اپینڈ (، مرکز]) حیثیت = صحیح حیثیت = صحیح انڈیکس = 0
اگلی لائنوں میں ، اس ماڈل کے ذریعے باکس کے طول و عرض کا استعمال کرتے ہوئے اس شخص کے ارد گرد ایک مستطیل کھینچیں ، پھر چیک کریں کہ آیا باکس محفوظ ہے یا غیر محفوظ ہے۔ اگر خانوں کے مابین فاصلہ قریب ہے تو ، پھر خانہ کا رنگ سرخ رنگ کا ہو گا ورنہ باکس سبز رنگ کا ہو گا۔
(x، y) = (آؤٹ لائن ، آؤٹ لائن) (ڈبلیو ، ایچ) = (آؤٹ لائن ، آؤٹ لائن) اگر حیثیت == سچ ہے: cv2.rectangle (فریم ، (x ، y) ، (x + w ، y + h) ، (0 ، 0 ، 150) ، 2) ایلیف کا درجہ == جھوٹا: cv2. ਸੱਚ رنگ (فریم ، (x ، y) ، (x + w ، y + h) ، (0 ، 255 ، 0) ، 2)
اب لوپ فنکشن کے اندر ، ہم ویڈیو کے ہر فریم کو پڑھ رہے ہیں اور پھر افراد کے مابین فاصلے کا حساب کتاب کرنے کے لئے ہر فریم پر کارروائی کر رہے ہیں۔
ریٹ ، فریم = کیپ۔ریڈ () اگر نہیں تو: توڑ کرینٹ_مگ = فریم کوپی () کرنٹ_یمگ = امیوٹیلس ڈریز (کرنٹ_یمگ ، چوڑائی = 480) ویڈیو = کرنٹ_یمگ.شیپ فریمینو + = 1 اگر (فریمانو٪ 2 == 0 یا فریمونو == 1): سیٹ اپ (یولو) تصویری پروسیس (کرنٹ_مگ) فریم = عملدرآمد
اگلی لائنوں میں ، آؤٹ پٹ ویڈیو کو اوپن نام کے ذریعہ مخصوص مقام پر اسٹور کرنے کے لئے cv2.VideoWriter () فنکشن استعمال کریں جس کی وضاحت ہم نے پہلے کی ہے۔
اگر تخلیق کوئی نہیں ہے: فور سی سی = سی وی 2۔ ویڈیو رائٹر_فور سی سی (* 'ایکس وی آئی ڈی') = cv2.VideoWriter (اوپن نام ، فور سی سی ، 30 ، (فریم.شےپ ، فریم.شائپ) ، ٹرو) تخلیق کریں۔ لکھ دیں (فریم)
معاشرتی فاصلہ وصولی کے پروجیکٹ کی جانچ کرنا
ایک بار جب آپ کا کوڈ تیار ہوجائے تو ، پائ ٹرمینل کھولیں اور پروجیکٹ ڈائرکٹری پر جائیں۔ کوڈ ، یولو ماڈل ، اور ڈیمو ویڈیو اسی فولڈر میں ہونا چاہئے جیسا کہ ذیل میں دکھایا گیا ہے۔
آپ یولوو 3 ڈائریکٹری کو یہاں سے ڈاؤن لوڈ کرسکتے ہیں ، پییکسلز کے ویڈیوز اور نیچے دیئے گئے پائجن کوڈ کی کاپی کرسکتے ہیں اور انہیں اسی ڈائرکٹری میں رکھ سکتے ہیں جیسا کہ اوپر دکھایا گیا ہے۔
ایک بار جب آپ پروجیکٹ ڈائرکٹری میں ہوں تو ، کوڈ شروع کرنے کے لئے درج ذیل کمانڈ پر عمل کریں:
python3 detector.py
میں نے اس کوڈ کو ویڈیو مثال کے طور پر آزمایا جو پکسلز سے حاصل کیا گیا تھا۔ میرے لئے ، ایف پی ایس بہت سست تھا اور پوری ویڈیو پر کارروائی میں تقریبا 10 سے 11 منٹ لگے۔
ایک ویڈیو کا استعمال کرتے ہوئے کی بجائے، آپ کو بھی تبدیل کرنے کی طرف سے ایک رسبری PI کیمرے کے ساتھ اس کوڈ کو ٹیسٹ کر سکتے ہیں cv2.VideoCapture (ان پٹ) کے ساتھ cv2.VideoCapture (0) 98 میں ویں کوڈ کی لائن. لنک پر عمل کرکے راسبیری پائی کے ساتھ پائکیمرا استعمال کرنے کے بارے میں مزید معلومات حاصل کریں۔
سماجی دوری کی خلاف ورزیوں کا پتہ لگانے کے لئے آپ راسبیری پائی کے ساتھ اوپن سی وی کو اس طرح استعمال کرسکتے ہیں۔ آؤٹ پٹ ویڈیو اور کوڈ ذیل میں دیا گیا ہے: