Jak wykrywać i rozpoznawać tablice rejestracyjne samochodów za pomocą Pythona

Jak wykrywać i rozpoznawać tablice rejestracyjne samochodów za pomocą Pythona

Technologia wykrywania i rozpoznawania tablic rejestracyjnych ma wiele zastosowań. Może być stosowany w systemach drogowych, parkingach bez biletów, rezydencjach kontroli dostępu do pojazdów i nie tylko. Technologia ta łączy wizję komputerową i sztuczną inteligencję.

Użyjesz języka Python do stworzenia programu do wykrywania i rozpoznawania tablic rejestracyjnych. Program pobierze obraz wejściowy, przetworzy go w celu wykrycia i rozpoznania tablicy rejestracyjnej, a na końcu wyświetli znaki tablicy rejestracyjnej jako dane wyjściowe.

Konfigurowanie środowiska Pythona

Aby wygodnie przejść przez ten samouczek, musisz znać podstawy języka Python. Rozpoczyna się to od skonfigurowania środowiska programu.

Zanim zaczniesz kodować, musisz zainstalować kilka bibliotek w swoim środowisku. Otwórz dowolne środowisko IDE języka Python i utwórz plik języka Python. Uruchom każde polecenie na terminalu, aby zainstalować odpowiednią bibliotekę. Powinieneś mieć wcześniejszą instalację Pythona PIP na swoim komputerze.

  • OpenCV-Python : Będziesz używać tej biblioteki do wstępnego przetwarzania obrazu wejściowego i wyświetlania różnych obrazów wyjściowych. pip install OpenCV-Python
  • imutils : użyjesz tej biblioteki do przycięcia oryginalnego obrazu wejściowego do żądanej szerokości. pip install imutils
  • pytesseract : użyjesz tej biblioteki do wyodrębnienia znaków z tablicy rejestracyjnej i przekonwertowania ich na ciągi znaków. pip install pytesseract

    Biblioteka pytesseract opiera się na silniku Tesseract OCR do rozpoznawania znaków.

Czym jest Tesseract OCR i jak go zainstalować na komputerze

Tesseract OCR to silnik, który rozpoznaje znaki języka. Powinieneś zainstalować go na swoim komputerze przed użyciem biblioteki pytesseract. Aby to zrobić:

  1. Otwórz dowolną przeglądarkę opartą na Chrome
  2. Pobierz konfigurację Tesseract OCR
  3. Uruchom instalację i zainstaluj ją jak każdy inny program

Po przygotowaniu środowiska i zainstalowaniu tesseract OCR można przystąpić do kodowania programu.

1. Importowanie bibliotek

Rozpocznij od zaimportowania bibliotek zainstalowanych w środowisku. Zaimportowanie bibliotek pozwala na wywołanie i wykorzystanie ich funkcji w projekcie.

import cv2
import imutils
import pytesseract

Musisz zaimportować bibliotekę OpenCV-Python jako cv2 . Zaimportuj inne biblioteki, używając tych samych nazw, których użyłeś do ich zainstalowania.

2. Przyjmowanie danych wejściowych

Następnie wskaż pytesseract lokalizację, w której jest zainstalowany silnik Tesseract. Weź obraz samochodu jako dane wejściowe, używając funkcji cv2.imread . Zastąp nazwę obrazu nazwą obrazu, którego używasz. Przechowuj obraz w tym samym folderze co projekt, aby ułatwić sobie pracę.

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

Możesz zastąpić następujący obraz wejściowy tym, którego chcesz użyć.

Niebieski samochód z tablicą rejestracyjną

3. Wstępne przetwarzanie danych wejściowych

Zmień szerokość obrazu na 500 pikseli. Następnie przekonwertuj obraz na skalę szarości, ponieważ sprytna funkcja wykrywania krawędzi działa tylko z obrazami w skali szarości. Na koniec wywołaj funkcję bilateralFilter , aby zredukować szum w obrazie.

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. Wykrywanie tablicy rejestracyjnej na wejściu

