- Création de modèle
- Détection de lettre
- Détection de plaque d'immatriculation
- Fonctionnement du système de détection du numéro de plaque d'immatriculation du véhicule à l'aide de MATLAB
Vous êtes-vous déjà demandé comment fonctionne un système ANPR (Automatic Number Plate Recognition)? Permettez-moi de vous dire le concept derrière cela, la caméra du système ANPR capture l'image de la plaque d'immatriculation du véhicule, puis l'image est traitée par plusieurs algorithmes pour fournir une conversion alphanumérique de l'image en un format texte. Le système ANPR est utilisé dans de nombreux endroits comme les pompes à essence, les centres commerciaux, les aéroports, les autoroutes, les péages, les hôtels, les hôpitaux, les parkings, les points de contrôle militaires et militaires, etc.
Il existe de nombreux outils de traitement d'image disponibles pour cette détection de plaque d'immatriculation, mais ici, dans ce didacticiel, nous utiliserons MATLAB Image Processing pour obtenir le numéro de plaque d'immatriculation du véhicule au format texte. Si vous êtes nouveau avec MATLAB ou le traitement d'image, consultez nos précédents projets MATLAB:
- Premiers pas avec MATLAB: une introduction rapide
- Premiers pas avec le traitement d'image à l'aide de MATLAB
Tout d'abord, permettez-moi de vous présenter le concept que nous utilisons pour détecter les plaques d'immatriculation. Il existe trois programmes ou fichiers «.m» pour ce projet.
- Création de modèle ( template_creation.m ) - Ceci est utilisé pour appeler les images enregistrées des caractères alphanumériques, puis les enregistrer en tant que nouveau modèle dans la mémoire MATLAB.
- Détection de lettre ( Letter_detection.m ) - Lit les caractères de l'image d'entrée et trouve l'alphanumérique correspondant correspondant le plus élevé.
- Détection de plaque ( Plate_detection.m ) - Traitez l'image, puis appelez les deux fichiers m ci-dessus pour détecter le nombre.
Maintenant, nous allons apprendre comment coder ces m-fichiers et ce que vous devez faire avant de commencer à coder. Après avoir parcouru ce didacticiel, vous pouvez trouver tous les fichiers de code et la vidéo d'explication de travail à la fin de ce projet.
Création de modèle
Créez d'abord un dossier pour le projet (mon nom de dossier est Détection de plaque d'immatriculation ) pour enregistrer et stocker les fichiers. Nous avons stocké les images binaires de tous les alphabets et nombres dans le sous-dossier nommé « alpha» .
Maintenant, ouvrez la fenêtre de l'éditeur dans MATLAB, comme indiqué dans l'image ci-dessous,
Si vous n'êtes pas familier avec la terminologie de base de MATLAB, je vous suggère de consulter le tutoriel lié.
Maintenant, copiez et collez le code ci-dessous dans le fichier template_creation.m et enregistrez le fichier dans le dossier du projet ( Détection de plaque d'immatriculation ). Tous les fichiers liés à ce projet, y compris les fichiers de modèles d'image, peuvent être téléchargés à partir d'ici. Consultez également la vidéo donnée à la fin de ce projet.
% Alphabets 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'); % Nombres naturels un = imread ('alpha / 1.bmp'); deux = imread ('alpha / 2.bmp'); trois = imread ('alpha / 3.bmp'); quatre = imread ('alpha / 4.bmp'); cinq = imread ('alpha / 5.bmp'); six = imread ('alpha / 6.bmp'); sept = imread ('alpha / 7.bmp'); huit = imread ('alpha / 8.bmp'); neuf = imread ('alpha / 9.bmp'); zéro = imread ('alpha / 0.bmp'); % Création d'un tableau pour les alphabets letter =; % Création d'un tableau pour les nombres number =; NewTemplates =; save ('NewTemplates', 'NewTemplates') tout effacer
Ici, dans le code ci-dessus, nous enregistrons les images dans une variable en utilisant la commande ' imread () '. Cette fonction est utilisée pour appeler les images du dossier ou de n'importe quel emplacement du PC dans le MATLAB. Prenons un exemple du code ci-dessus:
A = imread ('alpha / A.bmp');
Où A est la variable, et dans « alpha / A.bmp» , «alpha» est le nom du dossier et « A.bmp» est le nom du fichier.
Créez ensuite une matrice de ' lettre ' et ' nombre ' et enregistrez-la dans la variable ' NewTemplates ' en utilisant la commande ' save (filename, variables)' .
% Création d'un tableau pour les alphabets letter =; % Création d'un tableau pour les nombres number =; NewTemplates =; save ('NewTemplates', 'NewTemplates') tout effacer
Commencez maintenant à coder Letter_detection.m , dans une nouvelle fenêtre d'éditeur.
Détection de lettre
Ici, nous créons le deuxième fichier de code nommé Letter_detection.m . Maintenant, copiez et collez le code ci-dessous dans ce fichier et enregistrez le fichier dans le dossier du projet avec le nom Letter_detection. Ce fichier peut être téléchargé à partir d'ici, ce fichier zip joint contient également d'autres fichiers liés à ce projet de détection de plaque d'immatriculation.
function letter = readLetter (snap) load NewTemplates snap = imresize (snap,); rec =; pour n = 1: length (NewTemplates) cor = corr2 (NewTemplates {1, n}, snap); rec =; end ind = find (rec == max (rec)); affichage (find (rec == max (rec))); % Des listes d'alphabets. si ind == 1 - ind == 2 lettre = 'A'; elseif ind == 3 - ind == 4 lettre = 'B'; elseif ind == 5 lettre = 'C' elseif ind == 6 - ind == 7 lettre = 'D'; elseif ind == 8 lettre = 'E'; elseif ind == 9 lettre = 'F'; elseif ind == 10 lettre = 'G'; elseif ind == 11 lettre = 'H'; elseif ind == 12 lettre = 'I'; elseif ind == 13 lettre = 'J'; elseif ind == 14 lettre = 'K'; elseif ind == 15 lettre = 'L'; elseif ind == 16 lettre = 'M'; elseif ind == 17 lettre = 'N'; elseif ind == 18 - ind == 19 lettre = 'O'; elseif ind == 20 - ind == 21 lettre = 'P'; elseif ind == 22 - ind == 23 lettre = 'Q'; elseif ind == 24 - ind == 25 lettre = 'R'; elseif ind == 26 lettre = 'S'; elseif ind == 27 lettre = 'T'; elseif ind == 28 lettre = 'U'; elseif ind == 29 lettre = 'V'; elseif ind == 30 lettre = 'W'; elseif ind == 31 lettre = 'X'; elseif ind == 32 lettre = 'Y'; elseif ind == 33 lettre = 'Z'; % * - * - * - * - * % des annonces. Numerals elseif ind == 34 lettre = '1'; elseif ind == 35 lettre = '2'; elseif ind == 36 lettre = '3'; elseif ind == 37 - ind == 38 lettre = '4'; elseif ind == 39 lettre = '5'; elseif ind == 40 - ind == 41 - ind == 42 lettre = '6'; elseif ind == 43 lettre = '7'; elseif ind == 44 - ind == 45 lettre = '8'; elseif ind == 46 - ind == 47 - ind == 48 lettre = '9'; autre lettre = '0'; fin fin
Ici, dans le code ci-dessus, nous avons créé une fonction nommée letter qui nous donne la sortie alphanumérique de l'image d'entrée de la classe ' alpha ' en utilisant la commande ' readLetter ()' . Et puis chargez les modèles enregistrés en utilisant la commande load 'NewTemplates .
Après cela, nous avons redimensionné l'image d'entrée afin qu'elle puisse être comparée aux images du modèle en utilisant la commande 'imresize (filename, size)' . Ensuite, la boucle for est utilisée pour corréler l'image d'entrée avec chaque image du modèle pour obtenir la meilleure correspondance.
Une matrice ' rec ' est créée pour enregistrer la valeur de corrélation pour chaque modèle alphanumérique avec le modèle de caractères de l'image d'entrée, comme indiqué dans le code ci-dessous,
cor = corr2 (NewTemplates {1, n}, snap);
Ensuite, la commande 'find ()' est utilisée pour trouver l'index qui correspond au caractère correspondant le plus élevé. Ensuite, selon cet index, le caractère correspondant est imprimé en utilisant l' instruction «if-else» .
Maintenant, après avoir terminé avec cela, ouvrez une nouvelle fenêtre d'éditeur pour lancer le code du programme principal.
Détection de plaque d'immatriculation
Voici le troisième et dernier fichier de code nommé Plate_detection.m copiez et collez le code ci-dessous dans ce fichier et enregistrez-le dans le dossier du projet. Pour un démarrage rapide, vous pouvez télécharger tous les fichiers de code avec des modèles d'image à partir d'ici.
ferme tout; tout effacer; im = imread ('Images de plaque d'immatriculation / image1.png'); imgray = rgb2gray (im); imbin = imbinarize (imgray); im = bord (imgray, 'prewitt'); % Les étapes ci-dessous consistent à trouver l'emplacement de la plaque d'immatriculation Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = aire; boundingBox = Iprops.BoundingBox; pour i = 1: compter si maxa
Les commandes de base utilisées dans le code ci-dessus sont mentionnées ci-dessous:
imread () - Cette commande est utilisée pour ouvrir l'image dans le MATLAB à partir du dossier cible.
rgb2gray () - Cette commande est utilisée pour convertir l'image RVB au format en niveaux de gris.
imbinarize () - Cette commande est utilisée pour binariser l'image en niveaux de gris 2D ou simplement nous pouvons dire qu'elle convertit l'image au format noir et blanc.
edge () - Cette commande est utilisée pour détecter les bords de l'image, en utilisant diverses méthodes comme Roberts, Sobel, Prewitt et bien d'autres.
regionprops () - Cette commande est utilisée pour mesurer les propriétés de la région d'image.
numel () - Cette commande est utilisée pour calculer le nombre d'éléments du tableau.
imcrop () - Cette commande est utilisée pour recadrer l'image dans la taille entrée.
bwareaopen () - Cette commande est utilisée pour supprimer de petits objets d'une image binaire.
En utilisant les commandes ci-dessus dans le code, nous appelons l'image d'entrée et la convertissons en échelle de gris. Ensuite, l'échelle de gris est convertie en image binaire et le bord des images binaires est détecté par la méthode Prewitt.
Ensuite, le code ci-dessous est utilisé pour détecter l'emplacement de la plaque d'immatriculation dans toute l'image d'entrée, Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); area = Iprops.Area; count = numel (Iprops); maxa = aire; boundingBox = Iprops.BoundingBox; pour i = 1: compter si maxa
Après cela, recadrez la plaque d'immatriculation et supprimez les petits objets de l'image binaire en utilisant respectivement les commandes 'imcrop ()' et 'bwareaopen ()' .
Ensuite, le code ci-dessous est utilisé pour traiter cette image de plaque d'immatriculation recadrée et pour afficher le numéro détecté au format image et texte (dans la fenêtre de commande).
Iprops = regionprops (im, 'BoundingBox', 'Area', 'Image'); count = numel (Iprops); noPlate =; pour i = 1: count ow = length (Iprops (i).Image (1,:)); oh = longueur (Iprops (i).Image (:, 1)); if ow <(h / 2) & oh> (h / 3) letter = Letter_detection (Iprops (i).Image); noPlate = fin fin
Fonctionnement du système de détection du numéro de plaque d'immatriculation du véhicule à l'aide de MATLAB
Dans le fichier template_creation.m , nous avons conçu le code pour enregistrer toutes les images binaires des alphanumériques dans un répertoire ou un fichier nommé « NewTemplates ». Ensuite, ce répertoire est appelé dans Letter_detection.m comme vous pouvez le voir ci-dessous
Ensuite, dans le fichier de code Plate_detection.m , le fichier de code Letter_detection.m est appelé lorsque nous traitons l'image comme indiqué dans l'image ci-dessous,
Maintenant, cliquez sur le bouton 'RUN' pour exécuter le fichier.m
MATLAB peut prendre quelques secondes pour répondre, attendez qu'il affiche un message occupé dans le coin inférieur gauche comme indiqué ci-dessous,
Au démarrage du programme, vous obtiendrez la fenêtre contextuelle de l'image de la plaque d'immatriculation et le numéro dans la fenêtre de commande. La sortie de mon image ressemblera à l'image ci-dessous;
Le fonctionnement complet du système de détection de plaque d'immatriculation du véhicule est démontré dans la vidéo ci-dessous, et tous les fichiers de code avec des modèles d'image peuvent être téléchargés à partir d'ici.
Vérifiez également tous les projets MATLAB ici.