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ć przeor
instalacja 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.
pypeć zainstalować OpenCV-Python
-
imutils: Użyjesz tej biblioteki do przycięcia oryginalnego obrazu wejściowego do żądanej szerokości.
pypeć zainstalować imutils
-
piteserakt: Użyjesz tej biblioteki do wyodrębnienia znaków z tablicy rejestracyjnej i przekonwertowania ich na ciągi znaków.
Biblioteka pytesseract opiera się na Tesseract OCR silnik do rozpoznawania znaków.pypeć zainstalować piteserakt
Czym jest Tesseract OCR i jak go zainstalować na komputerze
Tesseract OCR to silnik, który potrafi rozpoznawać 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 Tesseract OCR organizować coś
- 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 piteserakt
Musisz zaimportować plik OpenCV-Python biblioteka 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 za pomocą cv2.imread funkcjonować. 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”
obraz_oryginalny = cv2.imread(„obraz3.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 jako sprytna funkcja wykrywania krawędzi działa tylko z obrazami w skali szarości. Na koniec zadzwoń do tel filtr dwustronny funkcję redukcji szumów obrazu.
oryginalny_obraz = imutils.resize (oryginalny_obraz, szerokość=500 )
szary_obraz = cv2.cvtColor (oryginalny_obraz, cv2.COLOR_BGR2GRAY)
szary_obraz = cv2.bilateralFilter (szary_obraz, 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
Zacznij od wywołania cv2.Canny funkcja, 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
Zadzwoń do cv2.findKontury funkcji i przekazać kopię pliku obraz z krawędziami. Ta funkcja wykryje kontury. Narysuj wokół wykrytych konturów na oryginalnym obrazie, używając cv2.drawKontury funkcjonować. Na koniec wyślij oryginalny obraz z narysowanymi wszystkimi widocznymi konturami.
kontury, nowy = cv2.findContours (edge_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = oryginalny_obraz.kopia()
cv2.rysujKontury(img1, kontury, -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 najlepsze 30 kontury na obrazie. Na koniec wyświetl obraz.
kontury = posortowane (kontury, klucz = cv2.contourArea, odwróć = PRAWDA)[:30]
# przechowuje kontur tablicy rejestracyjnej
screenCnt = Nic
img2 = oryginalny_obraz.kopia()
# rysuje 30 najlepszych konturów
cv2.rysujKontury(img2, kontury, -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.
liczba = 0
idx = 7dla c w konturach:
# przybliżyć kontur tablicy rejestracyjnej
obwód_obrysu = cv2.arcLength (c, PRAWDA)
w przybliżeniu = cv2.w przybliżeniuPolyDP(c, 0.018 * kontur_obwodu, PRAWDA)# Szukaj konturów z 4 rogami
JeśliLen(około)== 4:
screenCnt = ok# znajdź współrzędne konturu tablicy rejestracyjnej
x, y, w, h = cv2.prostokąt ograniczający (c)
nowy_img = oryginalny_obraz [ y: y + h, x: x + w]# przechowuje nowy obraz
cv2.imwrite('./'+str (idx)+'.png',nowy_img)
idx += 1
przerwa
# rysuje kontur tablicy rejestracyjnej na oryginalnym obrazie
cv2.rysujKontury(oryginalny obraz, [ekranCnt], -1, (0, 255, 0), 3)
cv2.imshow("wykryta tablica rejestracyjna", oryginalny obraz )
Po wykonaniu pętli program zidentyfikował kontur zawierający tablicę rejestracyjną. Rysuje tylko na konturze tablicy rejestracyjnej.
5. Rozpoznawanie 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 zadzwoń do tel pytesseract.image_to_string funkcji i przekazać przycięty obraz tablicy rejestracyjnej. Ta funkcja konwertuje znaki w obrazie na łańcuch.
# nazwa pliku przyciętego obrazu tablicy rejestracyjnej
cropped_License_Plate = './7.png'
cv2.pokaż("przyciętelicencjapłyta", cv2.przeczytane(cropped_license_tablica))
# konwertuje znaki tablicy rejestracyjnej na łańcuch
text = pytesseract.image_to_string (cropped_License_Plate, lang=„pol”)
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.
wydrukować(„Tablica rejestracyjna to:”, tekst)
cv2.klucz oczekiwania(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.