Wykrywanie tablicy rejestracyjnej to proces określania części samochodu, która ma znaki z tablicy rejestracyjnej.

Wykonywanie wykrywania krawędzi

Rozpocznij od wywołania funkcji cv2.Canny , która automatycznie wykryje krawędzie na wstępnie przetworzonym obrazie.

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

To z tych krawędzi znajdziemy kontury.

Znalezienie konturów

Wywołaj funkcję cv2.findContours i przekaż kopię obrazu z krawędziami . Ta funkcja wykryje kontury. Narysuj wykryte kontury na oryginalnym obrazie za pomocą funkcji cv2.drawContours . Na koniec wyślij oryginalny obraz z narysowanymi wszystkimi widocznymi konturami.

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)

Program wyraźnie rysuje wszystkie kontury, które znajdzie na obrazie samochodu.

Samochód ze wszystkimi widocznymi konturami zaznaczonymi na zielono

Po znalezieniu konturów należy je posortować, aby zidentyfikować najlepszych kandydatów.

Sortowanie konturów

Posortuj kontury na podstawie minimalnej powierzchni 30. Zignoruj ​​te poniżej, ponieważ jest mniej prawdopodobne, że będą konturem tablicy rejestracyjnej. Zrób kopię oryginalnego obrazu i narysuj 30 górnych konturów na obrazie. Na koniec wyświetl obraz.

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)

Jest teraz mniej konturów niż na początku. Jedyne narysowane kontury to te, które w przybliżeniu zawierają tablicę rejestracyjną.

Samochód z narysowanymi pierwszymi trzydziestoma widocznymi konturami

Na koniec musisz zapętlić posortowane kontury i określić, który z nich jest tablicą rejestracyjną.

Zapętlanie ponad 30 najlepszych konturów

Utwórz pętlę for, aby zapętlić kontury. Poszukaj konturu z czterema rogami i określ jego obwód oraz współrzędne. Zapisz obraz konturu zawierającego tablicę rejestracyjną. Na koniec narysuj kontur tablicy rejestracyjnej na oryginalnym obrazie i wyświetl go.

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)

Po wykonaniu pętli program zidentyfikował kontur zawierający tablicę rejestracyjną. Rysuje tylko na konturze tablicy rejestracyjnej.

Samochód z wykrytą tablicą rejestracyjną

5. Rozpoznanie wykrytej tablicy rejestracyjnej

Rozpoznanie tablicy rejestracyjnej polega na odczytaniu znaków na przyciętym obrazie tablicy rejestracyjnej. Załaduj poprzednio zapisany obraz tablicy rejestracyjnej i wyświetl go. Następnie wywołaj funkcję pytesseract.image_to_string i przekaż przycięty obraz tablicy rejestracyjnej. Ta funkcja konwertuje znaki w obrazie na łańcuch.

# 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')

Przycięta tablica rejestracyjna jest pokazana poniżej. Znaki na nim będą wynikiem, który później wydrukujesz na ekranie.

Przycięty obraz tablicy rejestracyjnej

Po wykryciu i rozpoznaniu tablicy rejestracyjnej jesteś gotowy do wyświetlenia wyniku.

6. Wyświetlanie danych wyjściowych

To jest ostatni krok. Drukujesz wyodrębniony tekst na ekranie. Ten tekst zawiera znaki z tablicy rejestracyjnej.

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

Oczekiwany wynik działania programu powinien być podobny do poniższego obrazka:

Trzy zdjęcia samochodów i jedna przycięta tablica rejestracyjna przedstawiające proces wykrywania tablicy rejestracyjnej

Tekst tablicy rejestracyjnej można zobaczyć na terminalu.

Doskonal swoje umiejętności w Pythonie

Wykrywanie i rozpoznawanie tablic rejestracyjnych samochodów w Pythonie to ciekawy projekt do pracy. To wyzwanie, więc powinno pomóc ci dowiedzieć się więcej o Pythonie.

Jeśli chodzi o programowanie, praktyka jest kluczem do opanowania języka. Aby ćwiczyć swoje umiejętności, musisz pracować nad ciekawymi projektami.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *