Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie Wydział Elektrotechniki, Automatyki, Informatyki i Elektroniki PROJEKT INŻYNIERSKI SYSTEM TŁUMACZACY ONLINE DLA DANYCH OBRAZOWYCH WOJCIECH MAZUR, MAURYCY MICHALSKI OPIEKUN: dr inż. Dominik Radziszowski Kraków 2011
OŚWIADCZENIE AUTORA PRACY OŚWIADCZAM, ŚWIADOMY(-A) ODPOWIEDZIALNOŚCI KARNEJ ZA PO- ŚWIADCZENIE NIEPRAWDY, ŻE NINIEJSZY PROJEKT WYKONAŁEM(-AM) OSOBIŚCIE I SAMODZIELNIE W ZAKRESIE OPISANYM W DALSZEJ CZEŚCI DOKUMENTU I ŻE NIE KORZYSTAŁEM(-AM) ZE ŹRÓDEŁ INNYCH NIŻ WYMIENIONE W DALSZEJ CZEŚCI DOKUMENTU................................. PODPIS
3 1. Cel prac i wizja produktu Celem projektu było stworzenie systemu online tłumaczącego dane obrazowe. System umożliwia rozpoznanie tekstu z przesłanego obrazu, przetłumaczenia go na wybrany inny język oraz przesłania użytkownikowi wynikowego tekstu w innym języku. Dla końcowego użytkownika została stworzona aplikacja mobilna na platformę Android. Dostęp online do usług tłumaczących typu machine translation jest coraz bardziej powszechny, ich jakość rośnie. Istnieją też biblioteki oraz dostępne jako usługi systemy typu OCR rozpoznające tekst na przekazywanych danych obrazowych. Połączenie obu technologii zaowocowało stworzeniem systemu tłumaczącego tekst z danych obrazowych. Do czego jest to przydatne? Przykładowo: W lokalnej chińskiej restauracji dostajemy menu (niestety nie mają wersji polskiej ani angielskiej), możemy wyjść lub wyciągnąć telefon, zrobić zdjęcie i po chwili otrzymujemy zrozumiałą dla siebie wersji językowej. Potwierdzeniem trafności wyboru tematu jest fakt, że ostatnio pojawiło się na rynku kilka podobnych aplikacji, z których najbardziej znane są: Google Goggles oraz Word Lens. Największymi zagrożeniami dla realizacji projektu były integracja i zapewnienie komunikacji różnych serwisów takich jak rozpoznawanie tekstu z obrazu czy wykonywanie tłumaczenia z naszą aplikacją. Oprócz tego ograniczenia techniczne urządzeń mobilnych spowodowały konieczność poszukiwania metod optymalizacji algorytmów użytych w aplikacji. 2. Zakres funkcjonalności Głównym celem realizacji projektu było stworzenie aplikacji komponentowej o architekturze SOA umożliwiającej tłumaczenie tekstu znajdującego się na zdjęciu. Dodatkowo sposób realizacji projektu umożliwił udostępnienie strony internetowej, na której można przesłać obrazek do tłumaczenia oraz możliwość przesłania danych do tłumaczenia poprzez web service (protokół SOAP oraz REST). Przypadki użycia - część serwerowa: wyślij obraz do tłumaczenia przez web service wyślij obraz do tłumaczenia przez stronę www Przypadki użycia - aplikacja mobilna: ustaw parametry obrazu oraz tłumaczenia zrób zdjęcie i wyślij do tłumaczenia wyślij obraz do tłumaczenia wyświetl historię tłumaczeń Ze względu na wykorzystanie zewnętrznych usług do rozpoznawania tekstu na obrazie oraz tłumaczenia tekstu aplikacja jest zależna od systemów zewnętrznych realizujących te usługi. Ze względu na komponentową strukturę aplikacji możliwe jest łatwe dodawanie i zamianę systemów udostępniających wspomniane usługi.
4 3. Wybrane aspekty realizacji Z uwagi na charakterystykę aplikacji, która wymagała integracji wielu zewnętrznych usług, przyjęte rozwiązanie musiało być na tyle elastyczne, aby podłączanie i zamiana pomiędzy różnymi usługami była jak najprostsza. Jako główny szkielet dla aplikacji serwerowej został wybrany Apache Servicemix w wersji 4.3. Opiera się on o technologię OSGI umożliwiającą łatwą integrację wielu usług. Jako platforma mobilna został wybrany Android z uwagi na dobre środowisko do tworzenia oprogramowania. Kolejnymi argumentami była jego szybko rosnącą popularność oraz możliwość bezpośredniego dostępu do fizycznych urządzeń pracujących na tym systemie operacyjnym. Komunikacja pomiędzy urządzeniem mobilnym a aplikacją serwerową jest oparta o mechanizm REST. Ponadto serwer udostępnia również web service, umożliwiający wywołąnia przy pomocy protokołu SOAP. Zasada działania aplikacji jest oparta w głównej mierze na wykorzystaniu gotowych rozwiązań oferujących podstawowe usługi, takich jak: rozpoznawanie tekstu z obrazu tłumaczenie tekstu Część mobilna projektu ma za zadanie obsługę aparatu w celu zrobienia zdjęcia fragmentowi tekstu oraz obróbkę tego zdjęcia, aby zminimalizować jego rozmiar przy równoczesnym zachowaniu odpowiedniej jakości wymaganej przez aplikację rozpoznawania tekstu. Po wykonaniu zdjęcia użytkownik specyfikuje język źródłowy (może być niezdefiniowany - w takim przypadku aplikacja sama spróbuje rozpoznać dany język) oraz język docelowy, na jaki ma być przetłumaczony tekst z obrazka. Następnym krokiem jest przesłanie zdjęcia z parametrami tłumaczenia do aplikacji serwerowej wykorzystując mechanizm REST. Po otrzymaniu żądania przez komponent odpowiedzialny za wystawienie komunikacji przy pomocy mechanizmu REST zgłoszenie jest przekazywane do centralnej cześci aplikacji routera. Jest on odpowiedzialny za wybór usług do rozpoznawania tekstu z obrazu oraz wykonania tłumaczenia. Po wybraniu odpowiednich usług router przekazuje kolejno zdjęcie do zczytania tekstu, a następnie do przeprowadzenia tłumaczenia. Po tych dwóch krokach rezultat jest zwracany użytkownikowi. 4. Organizacja pracy W trakcie prowadzenia projektu został wyodrębniony podział odpowedzialności za rozwój cześci serwerowej i mobilnej. Za część serwerową odpowiedzialny był Wojciech Mazur, natomiast za część mobilną Maurycy Michalski. Koordynowanie prac projektowych nie ograniczało się jedynie do funkcji nadzorczej. Każdy członek zespołu zajmował się rozwojem oprogramowania, jego testowaniem (zarówno pisaniem testów jednostkowych czy ręcznym wykonywaniu testów funkcjonalnych na prototypach, a na testach wydajnościowych kończąc) oraz tworzeniem dokumentacji w obu częściach systemu. Jako metodykę prowadzenia projektu wybraliśmy model iteracyjny. Podzieliliśmy listę zadań do zrealizowania na części do wykonania w poszczególnych iteracjach, zaczynając od tych najbardziej krytycznych z punktu widzenia aplikacji. 1. Zapoznanie się z technologiami aplikacji głównej Celem iteracji 1 było zaznajomienie się z technologiami potrzebnymi do zbudowania
5 trzonu aplikacji głównej. Technologie te zostały opisane w dokumentacji technicznej w punkcie Rdzeń aplikacji głównej. W trakcie iteracji powstało kilka niezależnych prototypów dla każdej z technologi, realizujących pewne funkcjonalności. Na tym etapie udało się pewne rzeczy zrealizować oraz udowodnić ich wykonalność a także sprawdzić, że pewne rozwiązania nie mogą zostać wdrożone. 2. Integracja głównej aplikacji Iteracja miała za zadanie, na podstawie prototypów lub przy ich wykorzystaniu, stworzenie elementów głównej aplikacji, a następnie zintegrowanie ich ze sobą. Podstawowymi częściami były: odpowiednio skonfigurowany trzon aplikacji, moduły odpowiedzialne za poszczególne funkcjonalności jak rozpoznawanie tekstu na obrazie czy tłumaczenie tekstu, moduł odpowiedzialny za komunikację między modułami. 3. Udostępnienie aplikacji jako usługi w środowisku rozproszonym W trakcie tej iteracji prace skupiały się na stworzeniu kanałów dostępu do aplikacji głównej, które umożliwiałby korzystanie z jej funkcjonalności. Były to: Web Service oraz dostęp w technologi REST. Dodatkowo stworzona została prosta strona www korzystająca z Web Service u, zapewniająca obsługę podstawowej funkcjonalności produktu. Protokół REST został przygotowany z myślą o aplikacji mobilnej. 4. Prosta aplikacja mobilna na platformę Android Prace nad aplikacją mobilną obejmowały stworzenie prostego prototypu o ograniczonej funkcjonalności. Na tym etapie zostały również sprawdzone możliwości aplikacji pod kilkoma względami metodą prototypowania. Efektem prac była prosty program, który komunikował się z główna aplikacją. 5. Rozwój i dopracowanie aplikacji mobilnej W trakcie tej fazy prace dotyczyły rozwoju funkcjonalności aplikacji i dopracowaniem jej działania. Prace te przebiegały w modelu przyrostowym. Efektem pracy była finalna wersja aplikacji mobilnej w pełni skomunikowanej z główna aplikacją. 6. Testy i poprawki aplikacji głównej i mobilnej Zakres prac w tej iteracji obejmował zarówno podstawowe testy funkcjonalne i pokryciowe, mające sprawdzić realizacje założeń funkcjonalnych czy wykryć niepoprawne zachowanie aplikacji w różnych sytuacjach, jak i zaawansowane testy wydajnościowe. Testom poddana została również komunikacja między platformą mobilną a główną aplikacją. 7. Stworzenie kompletnej dokumentacji Iteracja ta miała na celu stworzenie kompletnej dokumentacji - zarówno technicznej, procesowej jak i dokumentacji użytkownika. Wykorzystane do tego zostały materiały i dokumenty tworzone na bieżąco w trakcie powstawania produktu. W trakcie prowadzenia projektu korzystaliśmy z systemu do kordynowania prac projektowych - Trac, w którym między innymi rozdzielaliśmy prace do wykonania. Jako system kontroli wersji został użyty SVN.
6 5. Wyniki projektu Jako wynik prac projektowych powstała aplikacja realizująca zakładane funkcjonalności. Oprócz tego została stworzona dokumentacja techniczna zawierająca techniczne aspekty aplikacji, wykorzystanych technologii i testów pokazujących jej wydajność. Dla klienta została również opracowana dokumentacja użytkownika zawierająca zrzuty ekranu aplikacji dla łatwiejszego przedstawienia możliwości aplikacji. Weryfikacja użyteczności aplikacji została wykonana przez klienta w trakcie testów na fizycznym urządzeniu. Ocena użyteczności jest wysoka. Do interesujących aspektów możliwego rozwoju systemu należy zaliczyć między innymi: zwiększenie dokładności rozpoznawania tekstu na obrazie, wyodrębnianie spójnych fragmentów tekstu czy dynamiczne zastępowanie oryginalnego tekstu tym przetłumaczonym. Materiały źródłowe [1] Richard S. Hall, Karl Pauls, Stuart McCulloch, David Savage OSGI in Action - Creating Modular Applications in Java. Manning, 2010. [2] Binildas C. A. Service Oriented Java Business Integration - Enterprise Service Bus integration solutions for Java developers. Packt Publishing Ltd., March 2008. [3] Kent Ka Iok Tong. Developing Web Services with Apache CXF and Axis2. TipTec Development, Third edition January 2010. [4] Reto Meier. Professional Android 2 Application Development. Wiley Publishing, Inc., 2010. [5] Fuse ESB - based on Apache ServiceMix http://fusesource.com/products/enterpriseservicemix/. [6] Adrian Trenaman technical blog http://trenaman.blogspot.com/.