Přemýšleli jste někdy nad tím, jak funguje systém ANPR (Automatic Number Plate Recognition)? Řeknu vám koncept, který za tím stojí, kamera systému ANPR snímá obraz poznávací značky vozidla a poté je obraz zpracován pomocí více algoritmů, aby poskytl alfanumerický převod obrazu do textového formátu. Systém ANPR se používá na mnoha místech, jako jsou benzínová čerpadla, nákupní střediska, letiště, dálnice, mýtné, hotely, nemocnice, parkoviště, obranné a vojenské kontrolní body atd.
Pro detekci SPZ je k dispozici mnoho nástrojů pro zpracování obrazu, ale zde v tomto tutoriálu použijeme MATLAB Image Processing k získání SPZ vozidla do textového formátu. Pokud jste nováčkem v MATLABu nebo zpracování obrazu, zkontrolujte naše předchozí projekty MATLAB:
- Začínáme s MATLAB: Rychlý úvod
- Začínáme se zpracováním obrazu pomocí MATLABu
Nejprve mi dovolte seznámit vás s konceptem, který používáme pro detekci poznávacích značek. Pro tento projekt existují tři programy nebo soubory „.m“.
- Vytvoření šablony ( template_creation.m ) - Slouží k volání uložených obrázků alfanumeriky a jejich uložení jako nové šablony do paměti MATLAB.
- Detekce písmen ( Letter_detection.m ) - Přečte znaky ze vstupního obrazu a najde odpovídající odpovídající alfanumerické znaky.
- Plate Detection ( Plate_detection.m ) - Zpracujte obraz a poté zavolejte výše uvedené dva soubory m, abyste zjistili číslo.
Nyní se naučíme, jak tyto m-soubory kódovat a co musíte udělat, než začnete kódovat. Po absolvování tohoto kurzu najdete na konci tohoto projektu všechny soubory kódu a video s pracovním vysvětlením.
Vytvoření šablony
Nejprve vytvořte složku pro projekt (moje složka má název Number Plate Detection ) pro uložení a uložení souborů. Uložili jsme binární obrázky všech abeced a čísel do podsložky pojmenované jako „ alfa“ .
Nyní otevřete okno editoru v MATLABu, jak je znázorněno na následujícím obrázku,
Pokud nejste obeznámeni se základní terminologií MATLABu, doporučuji vám zkontrolovat propojený návod.
Nyní zkopírujte a vložte níže uvedený kód do souboru template_creation.m a uložte soubor do složky projektu ( Detekce registrační značky ). Všechny soubory související s tímto projektem včetně souborů šablon obrázků lze stáhnout odtud. Také zkontrolujte video uvedena na konci tohoto projektu.
% Abeced 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 ('alfa / X.bmp '); Y = imread ('alpha / Y.bmp'); Z = imread ('alpha / Z.bmp'); % Přirozených čísel jeden = imread ('alfa / 1.bmp'); dva = imread ('alfa / 2.bmp'); three = imread ('alpha / 3.bmp'); four = imread ('alpha / 4.bmp'); five = imread ('alpha / 5.bmp'); six = imread ('alpha / 6.bmp'); seven = imread ('alpha / 7.bmp'); eight = imread ('alpha / 8.bmp'); nine = imread ('alpha / 9.bmp'); nula = imread ('alpha / 0.bmp'); % Vytvoření pole pro abecedy písmeno =; % Vytvoření pole pro čísla number =; NewTemplates =; save ('NewTemplates', 'NewTemplates') clear all
Zde ve výše uvedeném kódu ukládáme obrázky do proměnné pomocí příkazu ' imread () '. Tato funkce se používá k volání obrázků ze složky nebo z libovolného umístění počítače do MATLABu. Vezměme si příklad z výše uvedeného kódu:
A = imread ('alpha / A.bmp');
Kde A je proměnná a v souboru „ alpha / A.bmp“ je „alpha“ název složky a „ A.bmp“ je název souboru.
Poté vytvořte matici ' písmeno ' a ' číslo ' a uložte ji do proměnné ' NewTemplates ' pomocí příkazu ' save (název souboru, proměnné)' .
% Vytvoření pole pro abecedy písmeno =; % Vytvoření pole pro čísla number =; NewTemplates =; save ('NewTemplates', 'NewTemplates') clear all
Nyní začněte kódovat Letter_detection.m v novém okně editoru.
Detekce dopisů
Zde vytváříme druhý soubor kódu s názvem Letter_detection.m . Nyní zkopírujte a vložte níže uvedený kód do tohoto souboru a uložte soubor do složky projektu s názvem Letter_detection. Tento soubor lze stáhnout odtud, tyto přiložené soubory zip obsahují také další soubory související s tímto projektem detekce SPZ.
funkční písmeno = readLetter (snap) načíst NewTemplates snap = imresize (snap,); rec =; pro n = 1: délka (NewTemplates) cor = corr2 (NewTemplates {1, n}, snap); rec =; end ind = find (rec == max (rec)); display (find (rec == max (rec))); Výpisy% abeced. pokud ind == 1 - ind == 2 písmeno = 'A'; elseif ind == 3 - ind == 4 písmeno = 'B'; elseif ind == 5 písmen = 'C' elseif ind == 6 - ind == 7 písmen = 'D'; elseif ind == 8 písmen = 'E'; elseif ind == 9 písmen = 'F'; elseif ind == 10 písmen = 'G'; elseif ind == 11 písmen = 'H'; elseif ind == 12 písmen = 'I'; elseif ind == 13 písmen = 'J'; elseif ind == 14 písmen = 'K'; elseif ind == 15 písmen = 'L'; elseif ind == 16 písmen = 'M'; elseif ind == 17 písmen = 'N'; elseif ind == 18 - ind == 19 písmen = 'O'; elseif ind == 20 - ind == 21 písmen = 'P'; elseif ind == 22 - ind == 23 písmeno = 'Q'; elseif ind == 24 - ind == 25 písmen = 'R'; elseif ind == 26 písmen = 'S'; elseif ind == 27 písmen = 'T'; elseif ind == 28 písmen = 'U'; elseif ind == 29 písmen = 'V'; elseif ind == 30 písmen = 'W'; elseif ind == 31 písmen = 'X'; elseif ind == 32 písmeno = 'Y'; elseif ind == 33 písmen = 'Z'; % * - * - * - * - * % Číslovky výpisy. elseif ind == 34 písmen = '1'; elseif ind == 35 písmen = '2'; elseif ind == 36 písmen = '3'; elseif ind == 37 - ind == 38 písmeno = '4'; elseif ind == 39 písmeno = '5'; elseif ind == 40 - ind == 41 - ind == 42 písmeno = '6'; elseif ind == 43 písmeno = '7'; elseif ind == 44 - ind == 45 písmeno = '8'; elseif ind == 46 - ind == 47 - ind == 48 písmen = '9'; else letter = '0'; konec konec
Tady ve výše uvedeném kódu jsme vytvořili funkci s názvem letter, která nám pomocí příkazu ' readLetter ()' dává alfanumerický výstup vstupního obrazu ze třídy ' alpha ' . A pak načtěte uložené šablony pomocí příkazu načíst 'NewTemplates .
Poté jsme změnili velikost vstupního obrazu, aby jej bylo možné porovnat s obrázky šablony pomocí příkazu 'imresize (název souboru, velikost)' . Potom se smyčka for používá ke korelaci vstupního obrazu s každým obrázkem v šabloně, aby se dosáhlo nejlepší shody.
Vytvoří se matice „ rec “, která zaznamená hodnotu korelace pro každou alfanumerickou šablonu se šablonou znaků ze vstupního obrázku, jak je znázorněno v následujícím kódu,
cor = corr2 (NewTemplates {1, n}, snap);
Poté se pomocí příkazu 'find ()' vyhledá index, který odpovídá nejlépe shodnému znaku. Podle tohoto indexu se potom odpovídající znak vytiskne pomocí příkazu „if-else“ .
Nyní, po dokončení tohoto, otevřete nové okno editoru pro spuštění kódu pro hlavní program.
Detekce SPZ
Tady je třetí a poslední soubor kódu s názvem Plate_detection.m, zkopírujte a vložte níže uvedený kód do tohoto souboru a uložte jej do složky projektu. Pro rychlý začátek si odtud můžete stáhnout všechny soubory kódu se šablonami obrázků.
zavřít vše; vymazat vše; im = imread ('Number Number Images / image1.png'); imgray = rgb2gray (im); imbin = imbinarize (imgray); im = edge (imgray, 'prewitt'); % Níže uvedené kroky slouží k vyhledání umístění poznávací značky Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = plocha; boundingBox = Iprops.BoundingBox; for i = 1: count if maxa
Níže jsou uvedeny základní příkazy použité ve výše uvedeném kódu:
imread () - Tento příkaz se používá k otevření obrázku do MATLABu z cílové složky.
rgb2gray () - Tento příkaz se používá k převodu obrazu RGB do formátu šedi.
imbinarize () - Tento příkaz se používá k binarizaci 2D obrazu ve stupních šedi nebo jednoduše můžeme říci, že převádí obraz do černobílého formátu.
edge () - Tento příkaz se používá k detekci hran v obraze pomocí různých metod, jako jsou Roberts, Sobel, Prewitt a mnoho dalších.
regionprops () - Tento příkaz se používá k měření vlastností oblasti obrazu.
numel () - Tento příkaz se používá k výpočtu počtu prvků pole.
imcrop () - Tento příkaz se používá k oříznutí obrázku na zadanou velikost.
bwareaopen () - Tento příkaz se používá k odstranění malých objektů z binárního obrazu.
Pomocí výše uvedených příkazů v kódu voláme vstupní obraz a převádíme jej do stupňů šedi. Potom se stupně šedi převedou na binární obraz a okraj binárních obrazů se detekuje metodou Prewitt.
Poté se níže uvedený kód použije k detekci umístění poznávací značky v celém vstupním obrázku, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = plocha; boundingBox = Iprops.BoundingBox; for i = 1: count if maxa
Poté ořízněte registrační značku a odstraňte malé objekty z binárního obrazu pomocí příkazu 'imcrop ()' a 'bwareaopen ()' .
Níže uvedený kód se poté použije ke zpracování oříznutého obrázku poznávací značky ak zobrazení zjištěného čísla ve formátu obrázku a textu (v příkazovém okně).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); count = numel (Iprops); noPlate =; pro i = 1: count ow = délka (Iprops (i). Image (1,:)); oh = délka (Iprops (i). Image (:, 1)); if ow <(h / 2) & oh> (h / 3) letter = Letter_detection (Iprops (i).Image); noPlate = end end
Práce se systémem detekce SPZ vozidla pomocí MATLABu
V souboru template_creation.m jsme navrhli kód tak, aby ukládal všechny binární obrázky alfanumeriky do adresáře nebo souboru s názvem „ NewTemplates “. Pak je tento adresář volán v Letter_detection.m, jak vidíte níže
V souboru kódu Plate_detection.m se pak volá soubor kódu Letter_detection.m, když zpracováváme obrázek, jak je znázorněno na obrázku níže,
Nyní klikněte na tlačítko 'RUN' pro spuštění souboru.m
MATLABu může trvat několik sekund, než odpoví, počkejte, až se v levém dolním rohu zobrazí obsazená zpráva, jak je znázorněno níže,
Při spuštění programu získáte vyskakovací okno s poznávací značkou a číslo v příkazovém okně. Výstup mého obrázku bude vypadat jako obrázek uvedený níže;
Kompletní fungování systému detekce registračních značek vozidel je ukázáno ve videu níže a všechny soubory kódu se šablonami obrázků lze stáhnout zde.
Zde také zkontrolujte všechny projekty MATLAB.