7

Buduję aplikację na iOS, która jako funkcja kluczowa zawiera dopasowanie obrazu. Problem polega na tym, że obrazy, które muszę rozpoznać, to małe orientujące się tablice 10x10 z prostym dużym tekstem na nich. Mogą być dość odblaskowe i znajdować się na zewnątrz (więc warunki oświetlenia będą zmienne). Przykładowy obrazRzadkie dopasowywanie obrazu w iOS

enter image description here

Nie będzie aż do 15 tego typu obraz w basenie i naprawdę wszystko, czego potrzeba, aby wykryć to tekst, w celu zalogowania której użytkownik został.

Problem, z którym się borykam, polega na tym, że dzięki oprogramowaniu do porównywania obrazów, które wypróbowałem, aurasma i nieco lepszym arachidom, nie można ich rozróżnić, ponieważ są one przede wszystkim zbudowane do pracy ze szczegółowymi obrazami.

Muszę dokładnie wykryć, która tablica jest skanowana i rozważyłem użycie gps do ulepszenia selekcji, ale jedynym niezawodnym sposobem, jaki znalazłem, jest skłonienie użytkownika do ręcznego wprowadzenia tekstu. Jedną z kluczowych atrakcji, na których opieramy produkt, jest możliwość wykrycia tych obrazów, które już są na miejscu i nie muszą tworzyć żadnych dodatkowych materiałów.

Czy ktoś może zaproponować oprogramowanie, które działałoby (tak jak iOS friendly) lub metodę wykrywania, która byłaby skuteczna i interaktywna/przyjemna dla użytkownika.

środowisko Próbka: http://www.orienteeringcoach.com/wp-content/uploads/2012/08/startfinishscp.jpeg

Środowisko może zmienić się znacząco, w zasadzie wszędzie tablica mogła być umieszczone są; ogrodzenia, ściany i słupy w obszarach zalesionych lub otwartych, ale w przeważającej mierze na zewnątrz.

+2

Czy masz kilka zdjęć tych tabliczek w ich naturalnym środowisku, aby dać wyobrażenie o tym, czego szukamy, aby je wybrać? Jeśli nie możesz znaleźć dobrego rozwiązania na bardziej uogólniony problem z przetwarzaniem obrazu, ludzie z http://dsp.stackexchange.com mogą Ci pomóc w tej części. Nie będą jednak w stanie opisać konkretnego rozwiązania dla systemu iOS. –

+1

Najprawdopodobniej konieczne będzie wstępne przetworzenie obrazów w celu uzyskania obrazu o wysokim kontraście - wyrzucanie wszystkich informacji w skali szarości i kompensowanie cieni itp. Dsp.stackexchange.com może mieć kilka wskazówek. (Są włosami bardziej tolerancyjnymi na "głupie" pytania niż ta tablica.) –

+0

Moja dotychczasowa taktyka polegała na wyizolowaniu obrazu i skróceniu inspekcji nad aparatem. Spodziewam się, że użytkownik wyrówna obraz w obszarze. –

Odpowiedz

1

Udało mi się znaleźć rozwiązanie, które działa całkiem dobrze. Nie jestem jeszcze w pełni zoptymalizowany, ale myślę, że jest to po prostu ulepszenie filtrów, jak to wyjaśnię później.

Początkowo próbowałem skonfigurować opencv, ale było to bardzo czasochłonne i strome, ale dało mi to pewien pomysł. Kluczem do mojego problemu jest naprawdę wykrywanie postaci w obrazie i ignorowanie tła, które w zasadzie było po prostu szumem. OCR został zaprojektowany dokładnie w tym celu.

Znalazłem darmową bibliotekę tesseract (https://github.com/ldiqual/tesseract-ios-lib) łatwą w użyciu i z dużą możliwością personalizacji. Początkowo wyniki były bardzo przypadkowe, ale zastosowanie ostrzenia i filtra monochromatycznego oraz odwróconego koloru sprawdziły się w celu oczyszczenia tekstu. Następnie wytyczono obszar docelowy na ui i wykorzystano go do wycięcia prostokąta obrazu do przetworzenia. Szybkość przetwarzania jest wolna na dużych obrazach, co radykalnie ją zmniejszyło. Filtr OCR pozwolił mi ograniczyć dopuszczalne znaki, a ponieważ plakietki podążają za standardową konfiguracją, zmniejszyło to dokładność.

Do tej pory udało się to z szarymi tablicami tła, ale nie znalazłem prawidłowego filtru dla biało-czerwonych wydań. Moim celem będzie dodanie wykrywania kolorów i usunięcie potrzeby podawania danych w typie.

2

Nie jestem programistą iOs, ale spróbuję odpowiedzieć z algorytmicznego punktu widzenia. Zasadniczo masz problem z wykrywaniem ("Gdzie jest tablica?") I problem z klasyfikacją ("Który to jest?"). Pytanie użytkownika o zachowanie plakietki we wcześniej określonym regionie jest z pewnością dobrym pomysłem. Rozwiązuje to problem wykrywania, który jest trudniejszy do rozwiązania przy ograniczonych zasobach niż problem klasyfikacji.

Do klasyfikacji, widzę dwie możliwości:

  1. Klasyczny "Computer Vision" trasa byłaby ekstrakcji cech i klasyfikacji. Local Binary Patterns i HOG to ekstraktory funkcji, które są wystarczająco szybkie dla urządzeń przenośnych (te drugie są bardziej zaawansowane) i nie są zbyt skomplikowane do wdrożenia. Klasyfikatory są jednak nietrywialne i prawdopodobnie będziesz musiał wyszukać odpowiednią bibliotekę iOs.

  2. Alternatywnie można spróbować zobrazować obraz binarny, tj. Sklasyfikować piksele jako "płytkę"/biały lub "tekst"/czarny. Następnie możesz użyć miary tolerancji błędu, aby porównać swój binaryzowany obraz z binaryzowanym obrazem referencyjnym płytki. chamfer distance measure jest dobrym kandydatem. Zasadniczo sprowadza się to do porównywania dwóch twoich binaryzowanych obrazów. Jest to bardziej tolerancyjne na niewspółosiowość niż porównywanie bezpośrednio obrazów binarnych. Transformacje odległości obrazów referencyjnych mogą być wstępnie obliczone i zapisane na urządzeniu.

Osobiście chciałbym spróbować drugiego podejścia. Prototyp drugiego (niemobilnego) prototypu jest stosunkowo łatwy do kodowania i oceny za pomocą dobrej biblioteki przetwarzania obrazu (OpenCV, Matlab + Image Processing Toolbox, Python, itp.).

+0

Doskonała odpowiedź. Moim głównym problemem jest to, że nie mam czasu na wdrożenie algorytmów dopasowujących, szczególnie z zerowym doświadczeniem. Zamierzam znaleźć/kupić kompletne rozwiązanie, które w przeciwieństwie do dotychczas używanych, działa w moim środowisku. Mówisz o klasyfikacji binarnej daje mi nadzieję, ponieważ kontrast dla wszystkich płytek jest wysoki. Dzięki. –

Powiązane problemy