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ć:
- Otwórz dowolną przeglądarkę opartą na Chrome
- Pobierz konfigurację Tesseract OCR
- 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ć.
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.
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ą.
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.
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.
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:
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