Zakład Telewizji ZTV Pracownia mediów cyfrowych Instrukcja do ćwiczenia: Deskryptory MPEG-7 z wykorzystaniem serwisów sieciowych Przedmiot: Techniki Internetu (TINE) Andrzej Buchowicz, Grzegorz Galiński, Krystian Ignasiak, Grzegorz Pastuszak Warszawa, kwiecień 2010 Zakład Telewizji Instytut Radioelektroniki Wydział Elektroniki i Technik Informacyjnych Politechnika Warszawska Wprowadzenie We wprowadzeniu znajduje się krótki opis pojęć ważnych dla zrozumienia dalszej części instrukcji oraz zadań do wykonania. Celem ćwiczenia jest prezentacja możliwości szybkiego tworzenia aplikacji korzystających z koncepcji serwisów sieciowych oraz ilustracja tych możliwości przykładowym wyszukiwaniem obrazów w multimedialnej bazie danych na podstawie wzorca. Serwis sieciowy Serwis sieciowy (usługa sieciowa, ang. web service) jest komponentem programistycznym o określonej funkcjonalności. Usługa jest jednocześnie niezależna od platformy sprzętowo- programowej na której jest zaimplementowana oraz niezależna od samej implementacji. Serwis sieciowy jest komponentem, który zwykle jest używany do budowy rozproszonych systemów informatycznych, wykorzystujących Internet do komunikacji pomiędzy modułami aplikacji. Moduły systemu komunikują się pomiędzy sobą wykorzystując standardowe protokoły komunikacyjne oraz standardowe formaty danych. Do wymiany informacji pomiędzy modułami najczęściej wykorzystywany jest język XML, konkretnie jego aplikacja SOAP (Simple Object Access Protocol). Komunikaty SOAP przesyłane są najczęściej protokołem HTTP ze względu na jego rozpowszechnienie oraz to, że dane przesyłane tym protokołem zwykle nie są blokowane przez zapory sieciowe. Korzystanie z usługi przypomina zdalne wywołanie funkcji, tj. przekazanie nazwy funkcji do wywołania, przekazanie oczekiwanych przez funkcję parametrów (o określonych typach) oraz odebranie rezultatu działania funkcji (także określonego typu). Definicja serwisu zawiera właśnie nazwy i typy realizowanych funkcji oraz listę argumentów funkcji. Definicję serwisu wyraża się także w aplikacji XML języku WSDL (Web Services Definition Language). Takie podejście do budowy aplikacji rozproszonych ma wiele zalet: możliwość budowy usług przez niezależne firmy/organizacje, otwartość rozwiązań, korzystanie z dowolnych narzędzi programistycznych oraz integracja systemu informatycznego na poziomie danych a nie na poziomie kodu. W trakcie zajęć będzie używany serwis sieciowy obliczający niektóre deskryptory MPEG-7. Serwis ten jest zlokalizowany na komputerze o nazwie tiger.ire.pw.edu.pl. Z punktu widzenia serwisu kluczowa jest jego definicja, przedstawiona w postaci pliku w języku WSDL. Opis serwisu obliczającego deskryptory MPEG-7 można znalezć pod adresem: http://tiger.ire.pw.edu.pl:8080/pbz-mpeg7-pbz-mpeg7EJB/XmDao?wsdl Poniżej zamieszczono pełny tekst definicji przykładowego serwisu w języku WSDL. 1 2xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ejb.mpeg7.pbz/" xmlns:xsd="http://www.w3.org/2001/XML 3 4 xmlns:xs="http://www.w3.org/2001/XMLSchema"> 5 6 7 8 9 10 11 12 13 14 15 16 17 18 2 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 3 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 199 200 201 202 203 204 205 208 209 210 211 212 213 214 217 218 219 220 221 222 4 223 226 227 228 229 230 231 232 235 236 237 238 239 240 241 244 245 246 247 248 249 250 253 254 255 256 257 258 259 262 263 264 265 266 267 268 269 W uproszczeniu, plik ten definiuje serwis poprzez wyspecyfikowanie typów danych przesyłanych pomiędzy elementami oprogramowania (linie 3-106), komunikatów (linie 107-154), operacji składających się z sekwencji komunikatów (linie 155-188), powiązania pomiędzy operacjami a wywołaniami protokołu SOAP (linie 189-263) i wreszcie podanie tzw. punktu końcowego, czyli adresu, pod którym dostępny jest cały serwis (linie 264-268). Przykładowo w linii 156 definiuje się operację obliczania deskryptora calculateDescriptor, która składa się przesłania komunikatu wejściowego (komunikat wysyła klient serwisu do serwera, na którym zainstalowany jest serwis) o nazwie XmDao_calculateDescriptor oraz komunikatu wyjściowego o nazwie XmDao_calculateDescriptorResponse. Oba te komunikaty są zdefiniowane wcześniej w linii 140 XmDao_calculateDescriptor i w linii 137 XmDao_calculateDescriptorResponse. W podobny sposób zdefiniowane są pozostałe operacje udostępniane przez serwis, np. obliczenie odległości pomiędzy obrazami gdy kryterium jest funkcja podobieństwa danego deskryptora, pobrania URL wskazującego położenie obrazu czy też pobrania liczby wszystkich obrazów zarejestrowanych w bazie serwisu. Należy zwrócić uwagę, że w linii 266 automatycznie wygenerowany plik opisu serwisu zawiera odwołanie do komputera, na którym zainstalowano serwer aplikacyjny (w tym przypadku JBoss), a na nim rozmieszczono całe oprogramowanie serwisu obliczającego deskryptory MPEG-7. Jest to definicja tzw. punktu końcowego serwisu. Dokument WSDL może zawierać wiele punktów końcowych. Klienty serwisu mogą korzystać z dowolnego punktu końcowego. Bardzo ważne jest to, że opis serwisu jest generowany w sposób automatyczny co jest charakterystyczne dla tej metodyki tworzenia oprogramowania rozproszonego. Po 5 zaimplementowaniu metod obliczających deskryptory (po zaimplementowaniu metod serwisu w ogólności) rozmieszcza się serwis na serwerze aplikacyjnym z jednoczesnym, automatycznym wygenerowaniem dokumentu WSDL opisującego funkcjonalność i możliwości serwisu. Dokument WSDL jest potrzebny do tego by przygotować (również w sposób automatyczny) szkielet oprogramowania klienckiego korzystającego z serwisu. Deskryptory Deskryptor wg słownika języka polskiego to słowo lub grupa słów, które razem z innymi opisują treść tekstu na potrzeby katalogów lub systemów wyszukiwania informacji . W multimediach przyjmuje się, że deskryptor to pewna struktura danych, która opisuje inną, zwykle większą strukturę danych, będącą obiektem multimedialnym (obrazem cyfrowym, nagraniem muzycznym, sekwencją wideo itp.). Użycie deskryptorów danych multimedialnych odpowiada rosnącej potrzebie indeksowania tych danych, ze względu na zalewającą nas każdego dnia ich ilość. Można już mówić o powodzi informacyjnej związanej z łatwością produkcji i dystrybucji multimediów. Coraz większy problem stanowi filtrowanie (odrzucanie) informacji niepotrzebnej lub powtarzającej się. Informacja o treści innej informacji (multimedialnej w tym przypadku) może być rozpatrywana na niskim i wysokim poziomie. Cechy niskopoziomowe to te, które nie mają wartości semantycznej, ale za to możliwa jest ich automatyczna ekstrakcja, zaś cechy wysokopoziomowe związane są z ludzką percepcją treści i typowo wymagają ekstrakcji manualnej lub co najwyżej półautomatycznej. Deskryptory powinny być ogólne, tj. powinny być niezależne od opisywanych treści, jakkolwiek buduje się także deskryptory przeznaczone wyłącznie dla specyficznych obiektów multimedialnych, np. deskryptory rozpoznawania twarzy lub deskryptory kształtu. Ogólność deskryptorów dotyczy także niezależności od zastosowania deskryptora w konkretnej aplikacji. Ważną cechą deskryptorów jest także efektywność w sensie wyszukiwania i filtrowania informacji. Dąży się także do tego, by deskryptory był upakowane, w sensie ich małego rozmiaru oraz niezależne od operacji, którym mogą być poddawane dane multimedialne (skalowanie, obrót, artefakty wynikające z kompresji danych itd.). Dla danych multimedialnych opracowano międzynarodowy standard ekstrakcji (obliczania) metadanych jest to standard MPEG-7 [1, 2, 3, 4]. Zawiera on definicję języka opisu metadanych, DDL (Description Definition Language), definicję opisu metadanych, czyli definicję deskryptorów, DS (Description Schemes, Descriptors) oraz definicję relacji pomiędzy deskryptorami. Deskryptory MPEG- 7 dzielą się na: " ogólne: data/czas, komentarze, informacje o autorach, podział na ujęcia/obiekty, & " wizualne: kolor, tekstura, kształt, ruch, & " audio: widmo, melodia, & Serwis sieciowy używany w trakcie zajęć implementuje zestaw deskryptorów związanych z kolorami w obrazie. Są to w szczególności DominantColor, ScalableColor, ColorLayout, ColorStructure, CTBrowsing. Poniżej przestawiono graficznie intuicje związane z budową wybranych deskryptorów MPEG-7. 6 Wybrane deskryptory MPEG-7 Deskryptor koloru dominującego, DominantColor Ten deskryptor reprezentuje do 8 dominujących kolorów w obrazie, każdy z kolorów reprezentowany jest przez indeks kwantyzacji oraz, opcjonalnie, przez wariancję wartości kolorów w klastrze (tylko informacjo o tym czy wariancja jest niska czy wysoka). Deskryptor koloru dominującego znajduje te kolory, które najczęściej pojawiają się w obrazie, w przeciwieństwie do deskryptorów bazujących na histogramach, które obliczają tylko wagę danego koloru w obrazie. Skalowalny histogram kolorów, ScalableColor Deskryptor ten oblicza się przez znalezienie 256-komórkowego histogramu kolorów w przestrzeni HSV (Hue Saturation Value), a następnie nieliniowemu skwantowaniu wartości histogramu do 4 bitów, wykonaniu transformacji Haara skwantowanych wartości i wreszcie braniu pod uwagę wszystkich 256 współczynników transformaty lub też mniejszej ich liczby (128, 64, 32, 16). Sam deskryptor przestawiany jest jako wektor wybranej liczby współczynników. Liczba współczynników to właśnie skalowanie deskryptora. Deskryptor ten nie ma intuicyjnej reprezentacji graficznej, jednak dość dobrze odzwierciedla udział kolorów w obrazie. Deskryptor struktury koloru, ColorStructure Ten deskryptor to także odpowiednio obliczany histogram kolorów, jednak bierze się pod uwagę strukturę rozmieszczenia pikseli danego koloru. Tu uzyskuje się lepsze opisanie przestrzennego rozmieszczenia poszczególnych kolorów w obrazie. Deskryptor rozkładu kolorów w obrazie, ColorLayout Ten deskryptor opisuje ogólny rozkład kolorów w obrazie. 7 Deskryptor TextureBrowsing Opisuje podstawowe cechy tekstury: skalę, kierunkowość (dwa kierunki dominujące) i regularność. Deskryptor kształtu, RegionShape Transformata ART przedstawienie regionu jako ważonej sumy regionów bazowych. Idea takiego przedstawienia podobna jest do opisu funkcji przez transformatę DCT lub DFT. Przykładowe kształty, które można opisać przy pomocy transformaty ART Znajdują się na rysunku poniżej. Części rzeczywiste regionów bazowych transformaty ART podane są na poniższym rysunku. Przebieg ćwiczenia Ćwiczenie jest prowadzone z wykorzystaniem standardowego komputera PC, z dostępem do Internetu. Logowanie do komputerów laboratoryjnych wymaga podania nazwy użytkownika (student) i hasła (student). Z prac przeprowadzonych w trakcie ćwiczeń należy przygotować sprawozdanie w laboratorium zainstalowany jest pakiet OpenOffice. Sprawozdanie (w formie dokumentu PDF) należy przysłać pocztą elektroniczną na adres podany przez prowadzącego. Do sprawozdania: wpisz numer komputera, na którym pracowałeś wykonując zadania laboratoryjne. 8 Wykorzystanie aplikacji klienta serwisu sieciowego (gruby klient) Aplikacja klienta jest napisana w Javie. Do działania wymagane jest środowisko uruchomieniowe Javy (Java Runtime). To właśnie to wymagane środowisko powoduje, że mówimy o tym kliencie gruby. Bez środowiska uruchomieniowego nie da się uruchomić tego oprogramowania. Rysunek 1 Uproszczona architektura aplikacji klienta serwisu sieciowego Gruby klient korzysta z serwisu sieciowego w taki sposób, że wywołuje bezpośrednio metody udostępniane przez serwis. Architekturę tego rozwiązania w sposób uproszczony przedstawia Rysunek 1. Rysunek 2 Okno grubego klienta serwisu tuż po uruchomieniu Kod wynikowy aplikacji klienta znajduje się w pliku archiwum o nazwie XmWsClient.jar w katalogu \\Ant\TINE w sieci laboratorium. Plik należy skopiować na lokalny dysk przed uruchomieniem. Po uruchomieniu pojawia się okno programu (Rysunek 2), które jest podzielone jest na dwa obszary ich funkcje zostaną przedstawione w dalszej części. Program tego klienta serwisu pozwala na wyszukiwanie obrazów z bazy danych serwisu podobnych do obrazu, który przedstawi użytkownik. Podobieństwo jest obliczane w sensie odległości pomiędzy deskryptorami implementowanymi przez serwis i obliczanymi przez serwis. Wyboru deskryptora dokonuje się przez menu Options -> Search options. Rysunek 3 Okno wyboru deskryptora i liczby spodziewanych obrazów podobnych 9 Po wybraniu tej opcji menu pojawia się okno dialogowe (Rysunek 3), w którym można wybrać jeden z czterech udostępnianych przez tego klienta deskryptorów, a implementowanych przez serwis. W polu number of results można wybrać liczbę podobnych obrazów zwracanych przez serwis w trakcie wyszukiwania (parametr N). Menu Images ma dwie opcje. Pierwsza, Get number of images, powoduje wysłanie zapytania do serwisu o liczbę obrazów przechowywanych w bazie danych serwisu. Serwis zwraca tę liczbę, a program klienta wyświetla ją w oknie dialogowym. Do sprawozdania: podaj liczbę obrazów przechowywanych w bazie. Druga opcja menu Images, Find similar images, stanowi najważniejsze użycie serwisu. Po wybraniu tej opcji pojawia się okno dialogowe, w którym należy podać prawidłowy URL do obrazu, dla którego chcemy znalezć podobne obrazy w sensie wybranego wcześniej deskryptora. Program wyśle podany lokalizator obrazu przykładowego do serwisu. Serwis obliczy dla tego obrazu deskryptor, następnie zwróci listę lokalizatorów obrazów zarejestrowanych w bazie serwisu, które są najbliższe w sensie wybranego deskryptora do wskazanego obrazu. W pliku \\Ant\TINE\listaURL.txt znajduje się lista lokalizatorów obrazów, które należy używać do testów w trakcie zajęć. Po podaniu lokalizatora obrazu stanowiącego przykład, program łączy się z serwisem w celu obliczenia wybranego deskryptora dla tego przykładu. Kolejnym krokiem jest wysłanie zapytania do serwisu, które zwróci N obrazów, które są najbliższe przykładu w sensie wybranego deskryptora. Wyniki (=N najbliższych obrazów) prezentowane są w postaci samoorganizującej się mapy (SOM, Self- organizing Map, [5, 6, 7]). W skrócie, mapa iteracyjnie rozmieszcza obrazy na płaszczyznie tak, by obrazy gromadziły się według jakiejś cechy, w tym przypadku według odległości do przykładu. Rysunek 4 przedstawia wygląd okna klienta po wyszukaniu 400 (parametr N) najbliższych obrazów do obrazu http://tiger.ire.pw.edu.pl/pbz/images/img00868_s3.jpg, który wyświetlany jest w lewym górnym rogu okna. Najbliższe obrazy prezentowane są w postaci miniaturek w dolnej części okna. Najechanie kursorem myszy na miniaturkę powoduje wyświetlenie wskazanego obrazu obok obrazu stanowiącego zapytanie, po jego prawej stronie, wraz z jego lokalizatorem i odległością pomiędzy deskryptorami obliczonymi dla obrazu przykładowego i wskazanego myszą. 10 Rysunek 4 Przykładowy wygląd okna grubego klienta po wyszukaniu najbliższych obrazów Najechanie kursorem myszy na miniaturkę powoduje wyświetlenie wskazanego obrazu obok obrazu stanowiącego zapytanie, po jego prawej stronie, wraz z jego lokalizatorem i odległością pomiędzy deskryptorami dla obrazu przykładowego i znalezionego w bazie. Zadanie 1. Dla dwóch plików obrazowych wskazanych przez prowadzącego znalezć najbliższe obrazy (przy N=5), przepisać do sprawozdania nazwę czterech plików odnalezionych (czterech a nie pięciu, gdyż jeden z odnalezionych plików będzie wzorcem) jako najbliższe przez klienta wraz z odległością pomiędzy deskryptorami przykładu i odnalezionego obrazu. Powtórzyć to dla wszystkich czterech deskryptorów dostępnych w grubym kliencie. Zadanie 2. Znalezć przykładowy obraz w Internecie. Powtórzyć Zadanie 1 dla znalezionego obrazu. Do sprawozdania wpisać także URL obrazu przykładowego. 11 Wykorzystanie interfejsu przeglądarkowego do serwisu (cienki klient) W tym przypadku uproszczoną architekturę rozwiązania przestawia Rysunek 5. Rysunek 5 Uproszczona architektura rozwiązania z interfejsem przeglądarkowym do serwisu Aplikacja klienta jest także napisana w Javie, lecz w tym przypadku działa po stronie serwera aplikacji, przygotowując interfejs, który jest prezentowany w przeglądarce internetowej. Przeglądarka może być traktowana w tym przypadku jako cienki klient. Dla tego zastosowania użytkownik końcowy używa oprogramowania ogólnego przeznaczenia jakim jest przeglądarka internetowa. Aby skorzystać z aplikacji nie trzeba instalować żadnego oprogramowania dodatkowego, w szczególności nie jest wymagane środowisko uruchomieniowe Javy, które było wymagane w poprzednim przypadku. Wystarczy sama przeglądarka internetowa. W kontekście architektur aplikacji rozproszonych przeglądarka należy do tzw. warstwy prezentacji całego systemu. Aplikacja dostępna jest pod adresem http://tiger.ire.pw.edu.pl:8080/pbz-mpeg7Web/. Interfejs aplikacji jest bardzo prosty składa się z listy odnośników do stron umożliwiających wywołanie poszczególnych metod serwisu (Rysunek 6). Rysunek 6 Interfejs dostępu do serwisu w przeglądarce 12 Zadanie 3. Z głównej strony aplikacji wybrać link calculteDescriptor link ten prowadzi do formularza służącego do obliczania konkretnych deskryptorów. Podając lokalizatory obrazów użytych w poprzednich zadaniach obliczyć wszystkie dostępne deskryptory i skopiować je do sprawozdania. Zadanie 4. Z głównej strony aplikacji wybrać link searchImages jest to odpowiednik funkcji wyszukiwania obrazów podobnych, oferowanej w grubym kliencie. Znalezć przykładowy obraz w Internecie i wyszukać dla niego podobne obrazy w bazie wybierając wszystkie dostępne deskryptory oraz podając niewielką liczbę poszukiwanych obrazów (nie więcej niż pięć). Do sprawozdania skopiować zrzuty z ekranu dla jednego z deskryptorów. Własny klient serwisu Przy pomocy środowiska uruchomieniowego Eclipse można w łatwy sposób przygotować klienta serwisu bazując na jego definicji WSDL. Środowisko Eclipse jest zintegrowanym środowiskiem programistycznym ogólnego przeznaczenia. W zależności od zainstalowanych wtyczek (plugins) może służyć do tworzenia aplikacji z użyciem różnych języków programowania (Java, PHP, C/C++ itd.). W szczególności środowisko Eclipse zostanie wykorzystane do stworzenia aplikacji korzystającej z serwisu obliczającego deskryptory. Przykład. Tworzenie prostego klienta serwisu (należy wykonać poniższe kroki jako przygotowanie do kolejnego zadania). Uruchomić Eclipse. W trakcie uruchamiania środowisko pyta o miejsce przechowywania projektów (w ogólności plikowych zasobów projektu). Należy zaakceptować propozycję lub wskazać wymaganą lokalizację tzw. przestrzeni roboczej (workspace). Środowisko w wersji zainstalowanej w laboratorium oferuje możliwość tworzenia aplikacji w języku Java w wersji standardowej i w wersji Enterprise Edition (J2EE). Eclipse umożliwia przełączanie pomiędzy widokami specjalnie przeznaczonymi do tworzenia aplikacji w wybranej wersji Javy lub innych narzędzi (perspektywy). Wyboru perspektywy dokonuje się przyciskami w prawym górnym rogu okna (Java, Java EE Rysunek 7). W dalszej części zakłada się wybranie perspektywy Java EE. Rysunek 7 Przyciski wyboru perspektywy w środowisku Eclipse Uruchamianie aplikacji tworzonych w technologii Java EE zawsze odbywa się z udziałem serwera aplikacyjnego. Taki serwer musi być także zarejestrowany w Eclipse. Na potrzeby ćwiczenia wystarczający jest uproszczony serwer aplikacyjny wbudowany w samo środowisko Eclipse. Należy upewnić się, że serwer jest zarejestrowany w zakładce Servers w dolnej części okna, Rysunek 8. W przypadku jego braku należy kliknąć prawym przyciskiem myszy wewnątrz zakładki Servers, wybrać 13 New, wybrać Server, następnie w oknie dialogowym definiowania nowego serwera rozwinąć element Basic i zaznaczyć J2EE Preview w liście tego elementu oraz kliknąć Finish. Spowoduje to zarejestrowanie uproszczonego serwera aplikacyjnego służącego do testowania tworzonych aplikacji. Rysunek 8 Zakładka Servers i zarejestrowany w środowisku uproszczony serwer J2EE Kolejnym krokiem jest utworzenie projektu dla naszego klienta. Należy kliknąć prawym przyciskiem myszy w zakładce Project Explorer w lewej części okna, wybrać New, wybrać Other. Następnie w oknie dialogowym definiowania nowego projektu rozwinąć element Web Services i zaznaczyć Web Service Client w liście tego elementu oraz kliknąć Next. Kolejno, w polu Service Definition należy wskazać URL do pliku WSDL z definicją serwisu sieciowego. W naszym przypadku jest to http://tiger.ire.pw.edu.pl:8080/pbz-mpeg7-pbz-mpeg7EJB/XmDao?wsdl. Pozostałe elementy okna dialogowego należy pozostawić bez modyfikacji i kliknąć Finish (Rysunek 9). Spowoduje to automatycznie wygenerowanie klas obiektów pośredniczących w wywołaniach metod serwisu. Rysunek 9 Okno definiowania klienta serwisu sieciowego Zakładka Project Explorer w lewej części okna przedstawia wszystkie elementy nowo wygenerowanego projektu. Rysunek 10 przedstawia interfejs XmDao, w którym znajdują się deklaracje metod udostępnianych przez serwis sieciowy. Nasz klient będzie mógł wywoływać każdą z tych metod w celu skorzystania z serwisu. 14 Rysunek 10 Interfejs XmDao definiujący serwis sieciowy w wygenerowanym kliencie Kolejnym krokiem jest utworzenie pakietu języka Java przechowującego kod zródłowy klienta. W tym celu klikamy prawym przyciskiem myszy na elemencie Java Resources: src, wybieramy New, wybieramy Package, w oknie dialogowym w polu Name wpisujemy nazwę naszego pakietu, np. tine, klikamy Finish (jako nazwę pakietu należy wpisać swoje nazwisko dla łatwiejszej identyfikacji). Dalej tworzymy klasę klienta. W tym celu na nowoutworzonym pakiecie tine klikamy prawym przyciskiem myszy i wybieramy New, wybieramy Class, w oknie dialogowym w polu Name wpisujemy nazwę klasy klienta, np. KlientTestowy, klikamy Finish. Następnie, przed nagłówkiem klasy, należy dopisać zdania import wskazujące kompilatorowi Javy nazwy pakietów, z których będzie korzystać klasa klienta: import java.rmi.*; import pbz.mpeg7.ejb.*; import javax.xml.rpc.*; Dopisujemy także funkcję main, od której rozpocznie się wykonywanie kodu klienta: 15 public static void main(String[] args) { MPEG7XM xm = new MPEG7XMLocator(); try { XmDao xmDao = xm.getMPEG7XM_Port(); int numImages = xmDao.getNumImages(); System.out.println("num images=" + numImages); }catch(ServiceException se) { se.printStackTrace(); }catch(RemoteException re) { re.printStackTrace(); } } Ostatecznie kod zródłowy klasy testowego klienta przyjmuje postać jak poniżej: package tine; import java.rmi.*; import pbz.mpeg7.ejb.*; import javax.xml.rpc.*; public class KlientTestowy { public static void main(String[] args) { MPEG7XM xm = new MPEG7XMLocator(); try { XmDao xmDao = xm.getMPEG7XM_Port(); int numImages = xmDao.getNumImages(); System.out.println("num images=" + numImages); }catch(ServiceException se) { se.printStackTrace(); }catch(RemoteException re) { re.printStackTrace(); } } } W pierwszej linii funkcji main (MPEG7XM xm = new MPEG7XMLocator();) tworzony jest obiekt lokalizatora serwisu sieciowego. Obiekt ten reprezentuje ogólnie każdy serwis zdefiniowany przytaczanym już opisem serwisu w języku WSDL. Obiekt ten posłuży do uzyskania dostępu do obiektu reprezentującego konkretną realizację (instancję, instance) serwisu sieciowego przy pomocy metody getMPEG7XM_Port(), wywołanej w pierwszej linii bloku try. Druga linia w bloku try (int numImages = xmDao.getNumImages();) jest już zdalnym wywołaniem metody serwisu, która zwraca liczbę obrazów zarejestrowanych w bazie danych. Liczba ta po pobraniu z serwisu jest wyświetlania w konsoli klienta. Rysunek 11 przedstawia widok okna Eclipse po uruchomieniu klienta testowego. Uruchomienie następuje przez wybranie przycisku na pasku narzędzi. Przy pierwszym naciśnięciu przycisku uruchamiania wybieramy sposób uruchomienia klienta: mamy do wyboru opcje Run on Server i Java Application, wybieramy Java Application, klikamy Ok. Należy zwrócić uwagę, że uruchomienie klienta może trwać kilka sekund co spowodowane jest koniecznością zaangażowania całego aparatu serwisów sieciowych, zarówno po stronie klienta jak i po stronie serwera. Pomyślne uruchomienie kończy się wypisaniem na konsoli klienta liczby obrazków zarejestrowanych w bazie serwisu. 16 Rysunek 11 Uruchomienie klienta testowego Wspomniany już interfejs XmDao definiuje wszystkie metody zdalne, które udostępnia serwis sieciowy. Poniżej przedstawiono skrócony opis wybranych metod implementowanych przez serwis sieciowy. java.lang.String calculateDescriptor(java.lang.String arg0, int arg1) Metoda ta oblicza deskryptor dla obrazka reprezentowanego przez podany URL (pierwszy argument arg0). Drugi argument (arg1) jest numerem deskryptora, który ma zostać obliczony wg poniższej tabeli. Zwracana dokument XML deskryptora w postaci ciągu znaków. Nazwa deskryptora numer DominantColor 1 ScalableColor 2 ColorLayout 3 ColorStructure 4 ColorTemperatureBrowsing 5 java.lang.String getImageDescriptor(int arg0, int arg1) Metoda ta pobiera obliczony wcześniej deskryptor z bazy serwisu. Pierwszy argument reprezentuje identyfikator obrazu w bazie (prawidłowe identyfikatory zostaną podane przez prowadzącego), drugi argument to numer deskryptora zgodnie z wcześniej podaną numeracją typów deskryptorów. java.lang.String getImageUrl(int arg0) Metoda zwraca URL obrazu zarejestrowanego w bazie serwisu. Argument metody to identyfikator obrazu w bazie serwisu. 17 int getNumImages() Metoda zwraca liczbę obrazów zarejestrowanych w bazie serwisu. java.lang.String[] searchImages(java.lang.String arg0, int arg1, int arg2) Metoda dokonuje wyszukiwania obrazów podobnych. Pierwszy argument jest lokalizatorem obrazu, dla którego chcemy wyszukać obrazy podobne w bazie serwisu. Drugi argument to numer deskryptora, który zostanie użyty do porównań pomiędzy obrazami. Trzeci argument to liczba obrazów podobnych, które chcemy wyszukać w bazie (argument ten odpowiada parametrowi N stosowanym w opisie grubego klienta). Metoda zwraca tablicę ciągów znaków, które reprezentują lokalizatory obrazów podobnych wg zadanych parametrów. Zadanie 5. Na podstawie przykładowego klienta przygotować program własnego klienta, wywołującego wybraną metodę serwisu z przedstawionych powyżej (oprócz getNumImages()). Do sprawozdania skopiować kod zródłowy klasy klienta oraz parametry przekazane metodzie oraz rezultaty jej działania. Literatura uzupełniająca [1] Information Technology Multimedia Content Description Interface, ISO/IEC IS 15938. [2] B.S. Manjunath., P. Salembier, T. Sikora (eds), Introduction to MPEG-7, Wiley, 2002. [3] Information Technology Multimedia Content Description Interface Part 6: Reference Software, FDIS, ISO/IEC J1/SC 29 w4475. [4] Information technology Multimedia content description interface Part 6: Reference software, AMENDMENT 1: Reference software extensions, FDAM, ISO/IEC J1/SC29 w6511. [5] T. Kohonen, The Self-Organizing Map (SOM), http://www.cis.hut.fi/projects/somtoolbox/theory/somalgorithm.shtml [6] T. Kohonen, Self-Organizing Maps, 3rd ed., Springer, 2001. [7] T. Germano, Self Organizing Maps, http://davis.wpi.edu/~matt/courses/soms/ 18