Git Product home page Git Product logo

slow-down-or-mandat's Introduction

Slow down or mandat Languages count Last commit

Autorzy

  • Ihnatsi Yermakovich
  • Kacper Syrnik
  • Piotr Ptak

Opis i założenia projektu

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.

Sposób uruchomienia

Po sklonowaniu repozytorium znajdującego się się pod tym adresem (GitHub - Ignatella/slow-down-or-mandat), należy wykonać poniższe komendy:

Linux

sudo apt install tesseract-ocr python3-tk

Windows

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:

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 oraz sposób użycia

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:

Opis użytego algorytmu

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).

Podział pracy

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.  

Niekompletne/niedziałające funkcjonalności

  • 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.

slow-down-or-mandat's People

Contributors

ptakpiotr avatar syrnikk avatar ignatella avatar

Watchers

 avatar

Forkers

ptakpiotr syrnikk

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.