MultimediaService LabInstruction

background image

ZTV



Zakład Telewizji


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

background image

2

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 znaleźć 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<?xml version="1.0" encoding="utf-8"?>
2<definitions name="MPEG7-XM" targetNamespace="http://ejb.mpeg7.pbz/" xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ejb.mpeg7.pbz/" xmlns:xsd="http://www.w3.org/2001/XML
3 <types>
4 <xs:schema targetNamespace="http://ejb.mpeg7.pbz/" version="1.0" xmlns:tns="http://ejb.mpeg7.pbz/"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
5 <xs:element name="calculateDescriptor" type="tns:calculateDescriptor" />
6 <xs:element name="calculateDescriptorResponse" type="tns:calculateDescriptorResponse" />
7 <xs:element name="calculateDistance" type="tns:calculateDistance" />
8 <xs:element name="calculateDistanceResponse" type="tns:calculateDistanceResponse" />
9 <xs:element name="getImageDescriptor" type="tns:getImageDescriptor" />
10 <xs:element name="getImageDescriptorResponse" type="tns:getImageDescriptorResponse" />
11 <xs:element name="getImageId" type="tns:getImageId" />
12 <xs:element name="getImageIdResponse" type="tns:getImageIdResponse" />
13 <xs:element name="getImageUrl" type="tns:getImageUrl" />
14 <xs:element name="getImageUrlResponse" type="tns:getImageUrlResponse" />
15 <xs:element name="getNumImages" type="tns:getNumImages" />
16 <xs:element name="getNumImagesResponse" type="tns:getNumImagesResponse" />
17 <xs:element name="registerImage" type="tns:registerImage" />
18 <xs:element name="registerImageResponse" type="tns:registerImageResponse" />

background image

3

19 <xs:element name="searchImages" type="tns:searchImages" />
20 <xs:element name="searchImagesResponse" type="tns:searchImagesResponse" />
21 <xs:complexType name="calculateDistance">
22 <xs:sequence>
23 <xs:element minOccurs="0" name="arg0" type="xs:string" />
24 <xs:element minOccurs="0" name="arg1" type="xs:string" />
25 <xs:element name="arg2" type="xs:int" />
26 </xs:sequence>
27 </xs:complexType>
28 <xs:complexType name="calculateDistanceResponse">
29 <xs:sequence>
30 <xs:element name="return" type="xs:double" />
31 </xs:sequence>
32 </xs:complexType>
33 <xs:complexType name="calculateDescriptor">
34 <xs:sequence>
35 <xs:element minOccurs="0" name="arg0" type="xs:string" />
36 <xs:element name="arg1" type="xs:int" />
37 </xs:sequence>
38 </xs:complexType>
39 <xs:complexType name="calculateDescriptorResponse">
40 <xs:sequence>
41 <xs:element minOccurs="0" name="return" type="xs:string" />
42 </xs:sequence>
43 </xs:complexType>
44 <xs:complexType name="getImageDescriptor">
45 <xs:sequence>
46 <xs:element name="arg0" type="xs:int" />
47 <xs:element name="arg1" type="xs:int" />
48 </xs:sequence>
49 </xs:complexType>
50 <xs:complexType name="getImageDescriptorResponse">
51 <xs:sequence>
52 <xs:element minOccurs="0" name="return" type="xs:string" />
53 </xs:sequence>
54 </xs:complexType>
55 <xs:complexType name="getImageId">
56 <xs:sequence>
57 <xs:element minOccurs="0" name="arg0" type="xs:string" />
58 </xs:sequence>
59 </xs:complexType>
60 <xs:complexType name="getImageIdResponse">
61 <xs:sequence>
62 <xs:element name="return" type="xs:int" />
63 </xs:sequence>
64 </xs:complexType>
65 <xs:complexType name="getImageUrl">
66 <xs:sequence>
67 <xs:element name="arg0" type="xs:int" />
68 </xs:sequence>
69 </xs:complexType>
70 <xs:complexType name="getImageUrlResponse">
71 <xs:sequence>
72 <xs:element minOccurs="0" name="return" type="xs:string" />
73 </xs:sequence>
74 </xs:complexType>
75 <xs:complexType name="getNumImages">
76 <xs:sequence />
77 </xs:complexType>
78 <xs:complexType name="getNumImagesResponse">
79 <xs:sequence>
80 <xs:element name="return" type="xs:int" />
81 </xs:sequence>
82 </xs:complexType>
83 <xs:complexType name="registerImage">
84 <xs:sequence>
85 <xs:element minOccurs="0" name="arg0" type="xs:string" />
86 </xs:sequence>
87 </xs:complexType>
88 <xs:complexType name="registerImageResponse">
89 <xs:sequence>
90 <xs:element name="return" type="xs:int" />
91 </xs:sequence>
92 </xs:complexType>
93 <xs:complexType name="searchImages">
94 <xs:sequence>
95 <xs:element minOccurs="0" name="arg0" type="xs:string" />
96 <xs:element name="arg1" type="xs:int" />
97 <xs:element name="arg2" type="xs:int" />
98 </xs:sequence>
99 </xs:complexType>
100 <xs:complexType name="searchImagesResponse">
101 <xs:sequence>
102 <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="xs:string" />
103 </xs:sequence>
104 </xs:complexType>
105 </xs:schema>
106 </types>
107 <message name="XmDao_registerImageResponse">
108 <part element="tns:registerImageResponse" name="registerImageResponse"></part>
109 </message>
110 <message name="XmDao_getImageDescriptorResponse">
111 <part element="tns:getImageDescriptorResponse" name="getImageDescriptorResponse"></part>
112 </message>
113 <message name="XmDao_getImageId">
114 <part element="tns:getImageId" name="getImageId"></part>
115 </message>
116 <message name="XmDao_getImageUrlResponse">
117 <part element="tns:getImageUrlResponse" name="getImageUrlResponse"></part>
118 </message>
119 <message name="XmDao_registerImage">
120 <part element="tns:registerImage" name="registerImage"></part>

