- SIFT کا استعمال کرتے ہوئے آبجیکٹ کا پتہ لگانا
- ORB کا استعمال کرتے ہوئے آبجیکٹ کا پتہ لگانا
- اورینٹڈ گریڈینٹس کا ہسٹگرام (HOG's)
- اورینٹڈ گریڈینٹس کا ہسٹگرام (HOG's) ، مرحلہ بہ قدم:
- HAAR جھرن کے درجہ بند
- چہرے اور آنکھوں کا پتہ لگانا
- براہ راست چہرے اور آنکھوں کا پتہ لگانا
- کاسکیڈ کلاسیفائیرز کو مد نظر رکھتے ہوئے
- ویڈیوز میں کار اور پیدل چلنے والوں کا پتہ لگانا
ہم نے ونڈوز پر ازگر اوپن سی وی کو انسٹال کرنے کے ساتھ شروع کیا اور اب تک ازگر کا استعمال کرتے ہوئے کچھ بنیادی تصویری پروسیسنگ ، امیج سیگمنٹٹیشن اور آبجیکٹ کا پتہ لگانے کا کام انجام دیا ہے ، جو نیچے دیئے گئے سبق میں درج ہیں:
- ازگر اوپن سی وی کے ساتھ شروع کرنا: انسٹالیشن اور بنیادی تصویری پروسیسنگ
- ازگر اوپن سی وی میں تصویری جوڑتوڑ (حصہ 1)
- اوپن سی وی میں تصویری جوڑتوڑ (پارٹ 2)
- اوپن سی وی کا استعمال کرتے ہوئے تصویری تقسیم - کسی تصویر کے مخصوص علاقوں کو نکالنا
ہم نے آبجیکٹ کی کھوج کے ل various مختلف طریقوں اور الگورتھموں کے بارے میں بھی سیکھا جہاں مختلف الگورتھم استعمال کرنے والے ہر شے کے لئے کچھ اہم نکات کی نشاندہی کی گئی تھی۔ اس ٹیوٹوریل میں ہم ان الگورتھم کو حقیقی زندگی کی چیزوں کا پتہ لگانے کے لئے استعمال کرنے جارہے ہیں ، یہاں ہم پتہ لگانے کے لئے SIFT اور ORB استعمال کریں گے ۔
SIFT کا استعمال کرتے ہوئے آبجیکٹ کا پتہ لگانا
یہاں آبجیکٹ کی کھوج براہ راست ویب کیم اسٹریم کے استعمال سے کی جائے گی ، لہذا اگر وہ اس شے کو پہچانتا ہے تو اس میں پائے جانے والے آبجیکٹ کا ذکر ہوگا۔ کوڈ میں مرکزی حصہ فنکشن کے ذریعہ کھیلا جاتا ہے جسے SIFT ڈیٹیکٹر کہا جاتا ہے ، زیادہ تر پروسیسنگ اس فنکشن کے ذریعہ کی جاتی ہے۔
اور کوڈ کے دوسرے نصف حصے میں ، ہم ویب کیم اسٹریم کھولنے کے ساتھ شروع کر رہے ہیں ، پھر امیج ٹیمپلیٹ یعنی ریفرنس امیج کو لوڈ کریں ، وہ پروگرام ہے جو واقعی میں ویب کیم اسٹریم کو دیکھ رہا ہے۔
اگلا، ہم مسلسل لامحدود کی مدد سے ویب کیم سلسلہ سے تصاویر پر قبضہ کر رہے ہیں جبکہ لوپ، اور پھر کیم فریم کے اسی اونچائی اور چوڑائی پر قبضہ، اور بعد پھر سود (ROI) کے خانے کے علاقے کے پیرامیٹرز کی وضاحت ہے جس میں ہمارا مقصد اسی طرح کی ویب سائٹ فریم کی اونچائی اور چوڑائی کو لے کر فٹ بیٹھ سکتا ہے۔ اور پھر ہم ROI پیرامیٹرز سے مستطیل کھینچتے ہیں جو ہم نے اوپر بیان کیا ہے۔ پھر آخر میں مستطیل کو کاٹ لیں اور اسے کوڈ کے سوئفٹ ڈیٹیکٹر حصے میں کھلا دیں۔
اب SIFT کا پتہ لگانے والے کے پاس بنیادی طور پر دو آدان ہیں ، ایک تو فصل کی تصویر ہے اور دوسرا وہ تصویری ٹیمپلیٹ ہے جسے ہم پہلے بیان کرتے ہیں اور پھر اس سے ہمیں کچھ میچ ملتے ہیں ، لہذا میچ بنیادی طور پر اشیاء یا کیپوائنٹس کی تعداد ہیں جو فصل کی تصویر میں ملتے جلتے ہیں۔ اور ہدف کی تصویر۔ اس کے بعد ہم میچوں کے لئے ایک حد قیمت کی وضاحت کرتے ہیں ، اگر میچس کی قیمت حد سے زیادہ ہے تو ، ہم اپنی اسکرین پر پائی جانے والی شبیہہ کو ROI مستطیل کے سبز رنگ کے ساتھ رکھتے ہیں۔
اب آئیے کوڈ کے مرکزی حصے کی طرف واپس جائیں ، جس فنکشن کو SIFT ڈٹیکٹر کہا جاتا ہے ، یہ ان پٹ لیتا ہے کیونکہ ایک دو شبیہیں وہ تصویر ہے جہاں وہ شے کو ڈھونڈ رہی ہے اور دوسری وہ چیز جس سے ہم ملنے کی کوشش کر رہے ہیں۔ (تصویری سانچے) پر۔ پھر سرمئی پہلی تصویر کو اسکیل کریں اور تصویری سانچے کو دوسری شبیہہ کی طرح بیان کریں۔ پھر ہم ایک SIFT ڈیٹیکٹر آبجیکٹ بناتے ہیں اور اوپن سی وی SIFT کا پتہ لگانے اور کمپیوٹ فنکشن چلاتے ہیں ، تاکہ کلیدی نکات کا پتہ لگائیں اور ڈسری پیٹرس کی گنتی کریں ، ڈسکریپٹر بنیادی طور پر ویکٹر ہیں جو کیپو پوائنٹس کے بارے میں معلومات کو اسٹور کرتے ہیں ، اور یہ واقعی اہم ہے کیوں کہ ہم میچ کرتے ہیں۔ تصاویر کے وضاحتی کے درمیان.
اور پھر ایف ایل این اے پر مبنی میچچر کی وضاحت کریں ، ہم اس کے پیچھے میچ کرنے کے ریاضی کے نظریہ میں نہیں جا رہے ہیں ، لیکن آپ آسانی سے اس کے بارے میں گوگل کرسکتے ہیں۔ سب سے پہلے ، انڈیکس کے ڈی ٹیری کو صفر سے تعبیر کریں اور پھر ہم نے لغت کی شکل میں انڈیکس اور تلاش کے پیرامیٹرز مرتب کیے ، ہم صرف اس الگورتھم کی وضاحت کرتے ہیں جو ہم استعمال کرنے جارہے ہیں جو کے ڈی ٹیری ہے ، اور ہم درختوں کی تعداد جس کا استعمال کریں گے ، زیادہ درخت۔ ہم جتنے پیچیدہ اور سست ہو جاتے ہیں اسے استعمال کرتے ہیں۔ اور تلاش کے پیرامیٹر میں چیکوں کی تعداد کی وضاحت کی گئی ہے ، جو بنیادی طور پر میچوں کی تعداد ہے جو اسے مکمل کرنے جارہی ہے۔
اور پھر ہمارے پیرنامیٹر کو لوڈ کرکے ہمارا ایف ایل این اے پر مبنی میچچر آبجیکٹ تشکیل دیں جو ہم نے پہلے بیان کیا ہے جو انڈیکس پیرامیٹرز اور سرچ پیرامیٹر ہیں اور اس کی بنیاد پر ہمارا ایف ایل این اے پر مبنی میچچر بنائیں ، جو کے این این میچچر ہے جہاں کے این این کے قریبی پڑوسی ہیں ، بنیادی طور پر یہ ایک راستہ ہے جہاں ہم قریبی مماثل اور تفصیل کار تلاش کرتے ہیں اور ہم شروعاتی مستقل k کے ساتھ میچ کرتے ہیں۔ اب یہ FLANN پر مبنی میچر ہمیں ملنے والے میچوں کی تعداد لوٹاتا ہے۔
ایف ایل این اے پر مبنی مماثلت صرف ایک تخمینہ ہے ، تاکہ ہم ایف ایل این اے پر مبنی میچچر کی درستگی کو بڑھا سکیں تاکہ ہم لو کا تناسب ٹیسٹ انجام دیتے ہیں اور یہ کیا کرتا ہے کہ وہ نون فلاں پر مبنی میچر سے میچوں کی تلاش کرتی ہے اور کچھ میٹرک پیرامیٹرز کی وضاحت کرتی ہے جو یہاں فاصلے پر ہے۔ ، جس کے لئے فاصلہ ناپاک فنکشن ہے ، اور ایک بار جب یہ معیار پورا کرتا ہے تو میچوں کو اچھے میچوں میں شامل کریں گے اور پائے جانے والے اچھے میچوں کو واپس کردیں گے ، اور اس طرح براہ راست ویڈیو سلسلہ اسکرین کے کونے پر پائے جانے والے میچوں کی تعداد بتاتا ہے۔
اب اوپر کی وضاحت کے لئے کوڈ ملاحظہ کریں:
درآمد cv2 NP طور درآمدی numpy def کی sift_detector (new_image، image_template): سانچے میں ان پٹ تصویر کا موازنہ کہ # فنکشن # اس کے بعد یہ Sift سربراہ کی تعداد ان کے درمیان سے میل کھاتا واپس image1 = cv2.cvtColor (new_image، cv2.COLOR_BGR2GRAY) image2 = image_template # بنائیں SIFT ڈیٹیکٹر آبجیکٹ #sift = cv2.SIFT () sift = cv2.xfeatures2d.SIFT_create () # SIFT کیپائینٹس_1 ، ڈسکریپٹرز_1 = sift.detectAndCompute (image1، No) کیپس پوائنٹس ، سیپس 2 (سیکنڈ 2) کی وضاحت کریں۔ کوئی نہیں) # ہمارے فلاں میچر کے لئے پیرامیٹرز کی وضاحت کریں FLANN_INDEX_KDTREE = 0 انڈیکس_پیرم = ڈیک (الگورتھم = FLANN_INDEX_KDTREE، درخت = 3) سرچ_پیمارمز = ڈیک (چیک = 100) # فلاں میچچر آبجیکٹ فلن = سی وی 2 بنائیں۔ فلان بیسڈ میٹچر (انڈکس_پیرمس ، سرچ_پیمارمز) # کے نزدیک پڑوس کے طریقہ کار کا استعمال کرتے ہوئے میچز حاصل کریں # نتیجہ 'میچز' دونوں امیجز میچوں میں ملنے والے مماثل میچوں کی تعداد ہے = flann.knnMatch (descriptors_1، descriptors_2، K = 2) # سٹور کا استعمال کرتے ہوئے لو کے تناسب کے ٹیسٹ اچھی میچوں good_matches = m اور n میچوں میں: m.distance <0.7 * n.distance اگر: good_matches.append (میٹر) بدلے لین (گڈ_میچس) کیپی = سی وی 2۔ ویڈیو کیپچر (0) # ہمارے امیج ٹیمپپ لوڈ کریں ، یہ ہماری ریفرنس امیج ہے image_template = cv2.imread ('phone.jpg'، 0) جبکہ سچ ہے: # ویب کیم کی تصاویر حاصل کریں ریٹ ، فریم = کیپ۔ریڈ () # ویب کیم فریم کی اونچائی ، چوڑائی = فریم کی شکل کی اونچائی اور چوڑائی حاصل کریں # شکل ROI باکس طول و عرض کی وضاحت کریں top_left_x = انٹ (چوڑائی / 3) ٹاپ_لیفٹ_ ی = انٹ ((اونچائی / 2) + (اونچائی / 4)) نیچے_دست_ x = انٹ ((چوڑائی / 3) * 2) نیچے_دست_ی = انٹ ((اونچائی / 2) - (اونچائی / 4)) # ہمارے علاقہ دلچسپی کے لct آئتاکار ونڈو ڈراؤ cv2.rectangle (فریم ، (ٹاپ_لیفٹ_ ایکس ، ٹاپ_لیفٹ_ی)) ، (نیچے_دست_ایکس ، نیچے_صدر_ی) ، 255 ، 3) # مشاہدے کی فصل کی کھڑکی جس کی وضاحت ہم نے کراپڈ = فریم # پلٹائیں فریم واقفیت افقی طور پر فریم = cv2.flip (فریم ، 1) # SIFT میچوں کی تعداد حاصل کریں = sift_detector (فصل ، امیج_ٹیمپلٹ) # ڈسپلے کی حیثیت کی سٹرنگ موجودہ نمبر دکھا رہی ہے۔ میچوں کے سی وی 2 ڈاٹ پیٹ ٹیکسٹ (فریم ، ٹی آر (میچ) ، (450،450) ، سی وی 2.FONT_HERSHEY_COMPLEX ، 2 ، (0،255،0) ، 1) # آبجیکٹ کا پتہ لگانے کے لئے ہماری دہلیز # ہم 10 کا استعمال کرتے ہیں کیوں کہ SIFT ڈیٹیکٹر تھوڑا سا جھوٹا نقشہ واپس کرتا ہے چوکھٹ = 10 # اگر میچز ہماری دہلیز سے تجاوز کرجاتے ہیں تو پھر چیزوں کا پتہ چلایا جاسکتا ہے اگر میچ> چوکھٹ: cv2.rectangle (فریم ، (اوپر_لیفٹ_ایکس ، ٹاپ_لیفٹ_ ی)) ، (نیچے_ رائٹ_ایکس ، نیچے_ رائٹ_ی) ، (0،255،0) ، 3) cv2.putText (فریم) ، 'آبجیکٹ ملا' ، (50،50) ، cv2.FONT_HERSHEY_COMPLEX ، 2 ، (0،255،0) ، 2) cv2.imshow ('SIFT کا استعمال کرتے ہوئے آبجیکٹ' ، فریم) اگر cv2.waitKey (1) == 13: # 13 انٹر کیپ بریک کیپ ہے۔ براہ کرم () cv2.destroyAllWindows ()
ORB کا استعمال کرتے ہوئے آبجیکٹ کا پتہ لگانا
SIFT کا استعمال کرتے ہوئے آبجیکٹ کا پتہ لگانا کافی حد تک ٹھنڈا اور درست ہے ، کیوں کہ یہ اہم نکات پر مبنی میچوں کی ایک بہت ہی درست تعداد میں پیدا کرتا ہے ، تاہم اس کا پیٹنٹ ہوتا ہے اور اس کی وجہ سے تجارتی ایپلی کیشنز کے ل for اسے استعمال کرنا مشکل ہوجاتا ہے ، اس کے لئے دوسرا راستہ اور بی بی الگورتھم ہے اعتراض کی کھوج کے لئے۔
SIFT کے ذریعہ آبجیکٹ کا پتہ لگانے کے طریقہ کی طرح جس میں ہم نے پروگرام کو دو حصوں میں تقسیم کیا ہے ، یہاں بھی اسی کی پیروی کی جائے گی۔
او.ل ، ہم فن کی وضاحت کرتے ہیں ORB_detector جس میں دو ان پٹ لیتا ہے ایک ہے ویب کیم سے آنے والی رواں سلسلہ کی تصویر اور دوسرا وہ تصویری نمونہ ہے جس کی بنیاد پر ہم اپنی شبیہہ کو میچ کر رہے ہیں۔ پھر ہم اپنی ویب کیم امیج کو گرے اسکیل کرتے ہیں اور پھر اپنے ORB ڈیٹیکٹر کو انشال کرتے ہیں ، اور ہم اسے 1000 کلیدی نکات اور 1.2 کے پیمانہ پیرامیٹرز پر ترتیب دے رہے ہیں۔ آپ کو آسانی سے، ان پیرامیٹرز کے ساتھ کے ارد گرد ادا کر سکتے ہیں تو keypoints (کے پی) اور بیان (DES) دونوں کی تصاویر اور دوسری پیرامیٹر ہم میں وضاحت کر رہے ہیں کے لئے پتہ لگانے detectANDCompute تقریب کوئی نہیں، یہ تصویر ماسک کا استعمال کریں یا نہ طلب کر رہا ہے کر رہا ہے اور ہم یہاں اس کی تردید کر رہے ہیں۔
پھر ڈیٹیکٹر میں منتقل کریں اس سے قبل ہم FLANN پر مبنی میچچر استعمال کرتے رہے ہیں ، لیکن یہاں ہم BFMatcher استعمال کریں گے اور BFMatcher کے اندر ہم دو پیرامیٹرز کی وضاحت کریں گے ایک NORM_HAMMING ہے اور دوسرا وہ کراس چیک ہے جس کی قدر صحیح ہے۔
اس کے بعد ان دو شبیہیں کے مابین میچوں کی حساب کتاب کریں جس کی وضاحت اوپر کی گئی ہے ، جس کی بدلے میں میچوں کی تعداد چونکہ یہ میچ قریب نہیں ہے اور اسی وجہ سے لو کے تناسب ٹیسٹ کرنے کی ضرورت نہیں ہے ، اس کے بجائے ہم میچوں کو فاصلے پر مبنی ترتیب دیتے ہیں ، کم سے کم فاصلہ زیادہ میچ بہتر ہے (یہاں فاصلے کا مطلب پوائنٹس کے درمیان فاصلہ ہے) ، اور آخر میں ہم لمبائی کی تقریب کا استعمال کرتے ہوئے میچوں کی تعداد واپس کردیتے ہیں۔
اور مرکزی تقریب میں ہم حد کو بہت زیادہ قیمت پر رکھتے ہیں ، کیونکہ ورب پکڑنے والا بہت زیادہ شور پیدا کرتا ہے۔
اب آئی آر بی پر مبنی کھوج کے لئے کوڈ دیکھیں
درآمد cv2 درآمد نمی کے بطور NP Def ORB_detector (new_image، image_template): # وہ فنکشن جو ان پٹ امیج کو ٹیمپلیٹ سے موازنہ کرتا ہے # اس کے بعد ان کے درمیان ORB میچوں کی تعداد لوٹ جاتی ہے image1 = cv2.cvtColor (new_image، cv2.COLOR_BGR2GRAY) # ORB کا پتہ لگانے والا بنائیں 1.2 orb = cv2.ORB_create (1000، 1.2) کے اسکیلنگ اہرام عنصر کے ساتھ 1000 اہم نکات # اصل شبیہہ (کی پی 1 ، ڈیس 1) کی کلیدی نکات کا پتہ لگائیں (orb.detectAndCompute (image1، काहीही نہیں) # گھماؤ امیج کی کلیدی نکات کا پتہ لگائیں (kp2، des2) = orb.detectAndCompute (image_template، کوئی نہیں) # میچچر بنائیں # نوٹ کریں اب ہم Flannbased مماثل bf = cv2.BFMatcher (cv2.NORM_HAMMING، crossCheck = true) استعمال نہیں کریں گے۔ # مماثل میچ کرو = bf.match (des1، des2) # فاصلے کی بنیاد پر میچوں کو ترتیب دیں۔ کم سے کم فاصلہ # بہتر میچز = ترتیب شدہ (میچز ، کی = لامبڈا ویل: ویل ڈسٹینس) ریٹرن لین (میچز) ٹوپی = سی وی 2۔ویڈیو کیپچر (0) # ہمارے امیج ٹیمپلیٹ کو لوڈ کریں ، یہ ہماری ریفرنس امیج ہے_ور_پیچ = cv2.imread ('phone.jpg'، 0) # image_template = cv2.imread ('images / Kitkat.jpg'، 0) جبکہ سچ ہے: # ویب کیم کی تصاویر حاصل کریں ، فریم = کیپریڈ () # ویب کیم فریم اونچائی کی اونچائی اور چوڑائی حاصل کریں ، چوڑائی = فریم۔ شکل # ROI باکس کے طول و عرض کی وضاحت کریں (نوٹ کریں کہ ان میں سے کچھ چیزیں لوپ سے باہر ہونی چاہئیں) top_left_x = انٹ (چوڑائی / 3) ٹاپ_لیفٹ_ ی = انٹ ((اونچائی /)) + (اونچائی /))) نیچے_دست_ x = انٹ ((چوڑائی /)) * 2) نیچے_دست_ ی = انٹ ((اونچائی /)) - (اونچائی /))) # آئتاکار ونڈو ڈرا کریں ہمارے لئے دلچسپی کا علاقہ cv2.rectangle (فریم ، (ٹاپ_لیفٹ_ ایکس ، ٹاپ_لیفٹ_ ی) ، (نیچے_دائیں_ایکس ، نیچے_دائیں_ ی)) ، 255 ، 3) # مشاہدے کی فصل کی کھڑکی جس کی وضاحت ہم کراپڈ = فریم # پلٹائیں فریم واقفیت افقی طور پر فریم = cv2.flip (فریم ، 1) # ORB میچوں کی تعداد حاصل کریں = ORB_detector (کرپٹ ، تصویری_ٹیمپلٹ) # ڈسپلے کی حیثیت کی اسٹرنگ جس میں موجودہ نمبر دکھائے جارہے ہیں ۔ آف میچز آؤٹ پٹ_اسٹرنگ = "میچز =" + ٹی آر (میچ) cv2.putText (فریم ، آؤٹ پٹ_اسٹرنگ ، (50،450) ، cv2.FONT_HERSHEY_COMPLEX ، 2 ، (250،0،150) ، 2) # آبجیکٹ کا پتہ لگانے کے ل Our ہماری دہلیز # نئی تصاویر یا بجلی کی روشنی کے حالات کے ل you آپ کو تھوڑا سا تجربہ کرنے کی ضرورت پڑسکتی ہے # نوٹ: او آر بی کا پتہ لگانے والا اوپر والے 1000 میچوں کو حاصل کرنے کے ل ، ، بنیادی طور پر کم سے کم 35٪ میچ کی حد = 250 # ہے اگر میچ ہماری حد سے تجاوز کر جائیں حد سے پھر اعتراض کا پتہ چلا ہے تو میچوں> دہلیز: cv2.rectangle (فریم، (top_left_x، top_left_y)، (bottom_right_x، bottom_right_y)، (0،255،0)، 3) cv2.putText (فریم، 'آبجیکٹ ملا'، (50 ، 50) ، cv2.FONT_HERSHEY_COMPLEX ، 2 ، (0،255،0)، 2) cv2.imshow ('ORB کا استعمال کرتے ہوئے پتہ لگانے والا ' ، فریم) اگر cv2.waitKey (1) == 13: # 13 انٹر کلید بریک کیپ ہے.ریلیز () cv2.destroyAllWindows ()
اورینٹڈ گریڈینٹس کا ہسٹگرام (HOG's)
اب آئیے ایک دوسرے ڈسکرپٹر کے بارے میں بات کرتے ہیں جو ہسٹوگرام آف اورینٹڈ گریڈینٹس (HOG's) ہے۔
HOG بہت عمدہ اور مفید ڈسکریپٹر ہیں اور وہ بڑے پیمانے پر اور کامیابی کے ساتھ آبجیکٹ کی کھوج کے لئے استعمال کیے جاتے ہیں ، جیسا کہ پہلے دیکھا جاتا ہے کہ SIFT اور ORB جیسے تصویری ڈسریکٹر جہاں ہمیں مطلوبہ الفاظ کی گنتی کرنی ہوتی ہے اور پھر ان اہم نکات میں سے ڈیسی پیپٹر کی گنتی کرنا پڑتی ہے ، HOG اس عمل کو کرتا ہے مختلف طریقے سے یہ کسی ایک خصوصیت ویکٹر کی حیثیت سے اشیاء کی نمائندگی کرتا ہے جیسا کہ فیچر ویکٹرس کے سیٹ کے مقابلہ میں جہاں ہر ایک تصویر کے کسی حصے کی نمائندگی کرتا ہے۔ اس کا مطلب ہے کہ پوری شبیہہ کے لئے ہمارے پاس واحد ویکٹر کی خصوصیت ہے ۔
اس کی تصویر کے اوپر سلائڈنگ ونڈو ڈیٹیکٹر کے ذریعہ گنتی کی گئی ہے ، جہاں ہر پوزیشن کے لئے ایک HOG وضاحتی گنتی ہے۔ اور پھر ہر ایک پوزیشن کو ایک ہی خصوصیت کے ویکٹر کے لئے جوڑ دیا جاتا ہے۔
SIFT کی طرح ، تصویر کا پیمانہ پیرامائڈنگ کے ذریعہ ایڈجسٹ کیا جاتا ہے۔
اس سے قبل ہم نے ایف ایل این اے اور بی ایف مچر جیسے میچچرز کا استعمال کیا ہے ، لیکن ایچ او جی ایس اسے ایس وی ایم (سپورٹ ویکٹر مشین) کلاسیفائیر کی مدد سے مختلف انداز میں کرتے ہیں ، جہاں ہر HOG ڈسکرپٹر کو SVM درجہ بند کو کھلایا جاتا ہے تاکہ اس بات کا تعین کیا جا سکے کہ آیا اس چیز کا پتہ چل گیا ہے یا نہیں۔
یہاں دلال & Triggs کی طرف سے ایک عظیم کاغذ کو لنک انسانی کھوج کیلئے سورؤں کا استعمال کرتے ہوئے پر ہے:
اورینٹڈ گریڈینٹس کا ہسٹگرام (HOG's) ، مرحلہ بہ قدم:
ایچ او جی کو سمجھنا کافی پیچیدہ ہوسکتا ہے ، لیکن یہاں ہم صرف اس سے متعلقہ ریاضی کی گہرائی میں جاکر ہی ایچ او جی کے نظریہ سے نمٹنے کے لئے جارہے ہیں۔
تو آئیے اس تصویر کو تھوڑا سا پکسلیٹڈ بنائیں ، اور اوپری کونے میں 8x8 پکسل باکس ہے ، لہذا اس باکس میں ہم ہر پکسل میں میلان ویکٹر یا کنارے واقفیت کا حساب لگاتے ہیں۔ تو اس کا مطلب ہے کہ اس خانے میں ہم خانہ کے اندر پکسلز کی تصویری تدریجی ویکٹر کا حساب لگاتے ہیں (وہ خود ہی شبیہہ کی شدت کی سمت یا بہاؤ ہیں) ، اور اس سے 64 (8 x 8) میلان ویکٹر پیدا ہوتے ہیں جنہیں ہسٹوگرام کے طور پر پیش کیا جاتا ہے۔. لہذا ایک ہسٹگرام کا تصور کریں جو ہر تدریجی ویکٹر کی نمائندگی کرتا ہے۔ لہذا اگر تمام نکات یا شدت ایک ہی سمت میں جھوٹ بولتی ہیں تو ، اس سمت کے لئے ہسٹوگرام 45 ڈگری کہتے ہیں ، ہسٹگرام 45 ڈگری پر ہوتا ہے۔
تو اب ہم کیا کرتے ہیں یہ ہے کہ ہم ہر خلیے کو کونیی ٹوکریوں میں تقسیم کرتے ہیں ، جہاں ہر بن میلان سمت (جیسے x ، y) کے مساوی ہے۔ دلال اور ٹرگس پیپر میں ، انھوں نے 9 ڈبوں 01-180 ° (20 ° ہر بِن) کا استعمال کیا۔ اس سے 64 ویکٹر کو مؤثر طریقے سے صرف 9 قدروں میں کمی آتی ہے۔ تو جو کچھ ہم نے کیا ہے اس سے سائز کم ہوجاتا ہے لیکن تمام کلیدی معلومات رکھی جاتی ہیں جن کی ضرورت ہے۔
ہاگ کا حساب کتاب کرنے کا اگلا مرحلہ معمول کی بات ہے ، ہم روشنی کی تبدیلیوں یعنی چمک اور تضاد سے اناریئرنس کو یقینی بنانے کے لئے میلان کو معمول بناتے ہیں۔
اس شبیہہ میں ، شدت والی قدریں مربوط سمت کے مطابق مربع میں دکھائی گئیں اور ایک دوسرے کے مابین 50 کا فرق ہے
∆ H = 50، ∆ v = 50؛ │∆│ = √50 2 +50 = 70.72 ، 70.72 / 100 = 0.707
ہم سب کو 70. the the7 حاصل کرنے والے تدریجی وسعت کے ذریعہ ویکٹروں کو تقسیم کرتے ہیں ، یہ معمول ہے۔
اسی طرح ، اگر ہم شدت کو تبدیل کرتے ہیں یا اس کے برعکس کو تبدیل کرتے ہیں تو ہمیں نیچے کی اقدار مل جاتی ہیں۔
∆ H = 50، ∆ v = 50؛ │∆│ = √50 2 +50 = 70.72 ، 70.72 / 100 = 0.707؛ ∆ H = 100، ∆ v = 100؛ │∆│ = √100 2 +100 = 141.42 ، 141.42 / 100 = 1.41
معمولات سیل کی سطح پر نہیں ہوتا ہے ، بجائے اس کے کہ یہ بلاک کی سطح میں ہوتا ہے ، لہذا یہاں بلاکس بنیادی طور پر 4 خلیوں کا ایک گروپ ہوتے ہیں ، اس سے پڑوسی بلاکس کو بھی خاطر میں لایا جاتا ہے تاکہ تصویر کے بڑے حصوں کو ملحوظ خاطر رکھتے ہوئے معمول بن جائے۔
اب آئیے کوڈ کو دیکھیں
این پی درآمد سی وی 2 کے طور پر نپٹی کو درآمد کریں matplotlib.pyplot کے طور پر plt # لوڈ شبیہہ پھر گرے اسکیل امیج = cv2.imread ('ہاتھی. jpg ') گرے = cv2.cvt કલر (تصویر، cv2.COLOR_BGR2GRAY) # اصل تصویر دکھائیں cv2.imshow (' ان پٹ امیج '، امیج) cv2.waitKey (0) # پیرامیٹرز ، سیل سائز اور بلاک سائز # hxw پکسلز میں طے کرنا سیل_سائز = (8 ، 8) # hxw سیلوں میں block_size = (2، 2) # الینٹیشن بِنز nbins کی تعداد = 9 # اوپن سی وی کے HOG ڈیسکرپٹر # winSize کا استعمال اس تصویر کا سائز ہے جس میں سیل سائز کے ایک سے زیادہ حصے hog = cv2.HOGDescriptor (_WinSize = (سرمئی. شیپ // سیل_سائز * سیل_سائز ، بھوری رنگ کی شکل // سیل_سائز * سیل_سائز) ، _ بلاک سائز = (بلاک_ سائز * سیل_زائز ، بلاک_ سائز * سیل_زائز) ، _ بلاک سٹرائڈ = (سیل_سائز ، سیل_سائز) ، _ سیلز = (سیل_سائز ، سیل_سائز) ، _ اینبینس = اینبینز # جو ہم استعمال کرتے ہیں وہ نیمی شکل بنائیں۔ hog_features بنانے کے لئے n_cells = (خاکستری شکل // سیل_سائز ، گرے.شےپ // سیل_سائز) # ہم بلاکس کو قطاروں کے ذریعہ پہلے ترتیب دیتے ہیں۔ # ہاگ_فیٹس میں اب ہر سمت کے لئے تدریجی طول و عرض ہوتا ہے ، # ہر گروپ کے لئے اس کے گروپ کے ہر سیل کے لئے۔ فہرستیں قطاروں اور پھر کالموں کے ذریعہ ہوتی ہیں۔ hog_feats = hog.compute (گرے).reshape (n_cells - block_size + 1، n_cells - block_size + 1، block_size، block_size، nbins).transpose ((1، 0، 2، 3، 4)) # تدریج واقفیت گریڈینٹ = np.zeros ((n_cells، n_cells، nbins)) کو ذخیرہ کرنے کے لئے ہمارے گریجینٹ سرنی کو نبن طول و عرض کے ساتھ بنائیں # طول و عرض کی صف بنائیں سیل_کاونٹ = np.full ((n_cells، n_cells، 1)، 0، dtype = int) # بلاک نارملائزیشن آف آف ی کیلئے رینج میں (block_size): آف_ x رینج میں (block_size): میلان - block_size + آف_y + 1 ، آف_ x: n_cells - block_size + آف_ x + 1] + \ hog_feats سیل_کاؤنٹ - block_size + آف_y + 1 ، off_x: n_cells - block_size + off_x + 1] + = 1 # اوسط gradients کے gradients کے / = cell_count Matplotlib استعمال کرتے ہوئے # پلاٹ سورؤں # زاویہ 360 / nbins * سمت color_bins = 5 plt.pcolor (gradients کے) plt.gca (). invert_yaxis () plt.gca (). set_aspect ('برابر'، ایڈجسٹ = 'باکس') plt.colorbar () plt.show () cv2.destroyAllWindows ()
تصویر سے پتہ چلتا ہے کہ کس طرح ان پٹ کی تصویر HOG کی نمائندگی کے طور پر پیش کی جاتی ہے۔
HAAR جھرن کے درجہ بند
جیسا کہ پہلے تبادلہ خیال کیا گیا ہے ، ہم کسی شبیہہ سے خصوصیات نکال سکتے ہیں اور ان خصوصیات کو اشیاء کی درجہ بندی کرنے یا ان کا پتہ لگانے کے لئے استعمال کرسکتے ہیں۔
ہار کاسکیڈ کلاسیفائر کیا ہیں؟ شبیہ میں موجود اشیاء کی نشاندہی کرنے کے لئے
آبجیکٹ کا پتہ لگانے کا ایک طریقہ جو ہار کو کلاسیفائیرز (کاسکیڈ) کی ایک سیریز میں داخل کرتا ہے۔ وہ ایک طرح کی چیز کی نشاندہی کرنے کے لئے تربیت یافتہ ہیں ، تاہم ، ہم ان میں سے کئی متوازی مثال کے طور پر استعمال کرسکتے ہیں جیسے آنکھیں اور چہروں کا ایک ساتھ پتہ لگانا۔
HAAR درجہ بندی کی وضاحت:
ہر کلاسیفائیرس کو بہت ساری مثبت تصاویر (یعنی موجود شے کے ساتھ کی تصاویر) اور
منفی تصاویر (یعنی اس شے کی موجودگی کے بغیر تصاویر) کا استعمال کرتے ہوئے تربیت دی جاتی ہے ۔
ایک بار جب ہمارے پاس یہ تصاویر ہیں ، تو ہم آئتاکار بلاکس کی سلائیڈنگ ونڈوز کا استعمال کرکے خصوصیات نکالتے ہیں ۔ یہ خصوصیات (HAAR خصوصیات) ایک قدر کی ہیں اور سیاہ مستطیلوں سے سفید مستطیل کے تحت پکسل کی شدت کے جوڑے کو جمع کرکے اس کا حساب لگایا جاتا ہے ۔
تاہم ، یہ حساب کی ایک مضحکہ خیز تعداد ہے ، یہاں تک کہ 24 x 24 پکسلز (180،000 خصوصیات تیار کی گئی) کی ایک کھڑکی کے لئے بھی۔
چنانچہ محققین نے انٹیگرل امیجز کے نام سے ایک ایسا طریقہ وضع کیا جس نے چار صفوں کے حوالوں سے اس کا حساب لیا۔ تاہم ، ان کے پاس اب بھی 180،000 خصوصیات موجود ہیں اور ان میں سے بیشتر کی کوئی حقیقی قیمت نہیں ہے۔
بڑھا رہا ہے تو Freund & Schapire کے ساتھ سب سے زیادہ معلوماتی خصوصیات، کا تعین کرنے کے لئے استعمال کیا گیا تھا AdaBoost اور یہ تصویر میں سب سے زیادہ معلوماتی خصوصیات کو ملا. بوسٹنگ وہ عمل ہے جس کے ذریعہ ہم مضبوط درجہ بندی کرنے کے لئے کمزور درجہ بندیوں کا استعمال کرتے ہیں ، محض غلط درجہ بندیوں پر بھاری وزن والے جرمانے تفویض کرکے۔ 180،000 خصوصیات کو 6000 تک کم کرنا ، جو اب بھی کافی خصوصیات ہیں۔
ان 6000 خصوصیات میں ، کچھ دوسروں کے مقابلے میں زیادہ معلوماتی ہوں گے۔ لہذا اگر ہم سب سے پہلے یہ معلوم کرنے کے لئے انتہائی معلوماتی خصوصیات کا استعمال کرتے ہیں کہ آیا اس خطے میں ممکنہ طور پر کوئی چہرہ آتا ہے (جھوٹی مثبت چیزیں کوئی بڑی بات نہیں ہوگی)۔ ایسا کرنے سے تمام 6000 خصوصیات کا ایک ساتھ حساب کرنے کی ضرورت ختم ہوجاتی ہے۔ اس تصور کو کاسکیڈ آف کلاسیفائیر کہا جاتا ہے - چہرے کی نشاندہی کرنے کے لئے ، وائلا جونز کے طریقہ کار نے 38 مراحل کا استعمال کیا۔
چہرے اور آنکھوں کا پتہ لگانا
لہذا HAAR کیسکیڈس کے بارے میں کچھ نظریاتی معلومات حاصل کرنے کے بعد ہم آخر کار اس پر عمل درآمد کرنے جا رہے ہیں تاکہ چیزوں کو بہت زیادہ واضح کرنے کے ل parts ہم حصوں میں موجود اسباق کو توڑ دیں گے ، پہلے ہم سامنے والے چہرے کا پتہ لگائیں گے اس کے بعد ہم سامنے والے چہرے کا پتہ لگانے کے ل to آگے بڑھیں گے۔ آنکھیں اور آخر کار ہم ویب کیم کے ذریعہ چہرے اور آنکھوں کی براہ راست شناخت کریں گے۔
لہذا اس کے لئے ہم پہلے سے تربیت یافتہ کلاسیفائیرز استعمال کرنے جارہے ہیں جو اوپن سی وی نے.xML فائلوں کے بطور مہیا کیے ہیں ، XML کا مطلب کھینچا جاتا ہے مارک اپ زبان ، یہ زبان بڑی مقدار میں ڈیٹا اسٹور کرنے کے لئے استعمال ہوتی ہے ، آپ اس پر ڈیٹا بیس بھی بناسکتے ہیں۔
آپ اس لنک پر ان درجہ بندیوں تک رسائی حاصل کرسکتے ہیں ۔
چہرہ شناخت
آئیے سامنے والے چہرے کی نشاندہی کرنے کی کوشش کریں ، آپ کو فرنلٹ چہرے کا پتہ لگانے والے کے جھرن تک رسائی حاصل ہوسکتی ہے۔ XML فائل حاصل کرنے کے لئے زپ فائل کو صرف نکالیں۔
جیسا NP درآمد numpy درآمد cv2 # ہم جہاں ہماری کو OpenCV کی CascadeClassifier تقریب اشارہ # classifier کے (XML فائل کی شکل) محفوظ کیا جاتا ہے، ایک ہی فولڈر میں کوڈ اور classifier کے رکھنے کے لئے یاد face_cascade = cv2.CascadeClassifier ('haarcascade_frontalface_default.xml') # لوڈ ہماری تصویر پھر اس کو گرے اسکیل امیج = cv2.imread ('Trump.jpg') گرے = cv2.cvt कलور (شبیہ ، cv2.COLOR_BGR2GRAY) میں تبدیل کرتی ہے # ہمارے درجہ بندے نے پائے جانے والے چہرے کی آر او آئی کو بطور ٹیپل موڑ دیا کوآرڈینیٹ اور نیچے دائیں مربوطات # یہ فہرستوں کی فہرست لوٹاتا ہے ، جو مختلف چہروں کا پتہ لگاتے ہیں۔ چہرہ = چہرہ_کیسکاڈ۔ڈیٹیکٹ ملٹی اسکیل (گرے ، 1.3 ، 5) # جب کسی چہروں کا پتہ نہیں چلتا ہے تو ، چہرہ_کلاسفائیر واپس ہوجاتا ہے اور خالی ٹپل اگر چہرے ہوتے ہیں (): پرنٹ ("کوئی چہرہ نہیں ملا") # ہم اپنے چہروں کو سرانجام دیتے ہیں اور (چہرے میں ہر چہرے پر ایک مستطیل # کھینچتے ہیں) (x، y، w، h) چہروں میں: cv2. करेگل (تصویر ، (x ، y) ، (x + w ، y + h) ، (127،0،255) ، 2) cv2.imshow ('چہرہ کھوج' ، تصویر) cv2.waitKey (0) cv2.destroyAllWindows ()
اب آئیے چہرے اور آنکھوں کا پتہ لگانے کو ایک ساتھ جوڑیں ، آپ کو اسی زپ فائل میں آنکھوں کا پتہ لگانے والے کے جھرن تک رسائی حاصل ہوسکتی ہے۔
این پی درآمد سی وی 2 فیس_کلاسیفائر = سی وی 2۔ کاسکیڈ کلاسیفائر ('ہارکاسکیڈ_فرنٹ لیس_ڈیفالٹ. ایکس ایم ایل') آئی_کلاسفائر = سی وی 2۔کیسکیڈ کلاسیفائر ('ہارکاسکیڈ_ایی ایم ایل') img = cv2.imread ('سرما = cp2 ') اسمارٹ سیپی جی سی 2 cv2.COLOR_BGR2GRAY) faces = face_classifier.detectM MultiScale (سرمئی ، 1.3 ، 5) # جب کسی چہرے کا پتہ نہیں چلتا ہے تو ، face_classifier لوٹتا ہے اور اگر چہرے ہوتے ہیں تو خالی tuple (): (x ، y، w، h کے لئے "کوئی چہرہ نہیں ملا") پرنٹ کریں۔ ) چہروں میں: cv2.rectangle (img ، (x، y)، (x + w، y + h)، (127،0،255)، 2) cv2.imshow ('img'، img) roi_gray = سرمئی roi_color = img آنکھوں میں (سابق ، ey ، ew ، eh) کیلئے آنکھوں = eye_classifier.detect ملٹی اسکیل (roi_gray) cv2.waitKey (0) : cv2.rectangle (roi_color، (سابقہ، ey)، (سابق + ew، ey + eh)، (255،255،0)، 2) cv2.imshow ('img'، img) cv2.waitKey (0) cv2.destroyAllWindows () cv2.waitKey (0)
لہذا یہ کوڈ اتنا ہی ہے جتنا چہرے کا پتہ لگانے کے لئے کوڈ ، لیکن یہاں ہم نے آنکھوں کے جھرنوں اور ان کا پتہ لگانے کا طریقہ شامل کیا ہے ، جیسا کہ آپ دیکھ سکتے ہیں کہ ہم نے چہرے کے گرے اسکیلڈ ورژن کا پتہ لگانے والے ملٹی اسکیل کے پیرامیٹر کے طور پر منتخب کیا ہے۔ آنکھیں ، جو ہمیں گنتی میں کمی لاتی ہیں کیوں کہ ہم صرف اس علاقے میں صرف آنکھیں تلاش کرنے جا رہے ہیں۔
براہ راست چہرے اور آنکھوں کا پتہ لگانا
لہذا اب تک ہم نے چہرے اور آنکھوں کی کھوج کی ہے ، اب ویب کیم سے براہ راست ویڈیو اسٹریم کے ذریعہ اسی کو نافذ کریں ۔ اس میں ہم چہرے اور آنکھوں کی یکساں پتہ لگائیں گے لیکن اس بار ہم براہ راست اسٹریم ویب کیم کے ذریعہ یہ کام کر رہے ہیں۔ زیادہ تر ایپلیکیشن میں آپ کو اپنا چہرہ اس کے آس پاس کے خانے کے ساتھ اجاگر نظر آتا ہے ، لیکن یہاں ہم نے کچھ مختلف طریقے سے ایسا کیا ہے کہ آپ کو اپنا چہرہ کٹ جاتا ہے اور آنکھیں صرف اسی میں شناخت ہوجاتی ہیں۔
لہذا یہاں ہم چہرے اور آنکھوں کے درجہ بندی دونوں کو درآمد کر رہے ہیں ، اور چہرے اور آنکھوں کا پتہ لگانے کے لئے تمام پروسیسنگ کرنے کے لئے ایک فنکشن کی تعریف کی ہے۔ اور اس کے بعد ویب کیم اسٹریم شروع ہوا اور چہرے اور آنکھوں کا پتہ لگانے کے ل the چہرہ پکڑنے والا فنکشن کہا۔ چہرہ پکڑنے والے فنکشن کے اندر ہم جس پیرامیٹر کی وضاحت کر رہے ہیں وہ براہ راست ویب کیم اسٹریم کی مستقل تصاویر ہیں
درآمد cv2 درآمد نپپی کے بطور این پی فیس_کلاسفائیر = cv2. کاسکیڈ کلاسیفائر ('ہارکاسکیڈ_فرنٹ لیس_ڈیفالٹ. ایکس ایم ایل') آئی_کلاسفائر = cv2. کاسکیڈکلیسیفائر ('ہارکاسکیڈ_ایی ایم ایل') ڈیف فیس_ڈیٹیکٹر ( # gvccyscv_cc2 cv ): # cv2 cvv ccv: (img، cv2.COLOR_BGR2GRAY) چہرے = چہرہ_کلاسفیر.ڈٹیکٹ ملٹی اسکیل (گرے، 1.3، 5) اگر چہرے ہیں (): چہرے میں (x، y، w، h) کے لئے img واپس لو : x = x - 50 w = w + 50 y = y - 50 h = h + 50 cv2.rectangle (img، (x، y)، (x + w، y + h)، (255،0،0)، 2) روئی_ گرے = گرے روئی_کالور = امگ آنکھیں = آنکھوں میں ( سابق ، ey ، ew ، eh) کیلئے eye_classifier.detectM MultiScale (roi_gray) : cv2.rectangle (roi_color، (سابق، سے ey)، (سابق + EW، سے ey + نا)، (0،0،255)، 2) roi_color = cv2.flip (roi_color، 1) واپسی roi_color ٹوپی = cv2.VideoCapture (0) جبکہ سچ ہے: ریٹ ، فریم = کیپ۔ریڈ () cv2.imshow ('ہمارا چہرہ ایکسٹریکٹر' ، فیس_ڈیٹیکٹر (فریم)) اگر cv2.waitKey (1) == 13: # 13 انٹر کلید بریک کیپ ہے۔ براہ کرم () cv2.destroyAllWindows ()
کاسکیڈ کلاسیفائیرز کو مد نظر رکھتے ہوئے
ان پٹ امیج کے علاوہ ڈیٹٹمیٹ اسکیل کے اندر بیان کردہ پیرامیٹرز کی مندرجہ ذیل اہمیت ہے
ہمارا درجہ بندی کرنے والا۔ ملٹ اسکیل (ان پٹ امیج ، اسکیل فیکٹر ، کم سے کم پڑوسی)
- اسکیل فیکٹر یہ بتاتا ہے کہ ہر بار جب ہم پیمانہ کرتے ہیں تو ہم شبیہہ کے سائز کو کتنا کم کرتے ہیں۔ جیسے چہرے کی کھوج میں ہم عام طور پر 1.3 استعمال کرتے ہیں۔ اس کا مطلب یہ ہے کہ ہم ہر بار اس کی تصویر کو 30 فیصد کم کرتے ہیں۔ چھوٹی قدریں ، جیسے 1.05 کی گنتی میں زیادہ وقت لگے گا ، لیکن پتہ لگانے کی شرح میں اضافہ ہوگا۔
- کم پڑوسیوں نے اس کی ایک مثبت شناخت پر غور کرنے کے لئے ہر ممکنہ ونڈو کے پڑوسیوں کی تعداد بتائی ہے۔ عام طور پر 3-6 کے درمیان مقرر کیا جاتا ہے۔ یہ حساسیت کی ترتیب کے طور پر کام کرتا ہے ، کم اقدار کبھی کبھی ایک ہی چہرے پر ملٹی پلس کا پتہ لگاسکتی ہے۔ اعلی قدریں کم غلط مثبت کو یقینی بنائیں گی ، لیکن آپ کو کچھ چہروں کی کمی محسوس ہوگی۔
ویڈیوز میں کار اور پیدل چلنے والوں کا پتہ لگانا
اب ہم HAAR جھرنوں کا استعمال کرتے ہوئے ویڈیو میں پیدل چلنے والوں اور کاروں کا پتہ لگائیں گے ، لیکن ایسی صورت میں کوئی ویڈیو لوڈنگ نہیں ہورہی ہے اور غلطی کے بغیر کوڈ مرتب کررہا ہے ، آپ کو مندرجہ ذیل مراحل پر عمل کرنے کی ضرورت ہے۔
اگر کوڈ چلانے کے بعد کوئی ویڈیو بوجھ نہ ہو تو ، آپ کو ہماری اوپنکیو_فیمپیگ ڈاٹ پی ایل کو کاپی کرنے کی ضرورت پڑسکتی ہے : اوپن سی وی \ ذرائع \ 3rdparty \ ffmpeg جہاں سے آپ کا اشتہار نصب ہے اسے چسپاں کریں جیسے C: ac Anaconda2
ایک بار جب اس کی کاپی ہوجائے تو آپ کو اوپن سی وی کے ورژن کے مطابق فائل کا نام تبدیل کرنے کی ضرورت ہوگی۔ اگر آپ اوپن سی وی 2.4.13 استعمال کررہے ہیں تو اس فائل کا نام اس طرح سے رکھیں: opencv_ffmpeg2413_64.dll یا opencv_ffmpeg2413.dll (اگر آپ ہو ایک X86 مشین) کا استعمال کرتے ہوئے opencv_ffmpeg310_64.dll آپ کو ایک X86 مشین استعمال کر رہے ہیں یا opencv_ffmpeg310.dll ()
یہ جاننے کے لئے کہ آپ python.exe کہاں نصب ہے ، صرف کوڈ کی ان دو لائنوں کو چلائیں ، اس جگہ کو پرنٹ کرے گا جہاں اژدہن نصب ہے۔
درآمد سیس پرنٹ (sys.executable)
اب اگر آپ نے یہ اقدامات کامیابی کے ساتھ انجام دیئے ہیں تو چلیں ، پیدل چلنے والوں کا پتہ لگانے کے کوڈ میں جائیں ،
پیدل چلنے والوں کا پتہ لگانے کے لئے اور یہاں منسلک زپ فائل سے آپ کا کیسکیڈ رکھ سکتے ہیں۔
درآمد سی وی 2 امپورٹ این پی کے بطور این پی # ہمارا جسمانی درجہ بندی باڈی_کلاسفائیر = cv2.CacadeClassifier ('haarcascade_fullbody.xML') بنائیں # ویڈیو فائل کے ل video ویڈیو کیپچر شروع کریں ، ہم یہاں وہ ویڈیو فائل استعمال کررہے ہیں جس میں پیدل چلنے والوں کو کیپ = cv2.VideoCapture ('چلنا.اوی') # ویڈیو کو کامیابی کے ساتھ لوڈ کرنے کے بعد لوپ ایک بار جب کیپ.ایس اوپن (): # ویڈیو ریٹ کے ہر فریم کو پڑھنا ، فریم = کیپ ریڈ () # یہاں ہم فریم کا سائز تبدیل کر رہے ہیں ، اس کے نصف سائز ، ہم درجہ بندی کو تیز کرنے کے لئے کوششیں کر رہے ہیں کیونکہ بڑی تصاویر کے پاس سلائیڈ کرنے کے لئے بہت زیادہ ونڈوز موجود ہیں ، لہذا مجموعی طور پر ہم قرارداد کو کم کرتے ہیں آدھی طرف کی ویڈیو جو 0.5 کی طرف اشارہ کرتی ہے ، اور ہم اس میں تیزی سے رکاوٹ کا طریقہ بھی استعمال کر رہے ہیں جو # انٹرنلینر فریم = cv2.resize (فریم ، کوئی نہیں ، fx = 0.5 ، fy = 0.5 ، انٹرپلیشن = cv2.INTER_LINEAR) گرے = cv2 ہے۔ cvtColor (فریم ، cv2.COLOR_BGR2GRAY) # ہمارے جسمانی درجہ بندی کرنے والے اداروں = جسم_کلاسفائیر.ڈٹیکٹ ملٹی اسکیل (گرے ، 1.2 ، 3) کے پاس فریم پاس کریں # جسموں میں (x ، y ، w ، h) کے لئے شناخت شدہ کسی بھی جسم کے لئے با boxesنڈنگ بکس نکالیں : cv2. مستطیل (فریم ، (x ، y) ، (x + w ، y + h) ، (0 ، 255 ، 255) ، 2) cv2.imshow ('پیدل چلنے والوں' ، فریم) اگر cv2.waitKey (1) == 13: # 13 انٹر کیک بریک کیپ ہے۔ براہ کرم () cv2.destroyAllWindows ()
ویڈیو میں پیدل چلنے والوں کی کامیابی کے ساتھ پتہ لگانے کے بعد ، آئیے کار کا پتہ لگانے کے کوڈ پر جائیں ، آپ یہاں سے پیدل چلنے والوں کا پتہ لگانے کے لئے جھرن لگا سکتے ہیں۔
درآمد سی وی 2 درآمد کا وقت درآمد نامی بطور این پی # ہمارے جسمانی طبقاتی کار بنائیں۔ cv2.CacadeClassifier ('haarcascade_car.xml') # ویڈیو فائل کے لئے ویڈیو کیپچر شروع کریں = cv2.VideoCapture ('car.avi') # ویڈیو کامیابی کے ساتھ ہی لوپ ہوجائے بھری ہوئی حالت میں جبکہ کیپ آئس اوپنڈ (): ٹائم سلیپ (.05) # پہلے فریم ریٹ کو پڑھیں ، فریم = کیپ.ریڈ () گرے = سی وی 2 سی وی ٹیٹ کلر (فریم ، cv2.COLOR_BGR2GRAY) # ہماری کار کلاسیفائر کاروں = کار_کلاسفائیر کو پاس فریم .ڈٹیکٹ ملٹی اسکیل (گرے ، 1.4 ، 2) # کاروں میں (x، y، w، h) کے لئے شناخت شدہ کسی بھی جسم کے لئے باؤنڈنگ بکس نکالیں : cv2. ਸੱਚ رنگ (فریم، (x، y)، (x + w، y + h)) ، (0 ، 255 ، 255) ، 2) cv2.imshow ('کاریں' ، فریم) اگر cv2.waitKey (1) == 13: # 13 انٹر کلید بریک کیپ ہے۔ براہ کرم () cv2.destroyAllWindows ()
آپ نے محسوس کیا ہے کہ ہم نے وقت شامل کیا ہے۔ نیند (.05) ، یہ فریم ریٹ میں صرف ایک تاخیر ہے تاکہ آپ اس بات کی تصدیق کرسکیں کہ تمام کاروں کی صحیح شناخت ہوگئ ہے ، یا آپ اس میں کمنٹ لیبل شامل کرکے آسانی سے اسے دور کرسکتے ہیں۔
اس مضمون کو راجیف رتن کے ذریعہ تیار کردہ اڈیمی پر ڈیپ لرننگ کورس کے ساتھ ازگر میں ماسٹر کمپیوٹر وژن ™ اوپن سی وی 4 سے ملا ہے ، کمپیوٹر وژن اور ازگر کے بارے میں مزید معلومات کے ل it اس کو سبسکرائب کریں۔