Wykrywanie obiektu (słów) na obrazie

Chcę zaimplementować wykrywanie obiektów w tablicy rejestracyjnej (Nazwa Miasta) . Mam obrazek:

I chcę wykryć, czy obrazek zawiera słowo "بابل":

Próbowałem użyć metody dopasowania szablonu przy użyciu OpenCV, a także przy użyciu MATLAB, ale wynik jest słaby, gdy testowane z innymi obrazami.

Czytałem również tę stronę , ale nie byłem w stanie dobrze zrozumieć, co z tego zrobić.

Czy ktoś może pomożesz mi czy dasz mi krok po kroku jak to rozwiązać? Mam projekt rozpoznawania tablic rejestracyjnych i możemy rozpoznać i wykryć numery, ale muszę wykryć i rozpoznać słowa (to te same słowa z większą liczbą samochodów)

Author: Maadh, 2014-04-12

2 answers

Twoje pytanie jest bardzo szerokie, ale dołożę wszelkich starań, aby wyjaśnić optyczne rozpoznawanie znaków (OCR) w kontekście programistycznym i przedstawić ogólny przepływ pracy nad projektem, a następnie udane algorytmy OCR.

Problem, z którym masz do czynienia jest łatwiejszy niż większość, ponieważ zamiast rozpoznawać / odróżniać różne znaki, musisz rozpoznać tylko jeden obraz (zakładając, że jest to jedyne miasto, które chcesz rozpoznać). Jesteś jednak przedmiotem wielu ograniczeń dowolnego algorytmu rozpoznawania obrazu (jakość, Oświetlenie, zmienność obrazu).

Rzeczy, które musisz zrobić:

1) Izolacja obrazu

Będziesz musiał odizolować swój obraz od hałaśliwego tła:

samochód też oprócz płyty

Myślę, że najlepszą techniką izolacji byłoby najpierw odizolowanie tablicy rejestracyjnej, a następnie odizolowanie konkretnych znaków, których szukasz. Ważne rzeczy, o których należy pamiętać podczas tego kroku:

  • czy tablice rejestracyjne zawsze pojawiają się w tym samym miejscu na samochodzie?
  • czy samochody są zawsze w tej samej pozycji podczas robienia zdjęcia?
  • czy słowo, którego szukasz, jest zawsze w tym samym miejscu na tablicy rejestracyjnej?
[5]}trudność/realizacja zadania zależy w dużej mierze od odpowiedzi na te trzy pytania.

2) przechwytywanie obrazu / przetwarzanie wstępne

Jest to bardzo ważny krok dla twojej konkretnej realizacji. Chociaż jest to możliwe, jest bardzo mało prawdopodobne, aby Twoje zdjęcie będzie wyglądało tak:

perfekcja

Ponieważ twoja kamera musiałaby być bezpośrednio przed tablicą rejestracyjną. Bardziej prawdopodobne, twój obraz może wyglądać jak jeden z nich:

popaprana Płyta (skala Niewłaściwa)

również zła płyta (Wymiary)

W zależności od perspektywy, z której pochodzi obraz. Najlepiej, jeśli wszystkie obrazy zostaną wykonane z tego samego punktu widzenia i będziesz mógł po prostu zastosować pojedynczą transformację, aby wszystkie wyglądały podobnie (lub w ogóle nie były stosowane). Jeśli masz zdjęcia wzięte z różnych punktów widzenia, musisz manipulować nimi, albo porównasz dwa różne obrazy. Ponadto, szczególnie jeśli robisz zdjęcia tylko z jednego punktu widzenia i zdecydujesz się nie robić transformacji, upewnij się, że tekst, którego szukasz, jest przekształcony z tego samego punktu widzenia. Jeśli nie, będziesz miał nie tak wielki wskaźnik sukcesu, który jest trudny do debugowania / rozgryzienia.

3) obraz optymalizacja

Prawdopodobnie będziesz chciał (a) przekonwertować obrazy na czarno-białe i (b) zmniejszyć szumy obrazów. Te dwa procesy nazywane są odpowiednio binaryzacją i despeckling. Istnieje wiele implementacji tych algorytmów dostępnych w wielu różnych językach, najbardziej dostępnych przez wyszukiwarkę Google. Możesz przetwarzać obrazy wsadowo za pomocą dowolnego języka / bezpłatnego narzędzia, jeśli chcesz, lub znaleźć implementację, która działa z dowolnym językiem, który zdecydujesz się pracować do środka.

