- سانچہ تخلیق
- خط کا پتہ لگانا
- نمبر پلیٹ کا پتہ لگانا
- میٹلائب کا استعمال کرتے ہوئے گاڑیوں کے لائسنس پلیٹ نمبر کا پتہ لگانے کے نظام کا کام
کیا آپ نے کبھی تعجب کیا ہے کہ اے این پی آر (خودکار نمبر پلیٹ کی شناخت) کا نظام کیسے چلتا ہے؟ میں آپ کو اس کے پیچھے کا تصور بتاتا چلوں ، اے این پی آر سسٹم کے کیمرا نے گاڑی کے لائسنس پلیٹ کی تصویر کھنچوالی اور پھر متعدد الگورتھم کے ذریعہ اس شبیہہ کو متن کی شکل میں الفا عددی تبدیلی کی صورت میں پیش کیا جا.۔ اے این پی آر کا نظام بہت ساری جگہوں پر استعمال کیا جاتا ہے جیسے پیٹرول پمپ ، شاپنگ مالز ، ہوائی اڈوں ، شاہراہوں ، ٹول بوتھس ، ہوٹلز ، اسپتالوں ، پارکنگ لاٹس ، ڈیفنس اور ملٹری چیک پوائنٹس وغیرہ۔
اس نمبر پلیٹ کا پتہ لگانے کے لئے بہت سارے امیج پراسیسنگ ٹولس دستیاب ہیں ، لیکن یہاں اس ٹیوٹوریل میں ہم گاڑی لائسنس پلیٹ نمبر کو ٹیکسٹ فارمیٹ میں لانے کے لئے میٹابیلب امیج پروسیسنگ کا استعمال کریں گے ۔ اگر آپ MATLAB یا تصویری پروسیسنگ کے ساتھ نئے ہیں ، تو ہمارے پچھلے MATLAB منصوبوں کو چیک کریں:
- میٹلیب کے ساتھ شروع کرنا: ایک فوری تعارف
- MATLAB کا استعمال کرتے ہوئے تصویری پروسیسنگ کے ساتھ آغاز کرنا
پہلے ، میں آپ کو اس تصور کے بارے میں بتاتا چلوں کہ ہم نمبر پلیٹوں کا پتہ لگانے کے لئے ہم استعمال کر رہے ہیں۔ اس منصوبے کے لئے تین پروگراموں یا '.m' فائلیں ہیں۔
- سانچہ تخلیق ( template_creation.m ) - یہ اور حرفی ہندسی کریکٹر کی محفوظ کردہ تصاویر کو فون کرنے کے لئے استعمال کیا جاتا ہے تو MATLAB یاد میں ایک نئے سانچے کے طور پر ان کو بچانے کے.
- خط کی کھوج ( لیٹر_ڈٹیکشن. م ) - ان پٹ امیج کے حروف کو پڑھتے ہیں اور اسی طرح کے حرفی نمبر سے زیادہ ملتے ہیں ۔
- پلیٹ ڈیٹیکشن ( Plate_detection.m ) - شبیہہ پر کارروائی کریں اور پھر نمبر کا پتہ لگانے کے لئے مذکورہ بالا دو ایم فائلوں پر کال کریں۔
اب ، ہم ان ایم فائلوں کو کوڈ کرنے کے طریقہ کے بارے میں سیکھیں گے اور کوڈنگ شروع کرنے سے پہلے آپ کو کیا کرنا ہے۔ اس ٹیوٹوریل سے استفادہ کرنے کے بعد ، آپ کو اس منصوبے کے آخر میں کوڈ فائلوں اور کام کی وضاحت کی ویڈیو مل سکتی ہے۔
سانچہ تخلیق
فائلوں کو محفوظ اور ذخیرہ کرنے کے لئے پہلے پروجیکٹ کے لئے ایک فولڈر بنائیں (میرے فولڈر کا نام نمبر پلیٹ کا پتہ لگانا ہے )۔ ہم نے سبھی حرفوں اور نمبروں کی بائنری تصاویر کو ذیلی فولڈر میں محفوظ کیا ہے جس کا نام ' الفا' ہے ۔
اب ، MATLAB میں ایڈیٹر ونڈو کھولیں ، جیسا کہ نیچے کی تصویر میں دکھایا گیا ہے ،
اگر آپ MATLAB کی بنیادی اصطلاحات سے واقف نہیں ہیں تو میں آپ کو مشورہ دیتا ہوں کہ لنکڈ ٹیوٹوریل کو چیک کریں۔
اب ، مندرجہ ذیل کوڈ کو کاپی کریں اور ٹیمپلیٹ_کرائشن ڈاٹ ایم فائل میں پیسٹ کریں ، اور پروجیکٹ کے فولڈر میں ( نمبر پلیٹ کا پتہ لگانے ) فائل کو محفوظ کریں ۔ تصویری سانچوں کی فائلوں سمیت اس منصوبے سے متعلق تمام فائلیں یہاں سے ڈاؤن لوڈ کی جاسکتی ہیں۔ اس پروجیکٹ کے آخر میں دی گئی ویڈیو کو بھی چیک کریں ۔
٪ حروف A = imread ('alpha / A.bmp')؛ B = imread ('alpha / B.bmp')؛ C = imread ('alpha / C.bmp')؛ D = imread ('alpha / D.bmp')؛ E = imread ('alpha / E.bmp')؛ F = imread ('alpha / F.bmp')؛ G = imread ('alpha / G.bmp')؛ H = imread ('alpha / H.bmp')؛ I = imread ('alpha / I.bmp')؛ J = imread ('alpha / J.bmp')؛ K = imread ('alpha / K.bmp')؛ L = imread ('alpha / L.bmp')؛ M = imread ('alpha / M.bmp')؛ N = imread ('alpha / N.bmp')؛ O = imread ('alpha / O.bmp')؛ P = imread ('alpha / P.bmp')؛ Q = imread ('alpha / Q.bmp')؛ R = imread ('alpha / R.bmp')؛ S = imread ('alpha / S.bmp')؛ T = imread ('alpha / T.bmp')؛ U = imread ('alpha / U.bmp')؛ V = imread ('alpha / V.bmp')؛ W = imread ('alpha / W.bmp')؛ X = imread ('الفا / X.bmp ')؛ Y = imread ('alpha / Y.bmp')؛ Z = imread ('alpha / Z.bmp')؛ ٪ قدرتی نمبر ایک = imread ('الفا / 1.bmp')؛ دو = imread ('الفا / 2.bmp')؛ تین = imread ('الفا / 3.bmp')؛ چار = imread ('الفا / 4.bmp')؛ پانچ = پڑھنا ('الفا / 5.bmp')؛ چھ = پڑھا ہوا ('الفا / 6.bmp')؛ سات = imread ('الفا / 7.bmp')؛ آٹھ = imread ('الفا / 8.bmp')؛ نو = imread ('الفا / 9.bmp')؛ صفر = imread ('الفا / 0.bmp')؛ حرفی خط کے لئے صف تیار کرنا =؛ نمبر نمبر کے لئے صف تیار کرنا =؛ نیو ٹیمپلٹس =؛ save ('NewTemplates'، 'NewTemplates') سب کو صاف کریں
یہاں ، مندرجہ بالا کوڈ میں ہم ' ایمریڈ () ' کمانڈ استعمال کرکے نقشوں کو متغیر میں محفوظ کررہے ہیں ۔ اس فنکشن کا استعمال فولڈر سے یا پی سی کے کسی بھی مقام سے ایم اے ٹی ایل بی میں موجود تصاویر کو کال کرنے کے لئے کیا جاتا ہے۔ آئیے مذکورہ کوڈ سے ایک مثال لیتے ہیں۔
A = imread ('alpha / A.bmp')؛
جہاں A متغیر ہے ، اور ' الفا / A.bmp' میں ، 'الفا' فولڈر کا نام ہے اور ' A.bmp' فائل کا نام ہے۔
پھر ' حرف ' اور ' نمبر ' کا ایک میٹرکس بنائیں اور اسے ' Save (فائل کا نام ، متغیر)' کمانڈ استعمال کرکے متغیر ' NewTemplates ' میں محفوظ کریں ۔
حرفی خط کے لئے صف تیار کرنا =؛ نمبر نمبر کے لئے صف تیار کرنا =؛ نیو ٹیمپلٹس =؛ save ('NewTemplates'، 'NewTemplates') سب کو صاف کریں
اب ایک نئے ایڈیٹر ونڈو میں ، لیٹر_ڈیٹکشن ڈاٹ ایم کوڈنگ شروع کریں ۔
خط کا پتہ لگانا
یہاں ہم دوسری کوڈ فائل تشکیل دے رہے ہیں جس کا نام لیٹر_ڈیٹیکشن.م ہے ۔ اب ، اس فائل میں درج ذیل کوڈ کو کاپی اور پیسٹ کریں اور اس منصوبے کے فولڈر میں لیٹر_ڈٹیکشن کے نام سے فائل کو محفوظ کریں ۔ یہ فائل یہاں سے ڈاؤن لوڈ کی جاسکتی ہے ، اس منسلک زپ فائلوں میں اس نمبر پلیٹ کا پتہ لگانے کے منصوبے سے متعلق دیگر فائلیں بھی شامل ہیں۔
فنکشن لیٹر = readLetter (سنیپ) لوڈ NewTemplates snap = imresize (snap،)؛ rec =؛ این = 1 کے لئے: لمبائی (نیو ٹیملیپلیٹس) کور = کور 2 (نیو ٹیمپلٹس {1، n}، سنیپ)؛ rec =؛ آخر انڈ = تلاش (rec == زیادہ سے زیادہ (rec))؛ ڈسپلے (تلاش (rec == زیادہ سے زیادہ (rec)))؛ حروف کی فہرستیں۔ اگر ind == 1 - ind == 2 حرف = 'A'؛ elseif ind == 3 - ind == 4 حرف = 'B'؛ elseif ind == 5 خط = 'C' elseif ind == 6 - ind == 7 خط = 'D'؛ elseif ind == 8 خط = 'E'؛ elseif ind == 9 خط = 'F'؛ elseif ind == 10 خط = 'G'؛ elseif ind == 11 خط = 'H'؛ elseif ind == 12 خط = 'میں'؛ elseif ind == 13 خط = 'J'؛ elseif ind == 14 خط = 'K'؛ elseif ind == 15 خط = 'L'؛ elseif ind == 16 خط = 'M'؛ elseif ind == 17 خط = 'N'؛ elseif ind == 18 - ind == 19 خط = 'O'؛ elseif ind == 20 - ind == 21 خط = 'P'؛ elseif ind == 22 - ind == 23 خط = 'Q'؛ elseif ind == 24 - ind == 25 خط = 'R'؛ elseif ind == 26 خط = 'S'؛ elseif ind == 27 خط = 'T'؛ elseif ind == 28 خط = 'U'؛ elseif ind == 29 خط = 'V'؛ elseif ind == 30 حرف = 'W'؛ elseif ind == 31 خط = 'X'؛ elseif ind == 32 حرف = 'ی'؛ elseif ind == 33 خط = 'Z'؛ ٪ * - * - * - * - * ٪ اعداد لسٹنگ. elseif ind == 34 خط = '1'؛ elseif ind == 35 خط = '2'؛ elseif ind == 36 خط = '3'؛ elseif ind == 37 - ind == 38 خط = '4'؛ elseif ind == 39 خط = '5'؛ elseif ind == 40 - ind == 41 - ind == 42 خط = '6'؛ elseif ind == 43 خط = '7'؛ elseif ind == 44 - ind == 45 خط = '8'؛ elseif ind == 46 - ind == 47 - ind == 48 خط = '9'؛ باقی خط = '0'؛ آخر اختتام
یہاں ، ہم نے مذکورہ کوڈ میں خط کے نام سے ایک فنکشن تیار کیا ہے جو ہمیں ' ریڈ لیٹر ()' کمانڈ کے ذریعہ کلاس ' الفا ' سے ان پٹ امیج کا حرفی نمبر دیتا ہے ۔ اور پھر کمانڈ لوڈ 'نیو ٹیمپلیٹس' کا استعمال کرکے محفوظ شدہ ٹیمپلیٹس کو لوڈ کریں ۔
اس کے بعد ، ہم نے ان پٹ شبیہہ کو نیا سائز دیا ہے لہذا اس کو 'imresize (فائل کا نام ، سائز)' کمانڈ استعمال کرکے ٹیمپلیٹ کی تصاویر کے ساتھ موازنہ کیا جاسکتا ہے ۔ پھر لوپ کے لئے ٹیمپلیٹ کی ہر شبیہ کے ساتھ ان پٹ امیج کو جوڑنے کیلئے بہترین میچ حاصل کرنے کے لئے استعمال کیا جاتا ہے۔
ایک میٹرکس ' rec ' ان پٹ امیج سے حرف ٹیمپلیٹ کے ساتھ ہر حرفی نمبر کے سانچے کے ساتھ وابستگی کی قدر کو ریکارڈ کرنے کے لئے تشکیل دیا گیا ہے ، جیسا کہ نیچے کوڈ میں دکھایا گیا ہے ،
cor = corr2 (نیو ٹمپلیٹس {1، n}، سنیپ)؛
پھر 'فائنڈ ()' کمانڈ کا استعمال انڈیکس کو تلاش کرنے کے لئے کیا جاتا ہے جو سب سے زیادہ مماثل کردار سے مماثل ہے۔ پھر اس اشاریہ کے مطابق ، اسی کردار کو 'if-else' بیان کا استعمال کرتے ہوئے پرنٹ کیا جاتا ہے ۔
اب ، اس کو مکمل کرنے کے بعد مرکزی پروگرام کے لئے کوڈ شروع کرنے کے لئے ایک نیا ایڈیٹر ونڈو کھولیں۔
نمبر پلیٹ کا پتہ لگانا
پلیٹ_ڈیٹیکشن نامی تیسری اور آخری کوڈ فائل ہے ۔ اس فائل میں درج ذیل کوڈ کو کاپی کرکے پیسٹ کریں اور پروجیکٹ کے فولڈر میں محفوظ کریں۔ فوری آغاز کے لئے آپ کوڈ کوارٹر فائلوں کے ساتھ تمام کوڈ فائلوں کو یہاں سے ڈاؤن لوڈ کرسکتے ہیں۔
سب بند کرو؛ تمام کو صاف کریں؛ im = imread ('نمبر پلیٹ امیجز / image1.png')؛ imgray = rgb2gray (im)؛ imbin = imbinarize (imgray)؛ im = کنارے (imgray، 'prewitt')؛ ٪ پلیٹوں کے نیچے نمبر پلیٹ کی جگہ تلاش کرنا Iprop = خطے کی فصلیں (IM ، 'BoundingBox' ، 'ایریا' ، 'امیج')؛ رقبہ = Iprop.Area؛ گنتی = گنبد (فصلوں)؛ میکا = ایریا؛ باؤنڈنگ بکس = آئپرپس۔ باؤنڈنگ باکس i = 1 کے لئے: گنتی کریں اگر میکا ہے
مندرجہ بالا کوڈ میں استعمال ہونے والے بنیادی احکامات کا ذیل میں ذکر کیا گیا ہے۔
imread () - اس کمانڈ کو ہدف والے فولڈر میں سے MATLAB میں شبیہہ کھولنے کے لئے استعمال کیا جاتا ہے۔
rgb2gray () commandیہ کمانڈ آرجیبی امیج کو گرے اسکیل فارمیٹ میں تبدیل کرنے کے لئے استعمال ہوتا ہے۔
imbinarize () - یہ کمانڈ 2-D گرے اسکیل امیج کو بائنارائز کرنے کے لئے استعمال کیا جاتا ہے یا ہم صرف اتنا کہہ سکتے ہیں کہ اس تصویر کو سیاہ اور سفید شکل میں بدل دیتا ہے۔
ایج () - یہ کمانڈ امیج میں کناروں کا پتہ لگانے کے ل many ، مختلف طریقوں جیسے روبرٹس ، سوبل ، پریویٹ اور بہت سے دوسرے استعمال کرکے استعمال کیا جاتا ہے۔
ریجن فلپس () - یہ کمانڈ امیج ریجن کی خصوصیات کی پیمائش کے لئے استعمال ہوتا ہے۔
numel () - یہ کمانڈ صف عناصر کی تعداد کا حساب کرنے کے لئے استعمال ہوتا ہے۔
imcrop () - یہ کمانڈ داخل کردہ سائز میں شبیہہ کو تراشنے کے لئے استعمال ہوتا ہے۔
bwareaopen () - اس کمانڈ کو بائنری امیج سے چھوٹی چیزوں کو نکالنے کے لئے استعمال کیا جاتا ہے۔
کوڈ میں درج بالا کمانڈز کا استعمال کرکے ، ہم ان پٹ امیج کو کال کر رہے ہیں اور اسے گرے اسکیل میں تبدیل کررہے ہیں۔ اس کے بعد گرے اسکیل کو بائنری شبیہہ میں تبدیل کیا جاتا ہے ، اور بائنری امیجز کے کنارے کا پتہ پریویٹ طریقہ سے لگایا جاتا ہے۔
پھر نیچے دیے گئے کوڈ کو پوری ان پٹ تصویر میں نمبر پلیٹ کے مقام کا پتہ لگانے کے لئے استعمال کیا جاتا ہے ،
فصلوں = خطے کی فصلیں (IM ، 'BoundingBox' ، 'ایریا' ، 'شبیہ')؛ رقبہ = Iprops.Area؛ گنتی = گنبد (فصلوں)؛ میکا = ایریا؛ باؤنڈنگ بکس = آئپرپس۔ باؤنڈنگ باکس؛ i = 1 کے لئے: گنتی کریں اگر میکا ہے
اس کے بعد نمبر پلیٹ کو فصل کریں اور بائنری شبیہہ سے چھوٹی چھوٹی اشیاء کو بالترتیب کمانڈر 'imcrop ()' اور 'bwareaopen ()' استعمال کرکے ہٹائیں ۔
اس کے بعد ، نیچے دیے گئے کوڈ کا استعمال اس کرپٹ لائسنس پلیٹ کی شبیہہ پر کارروائی کرنے اور تصویر اور ٹیکسٹ فارمیٹ (کمانڈ ونڈو میں) میں پتہ چلا نمبر ظاہر کرنے کے لئے کیا جاتا ہے ۔
فصلوں = خطے کی فصلیں (IM ، 'BoundingBox' ، 'ایریا' ، 'شبیہ')؛ گنتی = گنبد (فصلوں)؛ noPlate =؛ i = 1 کے لئے: گنتی ow = لمبائی (فصلوں (i). امیج (1 ،:))؛ اوہ = لمبائی (آئپروپس (i). شبیہہ (: ، 1))؛ اگر اوہ <(h / 2) & oh> (h / 3) خط = خط_طالبہ (فصلیں (i). عکس)؛ noPlate = آخر اختتام
میٹلائب کا استعمال کرتے ہوئے گاڑیوں کے لائسنس پلیٹ نمبر کا پتہ لگانے کے نظام کا کام
میں template_creation.m فائل ہم 'کے طور پر نام ایک ڈائریکٹری یا فائل میں حرفی ہندسی کریکٹر کے تمام بائنری تصاویر کو بچانے کے لئے کوڈ کی ڈیزائن ہے NewTemplates '. پھر اس ڈائریکٹری کو لیٹر_ڈیٹکشن ڈاٹ ایم میں بلایا گیا ہے جیسا کہ آپ نیچے دیکھ سکتے ہیں
پھر پلیٹ_ڈیٹیکشن.م کوڈ فائل میں جب لیٹر_ڈیٹیکشن ڈاٹ ایم کوڈ فائل طلب کی جاتی ہے جب ہم تصویر پر کارروائی کرتے ہیں جیسا کہ نیچے دی گئی تصویر میں دکھایا گیا ہے ،
اب ،.m فائل کو چلانے کے لئے 'RUN' بٹن پر کلک کریں
میٹلیب کو جواب دینے میں کچھ سیکنڈ لگ سکتے ہیں ، جب تک کہ نیچے دکھائے گئے نیچے بائیں کونے میں مصروف پیغام نہ دکھائے اس وقت تک انتظار کریں ،
پروگرام شروع ہوتے ہی آپ کو نمبر پلیٹ کی تصویر پاپ اپ اور کمانڈ ونڈو میں نمبر مل جائے گا۔ میری شبیہہ کی پیداوار نیچے دی گئی تصویر کی طرح نظر آئے گی۔
گاڑیوں کے لائسنس نمبر پلیٹ ڈیٹیکشن سسٹم کی مکمل کارکردگی کا مظاہرہ ذیل ویڈیو میں کیا گیا ہے ، اور تصویری نمونے والی تمام کوڈ فائلیں یہاں سے ڈاؤن لوڈ کی جاسکتی ہیں۔
نیز ، میٹلاب کے تمام پروجیکٹس کو یہاں چیک کریں۔