So erkennen und erkennen Sie Autokennzeichen mit Python

So erkennen und erkennen Sie Autokennzeichen mit Python

Die Kennzeichenerkennungs- und -erkennungstechnologie hat viele Anwendungen. Es kann in Straßensystemen, ticketlosen Parkplätzen, Wohngebäuden mit Zugangskontrolle für Fahrzeuge und mehr verwendet werden. Diese Technologie kombiniert Computer Vision und künstliche Intelligenz.

Sie verwenden Python, um ein Programm zur Erkennung und Erkennung von Nummernschildern zu erstellen. Das Programm nimmt das Eingabebild, verarbeitet es, um das Nummernschild zu erkennen und zu erkennen, und zeigt schließlich die Zeichen des Nummernschilds als Ausgabe an.

Einrichten der Python-Umgebung

Um dieses Tutorial bequem durchzuarbeiten, müssen Sie mit den Python-Grundlagen vertraut sein. Dies beginnt mit der Einrichtung der Programmumgebung.

Bevor Sie mit dem Codieren beginnen, müssen Sie einige Bibliotheken in Ihrer Umgebung installieren. Öffnen Sie eine beliebige Python-IDE und erstellen Sie eine Python-Datei. Führen Sie jeden Befehl auf dem Terminal aus, um die entsprechende Bibliothek zu installieren. Sie sollten eine vorherige Installation von Python PIP auf Ihrem Computer haben.

  • OpenCV-Python : Sie verwenden diese Bibliothek, um das Eingabebild vorzuverarbeiten und verschiedene Ausgabebilder anzuzeigen. pip install OpenCV-Python
  • imutils : Sie verwenden diese Bibliothek, um das ursprüngliche Eingabebild auf eine gewünschte Breite zuzuschneiden. pip install imutils
  • pytesseract : Sie werden diese Bibliothek verwenden, um die Zeichen des Nummernschilds zu extrahieren und sie in Zeichenfolgen umzuwandeln. pip install pytesseract

    Die Pytesseract-Bibliothek basiert auf der Tesseract-OCR -Engine zur Zeichenerkennung.

Was Tesseract OCR ist und wie man es auf Ihrem Computer installiert

Tesseract OCR ist eine Engine, die die Zeichen einer Sprache erkennen kann. Sie sollten es auf Ihrem Computer installieren, bevor Sie die Pytesseract-Bibliothek verwenden. Dazu:

  1. Öffnen Sie einen beliebigen Chrome-basierten Browser
  2. Laden Sie das Tesseract OCR- Setup herunter
  3. Führen Sie das Setup aus und installieren Sie es wie jedes andere Programm

Nachdem Sie die Umgebung vorbereitet und tesseract OCR installiert haben, können Sie das Programm programmieren.

1. Importieren der Bibliotheken

Beginnen Sie mit dem Importieren der Bibliotheken, die Sie in der Umgebung installiert haben. Durch den Import der Bibliotheken können Sie deren Funktionen im Projekt aufrufen und nutzen.

import cv2
import imutils
import pytesseract

Sie müssen die OpenCV-Python- Bibliothek als cv2 importieren . Importieren Sie die anderen Bibliotheken unter denselben Namen, die Sie zu ihrer Installation verwendet haben.

2. Übernahme der Eingabe

Zeigen Sie dann mit pytesseract auf den Ort, an dem die Tesseract-Engine installiert ist. Nehmen Sie das Autobild mit der Funktion cv2.imread als Eingabe . Ersetzen Sie den Bildnamen durch den Namen des verwendeten Bildes. Speichern Sie das Bild zur Vereinfachung im selben Ordner wie Ihr Projekt.

pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
original_image = cv2.imread('image3.jpeg')

Sie können das folgende Eingabebild durch dasjenige ersetzen, das Sie verwenden möchten.

Ein blaues Auto mit Nummernschild

3. Vorverarbeitung der Eingabe

Ändern Sie die Bildbreite auf 500 Pixel. Konvertieren Sie das Bild dann in Graustufen, da die Funktion zur Kantenerkennung von Canny nur mit Graustufenbildern funktioniert. Rufen Sie schließlich die bilateralFilter – Funktion auf, um das Rauschen im Bild zu reduzieren.

original_image = imutils.resize(original_image, width=500)
gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter(gray_image, 11, 17, 17)

4. Erkennung des Kennzeichens am Eingang

Das Erkennen des Nummernschilds ist der Vorgang, bei dem der Teil am Auto bestimmt wird, der die Zeichen des Nummernschilds enthält.

Kantenerkennung durchführen

Beginnen Sie mit dem Aufruf der Funktion cv2.Canny , die automatisch die Kanten auf dem vorverarbeiteten Bild erkennt.

edged_image = cv2.Canny(gray_image, 30, 200)

An diesen Kanten finden wir die Konturen.

Finden der Konturen