4) Pattern recognition

Jeśli chcesz wyszukać tylko nazwę tego jednego miasta (tylko jedno słowo ever ), najprawdopodobniej będziesz chciał wdrożyć strategię dopasowania matrycy. Wiele osób odnosi się również do Matrix matching jako rozpoznawanie wzorców , więc być może słyszałeś to w tym kontekście wcześniej. Oto doskonały artykuł opisujący implementację algorytmu, która powinna Ci ogromnie pomóc, jeśli zdecydujesz się użyć Matrix matching. Innym dostępnym algorytmem jest ekstrakcja funkcji, która próbuje zidentyfikować słowa na podstawie wzorców wewnątrz liter (tj. pętli, krzywych, linii). Możesz użyć tego, jeśli styl czcionki słowa na tablicy rejestracyjnej kiedykolwiek się zmieni, ale jeśli zawsze będzie używana ta sama czcionka, myślę, że dopasowanie matrycy będzie miało najlepsze wyniki.

5) Trening algorytmów

W zależności od podejścia, które podejmiesz (jeśli używasz algorytmu uczenia się), może być konieczne przeszkolenie algorytmu z dane, które są oznaczone. Oznacza to, że masz serię zdjęć, które zostały zidentyfikowane jako True (zawiera nazwę miasta) lub False (nie). Oto przykład psuedocode jak to działa:

train = [(img1, True), (img2, True), (img3, False), (img4, False)]

img_recognizer = algorithm(train)

Następnie stosujesz swój wyszkolony algorytm, aby zidentyfikować nietagowane obrazy.

test_untagged = [img5, img6, img7]

for image in test_untagged:
    img_recognizer(image)

Twoje zestawy treningowe powinny być znacznie większe niż cztery punkty danych; ogólnie rzecz biorąc, im większe, tym lepsze. Po prostu upewnij się, jak powiedziałem wcześniej, że wszystkie obrazy są identyczne transformacja.

Oto bardzo, bardzo wysoki przepływ kodu, który może być pomocny w implementacji twojego algorytmu:

img_in = capture_image()

cropped_img = isolate(img_in)

scaled_img = normalize_scale(cropped_img)

img_desp = despeckle(scaled_img)

img_final = binarize(img_desp)

#train
match() = train_match(training_set)

boolCity = match(img_final)

Powyższe procesy zostały wdrożone wiele razy i są dokładnie udokumentowane w wielu językach. Poniżej znajdują się niektóre implementacje w językach oznaczonych w twoim pytaniu.

Powodzenia!
 45
Author: Luigi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-08 23:52:20

Jeśli zapytasz "chcę wykryć, czy obraz zawiera słowo "بابل" - Jest to klasyczny problem, który rozwiązuje się za pomocą http://code.opencv.org/projects/opencv/wiki/FaceDetection Jak klasyfikator.

Ale zakładam, że nadal chcesz więcej. Wiele lat temu próbowałem rozwiązać problemy z simiarem i podaję przykładowy obrazek, aby pokazać, jak dobrze/źle było: {]}

Tutaj wpisz opis obrazka

Do wykrycia tablicy rejestracyjnej użyłem bardzo podstawowego wykrywania prostokąt, który znajduje się w każdym folderze OpenCV samples. Oraz następnie użyto perspective transform, aby naprawić układ i rozmiar. Ważne było zaimplementowanie wielu kontroli, aby sprawdzić, czy prostokąt wygląda wystarczająco dobrze, aby być tablicą rejestracyjną. Na przykład, jeśli prostokąt ma 500px wysokości i 2px szerokości, to prawdopodobnie nie jest to, czego chcę i został odrzucony.

Użyj https://code.google.com/p/cvblob / aby wyodrębnić tekst arabski i inne komponenty na wykrytej płycie. Po prostu miałem podobną potrzebę wczoraj w innym projekcie. Musiałem wydobyć japońskie znaki kanji z Strona:

Tutaj wpisz opis obrazka

CvBlob robi dla ciebie dużo pracy.

Następny krok użyj techniki wyjaśnione http://blog.damiles.com/2008/11/basic-ocr-in-opencv / aby dopasować nazwę miasta. Wystarczy nauczyć algorytm z przykładowych zdjęć różnych nazw miast i wkrótce powie 99% z nich po prostu out of box. Stosowałem podobne podejście do różnych projektów i jestem pewien, że działają

 12
Author: Tõnu Samuel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-25 02:25:43