background image

4

121 </message>
122 <message name="XmDao_calculateDistanceResponse">
123 <part element="tns:calculateDistanceResponse" name="calculateDistanceResponse"></part>
124 </message>
125 <message name="XmDao_searchImagesResponse">
126 <part element="tns:searchImagesResponse" name="searchImagesResponse"></part>
127 </message>
128 <message name="XmDao_searchImages">
129 <part element="tns:searchImages" name="searchImages"></part>
130 </message>
131 <message name="XmDao_calculateDistance">
132 <part element="tns:calculateDistance" name="calculateDistance"></part>
133 </message>
134 <message name="XmDao_getImageIdResponse">
135 <part element="tns:getImageIdResponse" name="getImageIdResponse"></part>
136 </message>
137 <message name="XmDao_calculateDescriptorResponse">
138 <part element="tns:calculateDescriptorResponse" name="calculateDescriptorResponse"></part>
139 </message>
140 <message name="XmDao_calculateDescriptor">
141 <part element="tns:calculateDescriptor" name="calculateDescriptor"></part>
142 </message>
143 <message name="XmDao_getImageDescriptor">
144 <part element="tns:getImageDescriptor" name="getImageDescriptor"></part>
145 </message>
146 <message name="XmDao_getNumImages">
147 <part element="tns:getNumImages" name="getNumImages"></part>
148 </message>
149 <message name="XmDao_getNumImagesResponse">
150 <part element="tns:getNumImagesResponse" name="getNumImagesResponse"></part>
151 </message>
152 <message name="XmDao_getImageUrl">
153 <part element="tns:getImageUrl" name="getImageUrl"></part>
154 </message>
155 <portType name="XmDao">
156 <operation name="calculateDescriptor" parameterOrder="calculateDescriptor">
157 <input message="tns:XmDao_calculateDescriptor"></input>
158 <output message="tns:XmDao_calculateDescriptorResponse"></output>
159 </operation>
160 <operation name="calculateDistance" parameterOrder="calculateDistance">
161 <input message="tns:XmDao_calculateDistance"></input>
162 <output message="tns:XmDao_calculateDistanceResponse"></output>
163 </operation>
164 <operation name="getImageDescriptor" parameterOrder="getImageDescriptor">
165 <input message="tns:XmDao_getImageDescriptor"></input>
166 <output message="tns:XmDao_getImageDescriptorResponse"></output>
167 </operation>
168 <operation name="getImageId" parameterOrder="getImageId">
169 <input message="tns:XmDao_getImageId"></input>
170 <output message="tns:XmDao_getImageIdResponse"></output>
171 </operation>
172 <operation name="getImageUrl" parameterOrder="getImageUrl">
173 <input message="tns:XmDao_getImageUrl"></input>
174 <output message="tns:XmDao_getImageUrlResponse"></output>
175 </operation>
176 <operation name="getNumImages" parameterOrder="getNumImages">
177 <input message="tns:XmDao_getNumImages"></input>
178 <output message="tns:XmDao_getNumImagesResponse"></output>
179 </operation>
180 <operation name="registerImage" parameterOrder="registerImage">
181 <input message="tns:XmDao_registerImage"></input>
182 <output message="tns:XmDao_registerImageResponse"></output>
183 </operation>
184 <operation name="searchImages" parameterOrder="searchImages">
185 <input message="tns:XmDao_searchImages"></input>
186 <output message="tns:XmDao_searchImagesResponse"></output>
187 </operation>
188 </portType>
189 <binding name="XmDaoBinding" type="tns:XmDao">
190 <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
191 <operation name="calculateDescriptor">
192 <soap:operation soapAction="" />
193 <input>
194 <soap:body use="literal" />
195 </input>
196 <output>
197 <soap:body use="literal" />
198 </output>
199 </operation>
200 <operation name="calculateDistance">
201 <soap:operation soapAction="" />
202 <input>
203 <soap:body use="literal" />
204 </input>
205 <output>
206 <soap:body use="literal" />
207 </output>
208 </operation>
209 <operation name="getImageDescriptor">
210 <soap:operation soapAction="" />
211 <input>
212 <soap:body use="literal" />
213 </input>
214 <output>
215 <soap:body use="literal" />
216 </output>
217 </operation>
218 <operation name="getImageId">
219 <soap:operation soapAction="" />
220 <input>
221 <soap:body use="literal" />
222 </input>

