- మూస సృష్టి
- లెటర్ డిటెక్షన్
- సంఖ్య ప్లేట్ గుర్తింపు
- MATLAB ఉపయోగించి వాహన లైసెన్స్ ప్లేట్ నంబర్ డిటెక్షన్ సిస్టమ్ యొక్క పని
ANPR (ఆటోమేటిక్ నంబర్ ప్లేట్ రికగ్నిషన్) వ్యవస్థ ఎలా పనిచేస్తుందో మీరు ఎప్పుడైనా ఆలోచిస్తున్నారా? దాని వెనుక ఉన్న భావనను నేను మీకు చెప్తాను, ANPR సిస్టమ్ యొక్క కెమెరా వాహన లైసెన్స్ ప్లేట్ యొక్క చిత్రాన్ని సంగ్రహిస్తుంది మరియు తరువాత చిత్రం ఆల్ఫా సంఖ్యా మార్పిడిని టెక్స్ట్ ఫార్మాట్లోకి అందించడానికి బహుళ సంఖ్యలో అల్గోరిథంల ద్వారా ప్రాసెస్ చేయబడుతుంది. పెట్రోల్ పంపులు, షాపింగ్ మాల్స్, విమానాశ్రయాలు, హైవేలు, టోల్ బూత్లు, హోటళ్ళు, హాస్పిటల్స్, పార్కింగ్ స్థలాలు, రక్షణ మరియు మిలిటరీ చెక్ పాయింట్లు వంటి అనేక ప్రదేశాలలో ANPR వ్యవస్థ ఉపయోగించబడుతుంది.
ఈ నంబర్ ప్లేట్ డిటెక్షన్ కోసం చాలా ఇమేజ్ ప్రాసెసింగ్ సాధనాలు అందుబాటులో ఉన్నాయి, అయితే ఇక్కడ ఈ ట్యుటోరియల్లో వాహన లైసెన్స్ ప్లేట్ నంబర్ను టెక్స్ట్ ఫార్మాట్లోకి తీసుకురావడానికి మాట్లాబ్ ఇమేజ్ ప్రాసెసింగ్ను ఉపయోగిస్తాము. మీరు మాట్లాబ్ లేదా ఇమేజ్ ప్రాసెసింగ్తో కొత్తగా ఉంటే, అప్పుడు మా మునుపటి మ్యాట్లాబ్ ప్రాజెక్ట్లను తనిఖీ చేయండి:
- మాట్లాబ్: ఎ క్విక్ ఇంట్రడక్షన్ తో ప్రారంభించడం
- MATLAB ఉపయోగించి చిత్ర ప్రాసెసింగ్తో ప్రారంభించండి
మొదట, నంబర్ ప్లేట్లను గుర్తించడానికి మేము ఉపయోగిస్తున్న భావన గురించి మీకు తెలియజేస్తాను. ఈ ప్రాజెక్ట్ కోసం మూడు ప్రోగ్రామ్లు లేదా '.m' ఫైళ్లు ఉన్నాయి.
- మూస సృష్టి ( template_creation.m ) - ఆల్ఫాన్యూమరిక్స్ యొక్క సేవ్ చేసిన చిత్రాలను పిలవడానికి మరియు వాటిని MATLAB మెమరీలో క్రొత్త టెంప్లేట్గా సేవ్ చేయడానికి ఇది ఉపయోగించబడుతుంది.
- లెటర్ డిటెక్షన్ ( Letter_detection.m ) - ఇన్పుట్ ఇమేజ్ నుండి అక్షరాలను చదువుతుంది మరియు అత్యధికంగా సరిపోలిన ఆల్ఫాన్యూమరిక్ను కనుగొనండి.
- ప్లేట్ డిటెక్షన్ ( Plate_detection.m ) - చిత్రాన్ని ప్రాసెస్ చేసి, ఆపై సంఖ్యను గుర్తించడానికి పై రెండు m- ఫైళ్ళకు కాల్ చేయండి.
ఇప్పుడు, ఈ m- ఫైళ్ళను ఎలా కోడ్ చేయాలో మరియు కోడింగ్ ప్రారంభించడానికి ముందు మీరు ఏమి చేయాలో నేర్చుకుంటాము. ఈ ట్యుటోరియల్ ద్వారా వెళ్ళిన తరువాత, మీరు ఈ ప్రాజెక్ట్ చివరిలో అన్ని కోడ్ ఫైల్స్ మరియు వర్కింగ్ వివరణ వీడియోను కనుగొనవచ్చు .
మూస సృష్టి
ఫైల్లను సేవ్ చేసి నిల్వ చేయడానికి మొదట ప్రాజెక్ట్ కోసం ఫోల్డర్ను సృష్టించండి (నా ఫోల్డర్ పేరు నంబర్ ప్లేట్ డిటెక్షన్ ). మేము అన్ని వర్ణమాలలు మరియు సంఖ్యల బైనరీ చిత్రాలను ' ఆల్ఫా' అనే ఉప ఫోల్డర్లో నిల్వ చేసాము.
ఇప్పుడు, కింది చిత్రంలో చూపిన విధంగా MATLAB లోని ఎడిటర్ విండోను తెరవండి,
మాట్లాబ్ యొక్క ప్రాథమిక పరిభాష మీకు తెలియకపోతే, లింక్ చేసిన ట్యుటోరియల్ను తనిఖీ చేయమని నేను మీకు సూచిస్తున్నాను.
ఇప్పుడు, ఈ క్రింది కోడ్ను template_creation.m ఫైల్లో కాపీ చేసి పేస్ట్ చేసి, ఫైల్ను ప్రాజెక్ట్ ఫోల్డర్లో ( నంబర్ ప్లేట్ డిటెక్షన్ ) సేవ్ చేయండి. ఇమేజ్ టెంప్లేట్ల ఫైళ్ళతో సహా ఈ ప్రాజెక్ట్కు సంబంధించిన అన్ని ఫైల్లను ఇక్కడ నుండి డౌన్లోడ్ చేసుకోవచ్చు. ఈ ప్రాజెక్ట్ చివరిలో ఇచ్చిన వీడియోను కూడా తనిఖీ చేయండి.
% వర్ణమాలలు 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'); ఐదు = imread ('ఆల్ఫా / 5.bmp'); ఆరు = imread ('ఆల్ఫా / 6.bmp'); ఏడు = imread ('ఆల్ఫా / 7.bmp'); ఎనిమిది = imread ('ఆల్ఫా / 8.bmp'); తొమ్మిది = imread ('ఆల్ఫా / 9.bmp'); సున్నా = imread ('ఆల్ఫా / 0.bmp'); అక్షరాల అక్షరం కోసం శ్రేణిని సృష్టించడం =; సంఖ్యల సంఖ్య కోసం శ్రేణిని సృష్టిస్తోంది =; న్యూటెంప్లేట్లు =; సేవ్ ('న్యూటెంప్లేట్లు', 'న్యూటెంప్లేట్లు') అన్నీ క్లియర్ చేస్తాయి
ఇక్కడ, పై కోడ్లో మనం ' imread () ' ఆదేశాన్ని ఉపయోగించి చిత్రాలను వేరియబుల్గా సేవ్ చేస్తున్నాము. ఈ ఫంక్షన్ ఫోల్డర్ నుండి లేదా PC యొక్క ఏదైనా ప్రదేశం నుండి MATLAB లోకి చిత్రాలను కాల్ చేయడానికి ఉపయోగించబడుతుంది. పై కోడ్ నుండి ఒక ఉదాహరణ తీసుకుందాం:
A = imread ('ఆల్ఫా / A.bmp');
ఇక్కడ A వేరియబుల్, మరియు ' ఆల్ఫా / A.bmp' లో , 'ఆల్ఫా' ఫోల్డర్ పేరు మరియు ' A.bmp' ఫైల్ పేరు.
అప్పుడు ' అక్షరం ' మరియు ' సంఖ్య ' యొక్క మాతృకను సృష్టించి , ' సేవ్ (ఫైల్ పేరు, వేరియబుల్స్)' కమాండ్ ఉపయోగించి వేరియబుల్ ' న్యూటెంప్లేట్స్ ' లో సేవ్ చేయండి .
అక్షరాల అక్షరం కోసం శ్రేణిని సృష్టించడం =; సంఖ్యల సంఖ్య కోసం శ్రేణిని సృష్టిస్తోంది =; న్యూటెంప్లేట్లు =; సేవ్ ('న్యూటెంప్లేట్లు', 'న్యూటెంప్లేట్లు') అన్నీ క్లియర్ చేస్తాయి
ఇప్పుడు కొత్త ఎడిటర్ విండోలో Letter_detection.m కోడింగ్ ప్రారంభించండి.
లెటర్ డిటెక్షన్
ఇక్కడ మనం Letter_detection.m అనే రెండవ కోడ్ ఫైల్ను సృష్టిస్తున్నాము . ఇప్పుడు, ఆ ఫైల్లో కింది కోడ్ను కాపీ చేసి పేస్ట్ చేసి, ఫైల్ను ప్రాజెక్ట్ ఫోల్డర్లో లెటర్_డెటెక్షన్ పేరుతో సేవ్ చేయండి. ఈ ఫైల్ను ఇక్కడ నుండి డౌన్లోడ్ చేసుకోవచ్చు, ఈ అటాచ్ చేసిన జిప్ ఫైల్లు ఈ నంబర్ ప్లేట్ డిటెక్షన్ ప్రాజెక్ట్కు సంబంధించిన ఇతర ఫైళ్ళను కూడా కలిగి ఉంటాయి.
ఫంక్షన్ లెటర్ = రీడ్లెటర్ (స్నాప్) లోడ్ న్యూటెంప్లేట్లు స్నాప్ = ఇంప్రెసైజ్ (స్నాప్,); rec =; n = 1 కోసం: పొడవు (న్యూటెంప్లేట్లు) cor = corr2 (NewTemplates {1, n}, స్నాప్); rec =; end ind = find (rec == max (rec)); ప్రదర్శన (కనుగొను (rec == max (rec)); % వర్ణమాల జాబితాలు. if ind == 1 - ind == 2 అక్షరం = 'A'; elseif ind == 3 - ind == 4 అక్షరం = 'B'; elseif ind == 5 letter = 'C' elseif ind == 6 - ind == 7 letter = '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'; else letter = '0'; ముగింపు ముగింపు
ఇక్కడ, పై కోడ్లో మనం అక్షరం అనే ఫంక్షన్ను సృష్టించాము, ఇది ' రీడ్లెటర్ ()' ఆదేశాన్ని ఉపయోగించి క్లాస్ ' ఆల్ఫా ' నుండి ఇన్పుట్ ఇమేజ్ యొక్క ఆల్ఫాన్యూమరిక్ అవుట్పుట్ను ఇస్తుంది. ఆపై కమాండ్ లోడ్ 'న్యూటెంప్లేట్లు ఉపయోగించి సేవ్ చేసిన టెంప్లేట్లను లోడ్ చేయండి .
ఆ తరువాత, మేము ఇన్పుట్ ఇమేజ్ యొక్క పరిమాణాన్ని మార్చాము, కనుక దీనిని 'imresize (ఫైల్ పేరు, పరిమాణం)' ఆదేశాన్ని ఉపయోగించి టెంప్లేట్ యొక్క చిత్రాలతో పోల్చవచ్చు . అప్పుడు కోసం లూప్ సహసంబంధం ఇన్పుట్ చిత్రం ప్రతి చిత్రం తో టెంప్లేట్ లో ఉత్తమ మ్యాచ్ పొందుటకు ఉపయోగిస్తారు.
దిగువ కోడ్లో చూపిన విధంగా, ఇన్పుట్ ఇమేజ్ నుండి అక్షరాల టెంప్లేట్తో ప్రతి ఆల్ఫాన్యూమరిక్ టెంప్లేట్కు సహసంబంధ విలువను రికార్డ్ చేయడానికి మ్యాట్రిక్స్ ' రెక్ ' సృష్టించబడుతుంది.
cor = corr2 (న్యూటెంప్లేట్లు {1, n}, స్నాప్);
అప్పుడు 'ఫైండ్ ()' కమాండ్ అత్యధికంగా సరిపోలిన అక్షరానికి అనుగుణంగా ఉండే సూచికను కనుగొనడానికి ఉపయోగించబడుతుంది. ఆ సూచిక ప్రకారం, సంబంధిత అక్షరం 'if-else' స్టేట్మెంట్ ఉపయోగించి ముద్రించబడుతుంది.
ఇప్పుడు, దీనితో పూర్తి చేసిన తర్వాత ప్రధాన ప్రోగ్రామ్ కోసం కోడ్ను ప్రారంభించడానికి కొత్త ఎడిటర్ విండోను తెరవండి.
సంఖ్య ప్లేట్ గుర్తింపు
Plate_detection.m అనే మూడవ మరియు చివరి కోడ్ ఫైల్ ఇక్కడ ఉంది మరియు ఈ ఫైల్లో ఈ క్రింది కోడ్ను కాపీ చేసి పేస్ట్ చేసి ప్రాజెక్ట్ ఫోల్డర్లో సేవ్ చేయండి. శీఘ్ర ప్రారంభానికి మీరు ఇమేజ్ టెంప్లేట్లతో అన్ని కోడ్ ఫైల్లను ఇక్కడ నుండి డౌన్లోడ్ చేసుకోవచ్చు.
అన్నింటినీ మూసివేయండి; అన్నీ క్లియర్ చేయండి; im = imread ('సంఖ్య ప్లేట్ చిత్రాలు / image1.png'); imgray = rgb2gray (im); imbin = imbinarize (imgray); im = అంచు (imgray, 'prewitt'); నంబర్ ప్లేట్ ఐప్రాప్స్ = రీజియన్ప్రోప్స్ (ఇమ్, 'బౌండింగ్బాక్స్', 'ఏరియా', 'ఇమేజ్') యొక్క స్థానాన్ని కనుగొనడం క్రింది దశలు ; area = Iprops.Area; count = numel (Iprops); maxa = ప్రాంతం; boundingBox = Iprops.BoundingBox; i = 1 కోసం: గరిష్టంగా ఉంటే
లెక్కించండి
పై కోడ్లో ఉపయోగించిన ప్రాథమిక ఆదేశాలు క్రింద పేర్కొనబడ్డాయి:
imread () - టార్గెట్ ఫోల్డర్ నుండి చిత్రాన్ని MATLAB లోకి తెరవడానికి ఈ ఆదేశం ఉపయోగించబడుతుంది.
rgb2gray () -ఈ ఆదేశం RGB చిత్రాన్ని గ్రేస్కేల్ ఆకృతిలోకి మార్చడానికి ఉపయోగించబడుతుంది.
imbinarize () - ఈ ఆదేశం 2-D గ్రేస్కేల్ చిత్రాన్ని బైనరైజ్ చేయడానికి ఉపయోగించబడుతుంది లేదా ఇది చిత్రాన్ని నలుపు మరియు తెలుపు ఆకృతిలోకి మారుస్తుందని చెప్పగలను.
అంచు () - రాబర్ట్స్, సోబెల్, ప్రీవిట్ మరియు అనేక ఇతర పద్ధతులను ఉపయోగించడం ద్వారా చిత్రంలోని అంచులను గుర్తించడానికి ఈ ఆదేశం ఉపయోగించబడుతుంది.
regionprops () - ఇమేజ్ ప్రాంతం యొక్క లక్షణాలను కొలవడానికి ఈ ఆదేశం ఉపయోగించబడుతుంది.
numel () - శ్రేణి మూలకాల సంఖ్యను లెక్కించడానికి ఈ ఆదేశం ఉపయోగించబడుతుంది.
imcrop () - ఎంటర్ చేసిన పరిమాణంలో చిత్రాన్ని కత్తిరించడానికి ఈ ఆదేశం ఉపయోగించబడుతుంది.
bwareaopen () - బైనరీ ఇమేజ్ నుండి చిన్న వస్తువులను తొలగించడానికి ఈ ఆదేశం ఉపయోగించబడుతుంది.
కోడ్లోని పై ఆదేశాలను ఉపయోగించడం ద్వారా, మేము ఇన్పుట్ ఇమేజ్ని పిలుస్తాము మరియు దానిని గ్రేస్కేల్గా మారుస్తున్నాము. అప్పుడు గ్రేస్కేల్ బైనరీ ఇమేజ్గా మార్చబడుతుంది మరియు బైనరీ చిత్రాల అంచు ప్రీవిట్ పద్ధతి ద్వారా కనుగొనబడుతుంది .
మొత్తం ఇన్పుట్ చిత్రంలోని నంబర్ ప్లేట్ యొక్క స్థానాన్ని గుర్తించడానికి క్రింది కోడ్ ఉపయోగించబడుతుంది, ఐప్రోప్స్ = రీజియన్ప్రోప్స్ (ఇమ్, 'బౌండింగ్బాక్స్', 'ఏరియా', 'ఇమేజ్'); area = Iprops.Area; count = numel (Iprops); maxa = ప్రాంతం; boundingBox = Iprops.BoundingBox; i = 1 కోసం: గరిష్టంగా ఉంటే
లెక్కించండి
ఆ తరువాత నంబర్ ప్లేట్ను కత్తిరించండి మరియు బైనరీ ఇమేజ్ నుండి చిన్న వస్తువులను వరుసగా 'imcrop ()' మరియు 'bwareaopen ()' కమాండ్ ఉపయోగించి తొలగించండి .
అప్పుడు, కింది కోడ్ ఆ కత్తిరించిన లైసెన్స్ ప్లేట్ చిత్రాన్ని ప్రాసెస్ చేయడానికి మరియు గుర్తించిన సంఖ్యను ఇమేజ్ మరియు టెక్స్ట్ ఫార్మాట్లో (కమాండ్ విండోలో) ప్రదర్శించడానికి ఉపయోగించబడుతుంది.
ఐప్రోప్స్ = రీజియన్ప్రోప్స్ (ఇమ్, 'బౌండింగ్బాక్స్', 'ఏరియా', 'ఇమేజ్'); count = numel (Iprops); noPlate =; i = 1 కోసం: కౌంట్ ow = పొడవు (ఐప్రోప్స్ (i).చిత్రం (1,:)); oh = పొడవు (Iprops (i).చిత్రం (:, 1%); ow <(h / 2) & oh> (h / 3) letter = Letter_detection (Iprops (i).ఇమేజ్); noPlate = ముగింపు ముగింపు
MATLAB ఉపయోగించి వాహన లైసెన్స్ ప్లేట్ నంబర్ డిటెక్షన్ సిస్టమ్ యొక్క పని
లో template_creation.m ఫైలు మేము alphanumerics అన్ని బైనరీ చిత్రాలను సేవ్ 'గా అనే డైరెక్టరీ లేదా ఫైల్ లోకి కోడ్ రూపకల్పన కలిగి NewTemplates '. మీరు క్రింద చూడగలిగినట్లుగా ఆ డైరెక్టరీని Letter_detection.m లో పిలుస్తారు
అప్పుడు Plate_detection.m కోడ్ ఫైల్లో, కింది చిత్రంలో చూపిన విధంగా చిత్రాన్ని ప్రాసెస్ చేసేటప్పుడు Letter_detection.m కోడ్ ఫైల్ అంటారు,
ఇప్పుడు,.m ఫైల్ను అమలు చేయడానికి 'RUN' బటన్ పై క్లిక్ చేయండి
మాట్లాబ్ ప్రతిస్పందించడానికి కొన్ని సెకన్ల సమయం పట్టవచ్చు, దిగువ చూపిన విధంగా దిగువ ఎడమ మూలలో బిజీ సందేశాన్ని చూపించే వరకు వేచి ఉండండి,
ప్రోగ్రామ్ ప్రారంభమైనప్పుడు మీరు నంబర్ ప్లేట్ ఇమేజ్ పాపప్ మరియు కమాండ్ విండోలో సంఖ్యను పొందుతారు. నా చిత్రం కోసం అవుట్పుట్ క్రింద ఇచ్చిన చిత్రం వలె కనిపిస్తుంది;
వాహన లైసెన్స్ నంబర్ ప్లేట్ డిటెక్షన్ సిస్టమ్ యొక్క పూర్తి పని క్రింది వీడియోలో ప్రదర్శించబడుతుంది మరియు ఇమేజ్ టెంప్లేట్లతో కూడిన అన్ని కోడ్ ఫైళ్ళను ఇక్కడ నుండి డౌన్లోడ్ చేసుకోవచ్చు.
అలాగే, అన్ని మాట్లాబ్ ప్రాజెక్టులను ఇక్కడ తనిఖీ చేయండి.