- Ihnatsi Yermakovich
- Kacper Syrnik
- Piotr Ptak
Założeniem projektu było stworzenie aplikacji rozpoznającej samochodowe tablice rejestracyjne. Do powstania programu wykorzystaliśmy język Python wraz z zależnościami określonymi w pliku requirements.txt. Naszym celem było wykorzystanie operacji na obrazach, w maksymalnym stopniu bazując na rozwiązaniach wykorzystujących różne operacje morfologiczne oraz przekształcenia poznane na zajęciach.
Po sklonowaniu repozytorium znajdującego się się pod tym adresem (GitHub - Ignatella/slow-down-or-mandat), należy wykonać poniższe komendy:
sudo apt install tesseract-ocr python3-tk
winget install UB-Mannheim.TesseractOCR
Domyślnie winget instaluje tesseracta w C:\Program Files\Tesseract-OCR
, którego trzeba dodać do PATH.
A następnie zainstalować zależności wykorzystywane bezpośrednio przez projekt i notebook jupyterowy:
pip install -r requirements.txt
W opracowaniu projektu skorzystano m.in. z następujących modułów:
- customtkinter - customtkinter · PyPI
- pytesseract - pytesseract · PyPI
Pozostałe zależności są wykorzystywane przez notebook jupyter, który prezentuje podstawowe wykorzystanie algorytmu, którym się inspirowaliśmy: OpenCV: Automatic License/Number Plate Recognition (ANPR) with Python - PyImageSearch
Po zainstalowaniu wszystkich modułów potrzebnych przez program, należy wykonać poniższą komendę (znajdując się równocześnie w katalogu z plikiem app.py):
python3 ./app.py
Interfejs użytkownika został opracowany przy wykorzystaniu biblioteki customtkinter, okno programu prezentuje się w sposób następujący (program uruchomiony w WSL2 na systemie Windows 11):
Interfejs programu został opracowany w języku angielskim, po lewej stronie znajduje się panel menu, za pomocą którego możemy wykonywać różne operacje, oto opis opcji:
- Open file - otwiera jeden plik w formacie .jpg bądź .png,
- Export to csv - eksportuje rezultaty rozpoznawania tablic rejestracyjnych, w formacie csv, przykładowe wyniki poniżej:
Bardzo ważne: aby ta funkcjonalność działała, należy podać nazwę pliku z rozszerzeniem csv
- Load from directory - ładuje obrazy do analizy (w formacie .jpg, .png), należy zwrócić uwagę na to, żeby nie przekazać katalogu ze zbyt dużą ilością obrazów (10-20 plików), folder ten musi być otworzony, nie wybrany,
- Add to scrollbar - dodaje załadowany obraz do scrollowalnego elementu po stronie prawej, równocześnie aplikując algorytm,
- Remove from scrollbar - usuwa zawartość scrollbara,
- Przyciski strzałek - służą do nawigacji pomiędzy załadowanymi zdjęciami, które zostały umieszczone w scrollbarze,
- Scrollowalny element - pokazuje załadowane zdjęcia wraz z rozpoznanymi numerami rejestracyjnymi (obsługuje zdarzenia kliknięcia).
Przykładowo, po załadowaniu zdjęcia Alfy Romeo MiTo, otrzymamy następujący widok:
Po kliknięciu na przycisk “Add to scrollbar”, otrzymamy:
Natomiast po kliknięciu przycisku “Remove from scrollbar”:
Poniżej zaprezentowano rezultat działania załadowania z poziomu katalogu:
Klikając jednokrotnie przycisk “prawa strzałka” zostaniemy przeniesieni do pierwszego ze zdjęć:
Klikając na ścieżkę do pliku wraz z rezultatem zostaniemy przeniesieni do odpowiedniego ze zdjęć wraz z wynikiem działania algorytmu:
Interfejs użytkownika po zmianie motywu na jasny prezentuje się następująco:
Wykorzystany algorytm składa się z 2 etapów, w pierwszym (najważniejszym) etapie wykorzystujemy tylko i wyłącznie operacje na obrazach, w celu znalezienia odpowiedniego kandydata na tablicę rejestracyjną, a następnie wywołujemy odpowiednią metodę z modułu (pytesseract), która z rozpoznanego tekstu na zdjęciu zwróci odpowiedni napis, przykładowy rezultat z etapu 1. wraz ze zrzutami ekranu
Bardzo często zdarza się, że algorytm z etapu pierwszego zwraca prawidłowe rezultaty, natomiast ocr rozpoznaje tekst niepoprawnie, dlatego umieściliśmy w folderze algorithm notebook jupyter z kodem algorytmu w wersji pierwotnej (rozpatrującą pierwszego znalezionego kandydata).
Prace wykonywaliśmy z podziałem na część interfejsu użytkownika oraz algorytmu niezależnie od siebie, następnie oba rozwiązania zostały połączone. W celu konsultacji oraz weryfikacji postępów realizacji projektu komunikowaliśmy się za pośrednictwem różnych komunikatorów. Staraliśmy się aby rozłożenie pracy było w miarę możliwości równomierne.
- Rozpoznawanie tekstu zastosowane w zadaniu nie daje zawsze dobrych rezultatów, dla zdecydowanej większości załączonych w katalogu “test_images” zdjęć tablice zostają rozpoznane poprawnie, bądź dają rezultat zbliżony do właściwego. Wykorzystane zdjęcia pochodzą z Internetu.
- W trakcie realizacji projektu skorzystaliśmy również z keras_ocr, jednak rezultaty rozponawania tekstu nie były satysfakcjonujące, dlatego pozostaliśmy przy tesseract mimo istniejących niedoskonałości.
- Algorytm działa dla tablic o stosunku (width x height) pomiędzy 3.5 a 4.7 (nie zadziała dla tablic o innym stosunku).
- Ładowanie bardzo dużej ilości obrazów do pliku za pomocą funkcjonalności “Load from directory” jest niemożliwe - program ulega zatrzymaniu.
- Program obsługuje tylko rozszerzenia jpg oraz png.