background image

5

223 <output>
224 <soap:body use="literal" />
225 </output>
226 </operation>
227 <operation name="getImageUrl">
228 <soap:operation soapAction="" />
229 <input>
230 <soap:body use="literal" />
231 </input>
232 <output>
233 <soap:body use="literal" />
234 </output>
235 </operation>
236 <operation name="getNumImages">
237 <soap:operation soapAction="" />
238 <input>
239 <soap:body use="literal" />
240 </input>
241 <output>
242 <soap:body use="literal" />
243 </output>
244 </operation>
245 <operation name="registerImage">
246 <soap:operation soapAction="" />
247 <input>
248 <soap:body use="literal" />
249 </input>
250 <output>
251 <soap:body use="literal" />
252 </output>
253 </operation>
254 <operation name="searchImages">
255 <soap:operation soapAction="" />
256 <input>
257 <soap:body use="literal" />
258 </input>
259 <output>
260 <soap:body use="literal" />
261 </output>
262 </operation>
263 </binding>
264 <service name="MPEG7-XM">
265 <port binding="tns:XmDaoBinding" name="MPEG7-XM_Port">
266 <soap:address location="http://turtle2.zoo.ire.pw.edu.pl:8080/pbz-mpeg7-pbz-mpeg7EJB/XmDao" />
267 </port>
268 </service>
269</definitions>

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

background image

6

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.

background image

7

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.

background image

8

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.

background image

9

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

background image

10

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 znaleźć 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łaszczyźnie 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ą.

background image

11

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 znaleźć 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. Znaleźć przykładowy obraz w Internecie. Powtórzyć Zadanie 1 dla znalezionego

obrazu. Do sprawozdania wpisać także URL obrazu przykładowego.

background image

12

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

background image

13

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. Znaleźć 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ć

background image

14

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.

background image

15

Rysunek 10 Interfejs XmDao definiujący serwis sieciowy w wygenerowanym kliencie

Kolejnym krokiem jest utworzenie pakietu języka Java przechowującego kod źró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:

Dopisujemy także funkcję

main

, od której rozpocznie się wykonywanie kodu klienta:

import

java.rmi.*;

import

pbz.mpeg7.ejb.*;

import

javax.xml.rpc.*;

background image

16

Ostatecznie kod źródłowy klasy testowego klienta przyjmuje postać jak poniżej:

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.

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();

}

}

}

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();

}

}

background image

17

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.

background image

18

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 źró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/


Wyszukiwarka

Podobne podstrony:
Maszynoznawstwo prezentacja multimedialna
funkcje (multimedialny)
Brazylia prezentacja multimedialna
Powstanie listopadowe prezentacja multimedialna
Prezentacja multimedialna
dentysta prezentacja multimedialna
Kom multimed cz I 2010
TRANSPORT MULTIMODALNY
koncepcja kształcenia multimedialnego, STUDIA PWSZ WAŁBRZYCH PEDAGOGIKA, zagadnienia na egzamin dypl
Dziadek do orzechów, Bajki prezentacje multimedialne POLECAM
1 Multimaster
Prezentacja multimedialna(1) id Nieznany
,Urzadzenia i systemy multimedialne, pytania i odpowiedzi
Laboratorium Instrukcja obsługi Multimetra Cyfrowego M 3860D
EmailService LabInstruction

więcej podobnych podstron