- Penciptaan Templat
- Pengesanan Surat
- Pengesanan Plat Nombor
- Mengendalikan Sistem Pengesanan Nombor Plat Kenderaan menggunakan MATLAB
Pernahkah anda tertanya-tanya bagaimana sistem ANPR (Automatic Number Plate Recognition) berfungsi? Izinkan saya memberitahu anda konsep di belakangnya, kamera sistem ANPR menangkap gambar plat kenderaan dan kemudian gambar diproses melalui beberapa algoritma untuk memberikan penukaran angka dalam bentuk teks menjadi format teks. Sistem ANPR digunakan di banyak tempat seperti Pam Petrol, Pusat Membeli-belah, Lapangan Terbang, lebuh raya, pondok tol, Hotel, Hospital, tempat letak kereta, pusat pemeriksaan Pertahanan & Tentera dll
Terdapat banyak alat pemprosesan gambar yang tersedia untuk pengesanan plat nombor ini, tetapi di sini dalam tutorial ini kita akan menggunakan Pemprosesan Imej MATLAB untuk memasukkan nombor plat kenderaan ke dalam format teks. Sekiranya anda baru menggunakan MATLAB atau memproses gambar, maka periksa projek MATLAB kami sebelumnya:
- Bermula dengan MATLAB: Pengenalan Pantas
- Bermula dengan Pemprosesan Imej menggunakan MATLAB
Pertama, izinkan saya memberi penerangan mengenai konsep yang kami gunakan untuk mengesan nombor plat. Terdapat tiga program atau fail '.m' untuk projek ini.
- Penciptaan Templat ( template_creation.m ) - Ini digunakan untuk memanggil gambar alfanumerik yang disimpan dan kemudian menyimpannya sebagai templat baru dalam memori MATLAB.
- Pengesanan Huruf ( Letter_detection.m ) - Membaca watak-watak dari gambar input dan mencari alfanumerik sepadan yang paling tinggi dipadankan.
- Plate Detection ( Plate_detection.m ) - Memproses gambar dan kemudian memanggil dua fail m di atas untuk mengesan nombornya.
Sekarang, kita akan belajar mengenai cara membuat kod m-file ini dan apa yang harus anda lakukan sebelum memulakan pengekodan. Setelah melalui tutorial ini, anda dapat menemui semua fail kod dan video penerangan yang berfungsi di akhir projek ini.
Penciptaan Templat
Mula-mula buat folder untuk projek (nama folder saya ialah Number Plate Detection ) untuk menyimpan dan menyimpan fail. Kami telah menyimpan gambar binari semua huruf dan nombor dalam sub-folder yang dinamakan sebagai ' alpha' .
Sekarang, buka tetingkap Editor di MATLAB, seperti yang ditunjukkan dalam gambar di bawah,
Sekiranya anda tidak biasa dengan terminologi asas MATLAB, saya cadangkan anda untuk melihat tutorial yang dipautkan.
Sekarang, salin dan tampal kod di bawah ini dalam fail template_creation.m , dan simpan fail tersebut di folder projek ( Pengesanan Plat Nombor ). Semua fail yang berkaitan dengan projek ini termasuk fail templat gambar boleh dimuat turun dari sini. Lihat juga video yang diberikan pada akhir projek ini.
% Huruf 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 ('alpha / X.bmp '); Y = imread ('alpha / Y.bmp'); Z = imread ('alpha / Z.bmp'); % Nombor Asli satu = imread ('alpha / 1.bmp'); dua = imread ('alpha / 2.bmp'); tiga = imread ('alpha / 3.bmp'); empat = imread ('alpha / 4.bmp'); lima = imread ('alpha / 5.bmp'); enam = imread ('alpha / 6.bmp'); tujuh = imread ('alpha / 7.bmp'); lapan = imread ('alpha / 8.bmp'); sembilan = imread ('alpha / 9.bmp'); sifar = imread ('alpha / 0.bmp'); % Membuat Array untuk huruf Huruf =; % Membuat Array untuk Nombor nombor =; NewTemplates =; simpan ('NewTemplates', 'NewTemplates') hapus semua
Di sini, dalam kod di atas kita menyimpan gambar menjadi pemboleh ubah dengan menggunakan perintah ' imread () '. Fungsi ini digunakan untuk memanggil gambar dari folder atau dari mana-mana lokasi PC ke MATLAB. Mari kita ambil contoh dari kod di atas:
A = imread ('alpha / A.bmp');
Di mana A adalah pemboleh ubah, dan dalam ' alpha / A.bmp' , 'alpha' adalah nama folder dan ' A.bmp' adalah nama fail.
Kemudian buat matriks ' huruf ' dan ' nombor ' dan simpan dalam pemboleh ubah ' NewTemplates ' dengan menggunakan perintah ' save (nama fail, pemboleh ubah)' .
% Membuat Array untuk huruf Huruf =; % Membuat Array untuk Nombor nombor =; NewTemplates =; simpan ('NewTemplates', 'NewTemplates') hapus semua
Sekarang mulakan pengekodan Letter_detection.m , di tetingkap editor baru.
Pengesanan Surat
Di sini kita membuat fail kod kedua bernama Letter_detection.m . Sekarang, salin dan tampal kod di bawah dalam fail tersebut dan simpan fail tersebut di folder projek dengan nama Letter_detection. Fail ini boleh dimuat turun dari sini, fail zip yang dilampirkan ini juga mengandungi fail lain yang berkaitan dengan projek pengesanan plat nombor ini.
huruf fungsi = readLetter (snap) memuat NewTemplates snap = imresize (snap,); rec =; untuk n = 1: length (NewTemplates) cor = corr2 (NewTemplates {1, n}, snap); rec =; akhir ind = cari (rec == max (rec)); paparan (cari (rec == max (rec))); % Senarai Huruf. jika ind == 1 - ind == 2 huruf = 'A'; elseif ind == 3 - ind == 4 huruf = 'B'; elseif ind == 5 huruf = 'C' elseif ind == 6 - ind == 7 huruf = 'D'; elseif ind == 8 huruf = 'E'; elseif ind == 9 huruf = 'F'; elseif ind == 10 huruf = 'G'; elseif ind == 11 huruf = 'H'; elseif ind == 12 huruf = 'I'; elseif ind == 13 huruf = 'J'; elseif ind == 14 huruf = 'K'; elseif ind == 15 huruf = 'L'; elseif ind == 16 huruf = 'M'; elseif ind == 17 huruf = 'N'; elseif ind == 18 - ind == 19 huruf = 'O'; elseif ind == 20 - ind == 21 huruf = 'P'; elseif ind == 22 - ind == 23 huruf = 'Q'; elseif ind == 24 - ind == 25 huruf = 'R'; elseif ind == 26 huruf = 'S'; elseif ind == 27 huruf = 'T'; elseif ind == 28 huruf = 'U'; elseif ind == 29 huruf = 'V'; elseif ind == 30 huruf = 'W'; elseif ind == 31 huruf = 'X'; elseif ind == 32 huruf = 'Y'; elseif ind == 33 huruf = 'Z'; % * - * - * - * - * % angka penyenaraian. elseif ind == 34 huruf = '1'; elseif ind == 35 huruf = '2'; elseif ind == 36 huruf = '3'; elseif ind == 37 - ind == 38 huruf = '4'; elseif ind == 39 huruf = '5'; elseif ind == 40 - ind == 41 - ind == 42 huruf = '6'; elseif ind == 43 huruf = '7'; elseif ind == 44 - ind == 45 huruf = '8'; elseif ind == 46 - ind == 47 - ind == 48 huruf = '9'; huruf lain = '0'; hujung akhir
Di sini, dalam kod di atas kita telah membuat fungsi bernama huruf yang memberi kita output alfanumerik gambar input dari kelas ' alpha ' dengan menggunakan perintah ' readLetter ()' . Dan kemudian muatkan templat yang disimpan dengan menggunakan arahan beban 'NewTemplates .
Setelah itu, kami telah mengubah ukuran gambar input sehingga dapat dibandingkan dengan gambar templat dengan menggunakan perintah 'imresize (nama file, ukuran)' . Kemudian untuk gelung digunakan untuk menghubungkan gambar input dengan setiap gambar dalam templat untuk mendapatkan padanan terbaik.
Matriks ' rec ' dibuat untuk mencatat nilai korelasi untuk setiap templat alfanumerik dengan templat aksara dari gambar input, seperti yang ditunjukkan dalam kod di bawah ini,
cor = corr2 (NewTemplates {1, n}, snap);
Kemudian perintah 'find ()' digunakan untuk mencari indeks yang sesuai dengan watak yang paling sesuai. Kemudian mengikut indeks itu, watak yang sesuai dicetak menggunakan pernyataan 'if-else' .
Sekarang, setelah selesai dengan ini buka tetingkap editor baru untuk memulakan kod untuk program utama.
Pengesanan Plat Nombor
Berikut adalah fail kod ketiga dan terakhir bernama Plate_detection.m salin dan tampal kod di bawah ini dalam fail ini dan simpan ke dalam folder projek. Untuk permulaan yang cepat, anda boleh memuat turun semua fail kod dengan templat gambar dari sini.
tutup semua; kosongkan semua; im = imread ('Gambar Plat Nombor / image1.png'); imgray = rgb2gray (im); imbin = imbinarize (imgray); im = edge (imgray, 'prewitt'); % Langkah di bawah adalah untuk mencari lokasi plat nombor Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); kawasan = Iprops.Area; kiraan = numel (Iprops); maxa = kawasan; bindingBox = Iprops.BoundingBox; untuk i = 1: hitung jika maks
Perintah asas yang digunakan dalam kod di atas disebutkan di bawah:
imread () - Perintah ini digunakan untuk membuka gambar ke dalam MATLAB dari folder sasaran.
rgb2gray () –Perintah ini digunakan untuk menukar gambar RGB menjadi format skala kelabu.
imbinarize () - Perintah ini digunakan untuk gambar skala abu-abu Binarize 2-D atau kita boleh mengatakan ia mengubah gambar menjadi format hitam putih.
edge () - Perintah ini digunakan untuk mengesan tepi dalam gambar, dengan menggunakan pelbagai kaedah seperti Roberts, Sobel, Prewitt dan banyak lagi yang lain.
regionprops () - Perintah ini digunakan untuk mengukur sifat kawasan gambar.
numel () - Perintah ini digunakan untuk mengira bilangan elemen array.
imcrop () - Perintah ini digunakan untuk memotong gambar dalam ukuran yang dimasukkan.
bwareaopen () - Perintah ini digunakan untuk membuang objek kecil dari gambar binari.
Dengan menggunakan perintah di atas dalam kod, kita memanggil gambar input dan mengubahnya menjadi skala kelabu. Kemudian skala kelabu ditukar menjadi gambar binari, dan tepi gambar binari dikesan dengan kaedah Prewitt.
Kemudian kod di bawah digunakan untuk mengesan lokasi plat nombor pada keseluruhan gambar input, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); kawasan = Iprops.Area; kiraan = numel (Iprops); maxa = kawasan; bindingBox = Iprops.BoundingBox; untuk i = 1: hitung jika maks
Selepas itu potong nombor plat dan keluarkan objek kecil dari gambar binari dengan menggunakan arahan 'imcrop ()' dan 'bwareaopen ()' masing - masing.
Kemudian, kod di bawah digunakan untuk memproses gambar plat nombor yang dipotong dan untuk menunjukkan nombor yang dikesan dalam format gambar dan teks (di tetingkap perintah).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); kiraan = numel (Iprops); noPlate =; untuk i = 1: hitung ow = panjang (Iprops (i). Imej (1,:)); oh = panjang (Iprops (i). Imej (:, 1)); jika ow <(h / 2) & oh> (h / 3) huruf = Huruf_kesan (Iprops (i). Imej); noPlate = hujung hujung
Mengendalikan Sistem Pengesanan Nombor Plat Kenderaan menggunakan MATLAB
Dalam fail template_creation.m kami telah merancang kod untuk menyimpan semua gambar binari alfanumerik ke dalam direktori atau fail yang dinamakan sebagai ' NewTemplates '. Kemudian direktori itu dipanggil dalam Letter_detection.m seperti yang anda lihat di bawah
Kemudian dalam fail kod Plate_detection.m, fail kod Letter_detection.m dipanggil ketika kami memproses gambar seperti yang ditunjukkan dalam gambar di bawah,
Sekarang, klik pada butang 'RUN' untuk menjalankan fail.m
MATLAB mungkin mengambil masa beberapa saat untuk bertindak balas, tunggu sehingga menunjukkan mesej sibuk di sudut kiri bawah seperti gambar di bawah
Semasa program dimulakan, anda akan mendapat pop timbul gambar plat nombor dan nombor di tetingkap arahan. Output untuk gambar saya akan kelihatan seperti gambar yang diberikan di bawah;
Kerja lengkap Sistem Pengesanan Plat Nombor Kenderaan ditunjukkan dalam Video di bawah, dan semua fail kod dengan templat gambar boleh dimuat turun dari sini.
Juga, periksa semua Projek MATLAB di sini.