Analiza i przetwarzanie obrazów Temat projektu: Aplikacja na system Android wyodrębniająca litery(znaki) z tekstu Marcin Nycz
1. Wstęp Tematem projektu była aplikacja na system Android do wyodrębniania pojedynczych liter(znaków) z tekstu. Przy pomocy tej aplikacji uruchamiamy aparat w naszym smartfonie i możemy wyodrębnić znaki ze zrobionego zdjęcia z tekstem. Założeniem był czarny tekst na białym tle, czyli standardowe teksty. Niestety możliwości aplikacji w niektórych przypadkach są ograniczone z powodu słabej jakości zdjęć wykonanych aparatami zawartymi w urządzeniach mobilnych. 2. Implementacja Projekt został wykonany w środowisku Android Studio, a aplikacja jest kompatybilna z systemem Android 4.4. Z poziomu aplikacji jesteśmy w stanie uruchomić aparat a następnie otworzyć w niej zrobione przez niego zdjęcie. Jednak, aby wyodrębnić tekst z tego zdjęcia najpierw musimy je zbinaryzować, czyli uzyskać tylko kolory czarny i biały. Do binaryzacji została użyta metoda progowania globalnego. Progowanie czyli zamiana obrazu w odcieniach szarości na obraz dwukolorowy tj. czarno-biały. Na początku więc wykonujemy konwersję naszego zdjęcia na odcienie szarości, a następnie korzystamy z metody progowania globalnego. Polega ona na ustaleniu wartości progu, a następnie porównaniu z nią wartości wszystkich pikseli. Jako sposób ustalenia wartości progu została wzięta średnia wartość pikseli całego zdjęcia w odcieniach szarości. Mając już zbinaryzowany obraz można zacząć wyodrębniać litery. Zostało to zrobione za pomocą metody przedstawionej poniżej. Wyodrębniamy na początku wiersze a następnie pojedyncze litery. Analizujemy zdjęcie od góry do dołu. Jeżeli w wierszu są tylko białe piksele wiersz jest ignorowany. Jeżeli wiersz zawiera czarne piksele to zapamiętujemy pozycję wiersza i analizujemy dalej do momentu natrafienia na wiersz zawierający wszystkie białe piksele. Zapisujemy w nowym obrazku wiersze z
czarnymi pikselami i w ten sposób mamy wyodrębnioną linię tekstu. Analizujemy w ten sposób cały obrazek w celu uzyskania wszystkich linii. Mając wyodrębnione linie z tekstem zaczynamy wyodrębniać pojedyncze litery. Linię z tekstem analizujemy kolumnami, jeżeli mamy kolumnę tylko z białymi pikselami to dana kolumna jest pomijana, natomiast jeżeli natrafimy na czarne piksele to jej pozycja jest zapamiętywana. Sprawdzamy kolejne kolumny do czasu natrafienia na kolumnę zawierającą tylko białe piksele. Zapisujemy do nowego obrazka wszystkie znalezione kolumny z czarnymi pikselami. Następnie obrazek ten analizujemy wierszami i w analogiczny sposób usuwamy białe wiersze od góry lub od dołu obrazka. Po tej operacji mamy już wyodrębnioną literę (znak), którą zapisujemy do pliku, a następnie analizujemy dalej linię w poszukiwaniu następnej litery. W tej sposób mamy każdą literę zapisaną do pliku w pamięci wewnętrznej naszego urządzenia. Dodatkowo znalezione litery zostają wyświetlone w aplikacji.
3. Interfejs aplikacji Po uruchomieniu aplikacji widzimy następujący interfejs. Mamy możliwość uruchomienia kamery lub użycia oryginalnego obrazka czyli zostanie wtedy uruchomiony picker przy pomocy, którego możemy wybrać obrazek z pamięci wewnętrznej naszego urządzenia. Z założenia ma być to oryginalny obrazek czyli już zbinaryzowany (np. stworzony przy użyciu dowolnego narzędzia graficznego), więc nie jest na nim wywoływana metoda binaryzacji. Po uruchomieniu kamery, zrobieniu zdjęcia i zatwierdzeniu, w środkowej części interfejsu aplikacji ukaże się już zbinaryzowany obrazek. Możemy w tej chwili
nacisnąć przycisk Znajdź tekst, który wyodrębni i wyświetli oraz zapisze do plików litery w nim zawarte. Poniżej znajduje się zrzut ekranu z aplikacji z wyodrębnionymi literami z obrazka.
Wyodrębnione litery zostają wyświetlane na scrollowalnej liście, więc mamy możliwość zobaczenia uzyskanych wyników. Dodatkowo w pamięci wewnętrznej naszego urządzenia zostaje stworzony folder AiPO, który zawiera pliki typu png z wyodrębnionymi liniami oraz pojedynczymi literami. Aplikacja była testowana dla przykładowego tekstu napisanego na całej wielkości kartki A4. W normlanych warunkach oświetleniowych (jasny pokój) była możliwość zrobienia zdjęcia z którego da się wyodrębnić wszystkie znaki. Problemy pojawiały się przy słabszym oświetleniu. Przy słabszej jakości zdjęcia np. niektóre litery są wyodrębnione jako połączone ze sobą, nie widać wtedy odstępu między nimi i zostają potraktowane jako jedność. 4. Wnioski Założenia projektu zostały wykonane i aplikacja prawidłowo wyodrębnia znaki zawarte w tekście. W niektórych przypadkach problemem jest uzyskanie zdjęcia dobrej jakości i jego zbinaryzowanie. Powodem tego jest słabej jakości aparat w urządzeniu mobilnym, oraz wpływają na to warunki zewnętrzne (np. oświetlenie). 5. Załączone pliki W paczce przesyłam cały projekt, stworzony w Android Studio, przykładowy obrazek z tekstem do rozpoznania oraz plik.apk, z aplikacją, który można uruchomić na urządzeniu z systemem Android.