Rufen Sie die Funktion cv2.findContours auf und übergeben Sie eine Kopie des umrandeten Bildes . Diese Funktion erkennt die Konturen. Zeichnen Sie mit der Funktion cv2.drawContours um die erkannten Konturen auf dem Originalbild herum . Geben Sie schließlich das Originalbild mit allen sichtbaren gezeichneten Konturen aus.

contours, new = cv2.findContours(edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(img1, contours, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)

Das Programm zeichnet alle Konturen, die es auf dem Fahrzeugbild findet, markant nach.

Ein Auto, bei dem alle sichtbaren Konturen grün markiert sind

Nachdem Sie die Konturen gefunden haben, müssen Sie sie sortieren, um die besten Kandidaten zu identifizieren.

Sortieren der Konturen

Sortieren Sie die Konturen basierend auf der Mindestfläche von 30. Ignorieren Sie die darunter, da sie weniger wahrscheinlich die Nummernschildkontur sind. Erstellen Sie eine Kopie des Originalbildes und zeichnen Sie die oberen 30 Konturen auf das Bild. Zeigen Sie schließlich das Bild an.

contours = sorted(contours, key = cv2.contourArea, reverse = True)[:30]

# stores the license plate contour
screenCnt = None
img2 = original_image.copy()


# draws top 30 contours
cv2.drawContours(img2, contours, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)

Es gibt jetzt weniger Konturen als am Anfang. Die einzigen gezeichneten Konturen sind diejenigen, die angenähert sind, um das Nummernschild zu enthalten.

Ein Auto mit den ersten dreißig sichtbaren Konturen gezeichnet

Schließlich müssen Sie die sortierten Konturen durchlaufen und bestimmen, welches das Nummernschild ist.

Looping über die Top 30 Konturen

Erstellen Sie eine for-Schleife, um die Konturen zu durchlaufen. Suchen Sie nach der Kontur mit vier Ecken und bestimmen Sie ihren Umfang und ihre Koordinaten. Speichern Sie das Bild der Kontur, die das Nummernschild enthält. Zeichnen Sie abschließend die Nummernschildkontur auf das Originalbild und zeigen Sie sie an.

count = 0
idx = 7

for c in contours:
    # approximate the license plate contour
    contour_perimeter = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.018 * contour_perimeter, True)

    # Look for contours with 4 corners
    if len(approx) == 4:
        screenCnt = approx

        # find the coordinates of the license plate contour
        x, y, w, h = cv2.boundingRect(c)
        new_img = original_image [ y: y + h, x: x + w]

        # stores the new image
        cv2.imwrite('./'+str(idx)+'.png',new_img)
        idx += 1
        break

# draws the license plate contour on original image
cv2.drawContours(original_image, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("detected license plate", original_image)

Nach dem Schleifen hat Ihr Programm die Kontur mit dem Nummernschild identifiziert. Es zeichnet nur auf der Nummernschildkontur.

Ein Auto mit dem erkannten Nummernschild

5. Erkennen des erkannten Kennzeichens

Das Erkennen des Nummernschilds bedeutet, die Zeichen auf dem beschnittenen Bild des Nummernschilds zu lesen. Laden Sie das zuvor gespeicherte Kennzeichenbild und zeigen Sie es an. Rufen Sie dann die Funktion pytesseract.image_to_string auf und übergeben Sie das zugeschnittene Kennzeichenbild. Diese Funktion wandelt die Zeichen im Bild in einen String um.

# filename of the cropped license plate image
cropped_License_Plate = './7.png'
cv2.imshow("cropped license plate", cv2.imread(cropped_License_Plate))

# converts the license plate characters to string
text = pytesseract.image_to_string(cropped_License_Plate, lang='eng')

Das beschnittene Nummernschild ist unten abgebildet. Die Zeichen darauf sind die Ausgabe, die Sie später auf dem Bildschirm drucken.

Ein zugeschnittenes Nummernschildbild

Nachdem Sie das Nummernschild erkannt und erkannt haben, können Sie die Ausgabe anzeigen.

6. Anzeige der Ausgabe

Dies ist der letzte Schritt. Sie drucken den extrahierten Text auf dem Bildschirm aus. Dieser Text enthält die Zeichen des Kennzeichens.

print("License plate is:", text)
cv2.waitKey(0)
cv2.destroyAllWindows()

Die erwartete Ausgabe des Programms sollte der folgenden Abbildung ähneln:

Drei Autobilder und ein beschnittenes Nummernschild zeigen, wie ein Nummernschild erkannt wird

Der Kennzeichentext ist auf dem Terminal ersichtlich.

Schärfen Sie Ihre Python-Fähigkeiten

Das Erkennen und Erkennen von Autokennzeichen in Python ist ein interessantes Projekt, an dem man arbeiten kann. Es ist eine Herausforderung, daher sollte es Ihnen helfen, mehr über Python zu erfahren.

Beim Programmieren ist Übung der Kern der Beherrschung einer Sprache. Um Ihre Fähigkeiten zu üben, müssen Sie an interessanten Projekten arbeiten.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert