i wyszukiwanie danych multimedialnych w Oracle 11g · Składowanie, przetwarzanie i wyszukiwanie...

92
Składowanie, przetwarzanie i wyszukiwanie danych multimedialnych w Oracle 11g Marek Wojciechowski Politechnika Poznańska, PLOUG [email protected]

Transcript of i wyszukiwanie danych multimedialnych w Oracle 11g · Składowanie, przetwarzanie i wyszukiwanie...

Składowanie, przetwarzanie i wyszukiwanie danych

multimedialnych w Oracle 11g

Marek Wojciechowski

Politechnika Poznańska, [email protected]

Plan prezentacji

• Wprowadzenie do Oracle Multimedia

• Typy danych Oracle Multimedia

• Oracle Multimedia DICOM

• Typy danych SQL/MM Still Image

– Wyszukiwanie obrazów w oparciu o zawartość(Content-based Image Retrieval)

• Oracle Multimedia Java API

• Podsumowanie

2

Wprowadzenie do Oracle Multimedia

Czym jest Oracle Multimedia?

• Oracle Multimedia to cecha (ang. feature) serwera bazy danych Oracle umożliwiająca składowanie, odczyt i przetwarzanie multimediów w sposób zintegrowany z pozostałymi informacjami zawartymi w bazie danych

– do wersji 10.2 występująca pod nazwą interMedia

– dostępna w Standard Edition

• Oracle Multimedia nie jest gotową aplikacją użytkownika, ale stanowi bazę dla tworzenia różnych aplikacji

– oferuje typową funkcjonalność w zakresie obsługi multimediów

– funkcjonalność specyficzną dla danego zastosowania pozostawia aplikacji

• Oracle Multimedia wykorzystuje mechanizmy obiektowo-relacyjne

– funkcjonalność dostępna głównie poprzez typy obiektowe4

5

Możliwości Oracle Multimedia

• Możliwość zapewnienia przetwarzania transakcyjnego i ochrony obiektów medialnych jak dla danych tradycyjnych

• Obsługa danych z różnych źródeł (BLOB, BFILE, URL)

• Zapytania o metadane dla obsługiwanych typów multimediów

• Dla obrazów:

– zapytania o zawartość w oparciu o własności wizualne

– transformacje: skalowanie, konwersja formatu, wycinanie

– 2 interfejsy: specyficzny dla Oracle i zgodny z SQL/MM Still Image

• Obsługa typowych formatów danych (z możliwością rozszerzeń)

• Automatyczna ekstrakcja i pielęgnacja metadanych z danych multimedialnych w popularnych formatach

Nowe możliwości i zmiany w 11g

• Rozbudowane wsparcie dla obrazów medycznych DICOM

– w tym dedykowany typ danych ORDDicom

• Lepsza skalowalność i wydajność

– limit na rozmiar BLOB między 8TB a 128TB

– poprawa wydajności generacji miniatur obrazów

– wsparcie dla SecureFiles – nowej generacji LOB

• Zdeprecjonowanie typu danych ORDImageSignature do reprezentacji właściwości wizualnych obrazu wykorzystywanych do wyszukiwania w oparciu o zawartość

– odzwierciedlenie trendu obserwowanego również na gruncie DB2

– pozostaje CBIR poprzez typy SQL/MM

6

Architektura Oracle Multimedia

• Oparta o mechanizmy obiektowo-relacyjne

– oferuje również tzw. interfejs relacyjny

• Funkcjonalność wbudowana w serwer bazy danych

• Analiza (parsing) obiektów multimedialnych i przetwarzanie obrazów w bazie danych realizowane jest w środowisku wirtualnej maszyny Java wbudowanej w serwer Oracle

– wsparcie dla Java Advanced Imaging (JAI)

• Funkcjonalność dostępna z poziomu wielu języków

– najlepiej wspierane PL/SQL i Java (przez Multimedia Java classes)

• Brak wbudowanych mechanizmów transmisji strumieniowej

– współpraca z Real Networks Server i Microsoft Streaming Server

– zawartość na serwerze lub w bazie danych 7

Typy danych Oracle Multimedia

• ORDAudio – dla danych audio

• ORDDoc - dla heterogenicznych danych multimedialnych

• ORDImage - dla obrazów– dla obrazów medycznych specjalny typ ORDDicom

• ORDVideo – dla danych wideo

• ORDSource – typ pomocniczy reprezentujące dane źródłowe

• Typy SQL/MM Still Image (alternatywa dla ORDImage)

8

9

Źródła danych multimedialnych

• Oracle Multimedia umożliwia składowanie, odczyt i zarządzanie multimediami dostępnymi jako:

– Obiekty BLOB – duże obiekty binarne składowane lokalnie w bazie danych (w Oracle 10g/11g max rozmiar BLOB od 8 do 128TB –zależnie od konfiguracji bazy danych)

– Obiekty BFILE – duże binarne obiekty plikowe składowane lokalnie w systemie plików serwera (poza bazą danych)

– Adresy URL – lokalizujące obiekty multimedialne udostępniane na serwerach WWW (iAS, Microsoft IIS, Apache, ...)

– Obiekty udostępniane strumieniowo przez specjalizowane serwery

• Źródło danych jest „ukryte” w obiektach medialnych typów ORDAudio, ORDDoc, ORDImage, ORDVideo w atrybucie typu ORDSource

10

Uwagi o składowaniu danych

• Standardowo dostępne jest składowanie w postaci:BLOB, BFILE, URL

• Obsługa z poziomu Oracle Multimedia danych składowanych na specjalistycznych serwerach wymaga rozszerzenia Multimedia o odpowiednie interfejsy

• Tylko składowanie jako BLOB umożliwia w pełni transakcyjną kontrolę nad obiektami multimedialnymi

• Przy składowaniu jako BFILE lub URL, transakcyjnemu przetwarzaniu podlega jedynie „wskaźnik” do lokalizacji obiektu a nie dane obiektu

• Składowanie w postaci BFILE lub URL umożliwia łatwą migrację istniejących kolekcji multimediów do Multimedia

• Dane składowane poza bazą danych mogą być w każdej chwili zaimportowane do bazy

11

Sposoby ładowania danych multimedialnych do bazy danych

• PL/SQL– proceduralne rozszerzenie SQL

– umożliwia zamknięcie funkcjonalności ładowania danych w formie procedur składowanych

– umożliwia wywoływanie metod w trakcie procesu ładowania danych binarnych

• ekstrakcja metadanych

• generacja miniatur obrazów

• SQL*Loader– narzędzie dedykowane do ładowania danych do bazy danych ze

źródeł zewnętrznych

– sterowanie przebiegiem operacji poprzez pliki konfiguracyjne

12

Rozpoznawane formaty danych

• Oracle Multimedia umożliwia składowanie danych w dowolnym formacie

• Dla formatów „rozpoznawanych” przez Oracle Multimedia możliwa jest ekstrakcja metadanych

• Oracle Multimedia oferuje możliwość rozszerzenia zbioru rozpoznawanych formatów

• Rozpoznawane formaty obrazów – BMP, CALS, FPIX, GIF, JFIF, PCX, PICT, PNG, RPIX, RAS, TGA, TIFF,

WBMP, ...

• Rozpoznawane formaty audio– AIFF, AIFF-C, AU, WAV, MPEG Audio, Real Audio

• Rozpoznawane formaty wideo– MOV, AVI, Real Video, MPEG1, MPEG2, MPEG4, 3GP

• Dla powyższych formatów rozpoznawane są różne metody kompresji

13

Rozpoznawane metadane dla obrazów, danych audio i wideo

• Informacje o składowaniu (typ źródła, lokalizacja, ...)

• Data ostatniej modyfikacji

• Format danych i typ MIME

• Metadane o zawartości w formie XML

– reżyser, producent, itp.

• Charakterystyki obrazów:

– wysokość i szerokość, rozmiar, metoda kompresji

• Charakterystyki audio:

– typ kodowania, metoda kompresji, liczba kanałów, częstotliwość próbkowania, rozmiar próbki, czas trwania

• Charakterystyki wideo:

– wymiary i rozdzielczość klatki, liczba klatek na sek., liczba klatek, liczba kolorów, metoda kompresji, częstotliwość strumienia bitów, czas trwania

Przykłady możliwych zastosowań Oracle Multimedia

• Internetowe sklepy z muzyką i filmami wideo

• Internetowe galerie obrazów i fotografii

• Bazy danych zapisów rozmów telefonicznych, przemówień, prezentacji

• Biblioteki kursów w postaci filmów wideo

• Nauczanie na odległość

• Katalogi i archiwa dokumentów

• Serwisy informacji finansowych

• Repozytoria zdjęć medycznych

14

Typy danych Oracle Multimedia

16

Typy danych Oracle Multimedia

• Cztery podstawowe typy obiektowe Oracle Multimedia:– ORDAudio – dla danych audio

– ORDDoc - dla heterogenicznych danych multimedialnych

– ORDImage - dla obrazów

– ORDVideo – dla danych wideo

• Typy ORDAudio, ORDDoc, ORDImage, ORDVideo umożliwiają:– składowanie danych multimedialnych

– ekstrakcję i przetwarzanie metadanych

– eksport/import danych między bazą danych a systemem plików

– podstawowe przetwarzanie danych (tylko ORDImage)

• Pozostałe typy danych Oracle Multimedia:– ORDSource – reprezentuje lokalizację danych multimedialnych,

wykorzystywany w ORDAudio, ORDDoc, ORDImage i ORDVideo

– ORDDicom – typ dedykowany dla obrazów medycznych (od 11g)

• Typy danych SQL/MM Still Image (alternatywa dla ORDImage)

17

Typ danych ORDAudio

• Atrybuty:

– podstawowe: description, source, format, mimeType, comments

– charakterystyki audio: encoding, numberOfChannels, samplingRate, sampleSize, compressionType, audioDuration

• Metody:

– konstruktory: init(), init(...)

– metody setter/getter dla atrybutów, np. getMimeType/setMimeType, getEncoding/setEncoding, ...

– związane ze źródłem danych, np. import/export, setSource, getContent, getBFILE, ...

– związane z ekstrakcją metadanych: setProperties, checkProperties

– związane z przetwarzaniem danych: processAudioCommand

18

Typ danych ORDDoc

• Atrybuty:

– source, format, mimeType, contentLength, comments

• Metody:

– konstruktory: init(), init(...)

– metody setter/getter dla atrybutów, np. getMimeType/setMimeType, ...

– związane ze źródłem danych, np. import/export, setSource, getContent, getBFILE, ...

– związane z ekstrakcją metadanych: setProperties

19

Typ danych ORDImage

• Atrybuty:

– podstawowe: source, fileFormat, mimeType, contentLength

– charakterystyki obrazów: height, width, contentFormat, compressionFormat

• Metody:

– konstruktory: init(), init(...)

– metody setter/getter dla atrybutów, np. getMimeType/setMimeType, getHeight, getWidth, ...

– związane ze źródłem danych, np. import/export, setSource, getContent, getBFILE, ...

– związane z ekstrakcją metadanych: setProperties, checkProperties, getMetadata

– związane z przetwarzaniem i kopiowaniem danych: copy, process, processCopy

Metadane w obrazach

• Oracle Multimedia obsługuje następujące formaty metadanych zagnieżdżonych w obrazie:

– EXIF (Exchangeable Image File Format) – ekstrakcja

– IPTC-IIM (International Press Telecommunications Council-Information Interchange Model) – ekstrakcja

– XMP (Extensible Metadata Platform) – ekstrakcja i zapis

• Reprezentacja metadanych poza obrazem

– metadane jako wartość XMLType

– każdemu standardowi metadanych odpowiada odrębny schemat XML Schema w bazie danych

– możliwość składowania w odrębnej kolumnie tabeli

– możliwość indeksowania i przeszukiwania

20

Ekstrakcja metadanych z obrazu –Przykład (1/8)

• Utworzenie tabeli z kolumną przygotowaną do składowania metadanych EXIF

21

CREATE TABLE holiday_photos

(id NUMBER PRIMARY KEY,

metaEXIF XMLTYPE,

photo ORDSYS.ORDIMAGE)

XMLType COLUMN metaEXIF

XMLSCHEMA "http://xmlns.oracle.com/ord/meta/exif"

ELEMENT "exifMetadata";

Ekstrakcja metadanych z obrazu –Przykład (2/8)

• Załadowanie obrazka z systemu plików do bazy danychi ekstrakcja podstawowych metadanych do atrybutów

22

DECLARE

temp ordsys.ORDImage;

ctx RAW(64) := NULL;

BEGIN

INSERT INTO holiday_photos (id, photo)

VALUES (42,

ordsys.ORDImage.init('FILE','MEDIAFILES','szklarka.jpg'))

RETURNING photo INTO temp;

temp.import(ctx); -- import do BLOB

temp.setProperties(); -- ekstrakcja metadanych do atrybutów

UPDATE holiday_photos SET photo=temp WHERE id=42;

COMMIT;

END;

/

Ekstrakcja metadanych z obrazu –Przykład (3/8)

• Odczyt metadanych zapamiętanych w atrybutach ORDImage

23

SELECT p.photo.getWidth() WIDTH,

p.photo.getHeight() HEIGHT

FROM holiday_photos p

WHERE id = 42;

WIDTH HEIGHT

---------- ----------

3072 2304

Ekstrakcja metadanych z obrazu –Przykład (4/8)

• Sprawdzenie dostępnych formatów (przez ekstrakcję ALL)

24

DECLARE

image ORDSYS.ORDImage;

metad XMLSequenceType;

BEGIN

SELECT photo INTO image FROM holiday_photos WHERE id=42;

metad := image.getMetadata('ALL');

-- print the namespace of each metadata document

FOR i in 1..metad.count LOOP

DBMS_OUTPUT.PUT_LINE('namespace: ' || metad(i).getNamespace() );

END LOOP;

EXCEPTION

WHEN ORDSYS.ORDImageExceptions.NULL_LOCAL_DATA THEN

DBMS_OUTPUT.PUT_LINE('source local data is null');

WHEN ORDSYS.ORDImageExceptions.NULL_SOURCE THEN

DBMS_OUTPUT.PUT_LINE('source is null');

END;

/

namespace:

http://xmlns.oracle.com/ord/meta/ordimage

namespace:

http://xmlns.oracle.com/ord/meta/exif

Ekstrakcja metadanych z obrazu –Przykład (5/8)

• Odczyt metadanych EXIF i umieszczenie ich w kolumnie tabeli

25

DECLARE

image ORDSYS.ORDImage;

metad XMLSequenceType;

exif XMLType;

BEGIN

SELECT photo INTO image

FROM holiday_photos WHERE id = 42;

metad := image.getMetadata('EXIF');

exif := metad(1);

UPDATE holiday_photos

SET metaexif = exif WHERE id = 42;

END;

/

Ekstrakcja metadanych z obrazu –Przykład (6/8)

• Odczytane metadane EXIF

26

<exifMetadata xmlns="http://xmlns.oracle.com/ord/meta/exif"

xsi:schemaLocation="http://xmlns.oracle.com/ord/meta/exif

http://xmlns.oracle.com/ord/meta/exif"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<TiffIfd>

<Make tag="271">Canon</Make>

<Model tag="272">Canon PowerShot G6</Model>

<Orientation tag="274">right top</Orientation>

<XResolution tag="282">180</XResolution>

<YResolution tag="283">180</YResolution>

<ResolutionUnit tag="296">inches</ResolutionUnit>

<DateTime tag="306">2008-04-30T16:28:18.000000</DateTime>

<YCbCrPositioning tag="531">centered</YCbCrPositioning>

</TiffIfd>

...

Ekstrakcja metadanych z obrazu –Przykład (7/8)

• Odczytane metadane EXIF c.d.

27

...

<ApertureValue tag="37378">4,96875</ApertureValue>

<ExposureBiasValue tag="37380">0</ExposureBiasValue>

<MaxApertureValue tag="37381">2,65625</MaxApertureValue>

<MeteringMode tag="37383">Pattern</MeteringMode>

<Flash tag="37385">

<Fired>No</Fired>

<Return>No strobe return function</Return>

<Mode>Compulsory suppression</Mode>

<Function>Yes</Function>

<RedEyeReduction>No</RedEyeReduction>

</Flash>

<FocalLength tag="37386">17,59375</FocalLength>

<FlashpixVersion tag="40960">0100</FlashpixVersion>

<ColorSpace tag="40961">sRGB</ColorSpace>

...

</exifMetadata>

Ekstrakcja metadanych z obrazu –Przykład (8/8)

• Możliwość odczytu podstawowych metadanych w formie XML

28

image.getMetadata('ORDIMAGE');

<ordImageAttributes xmlns="http://xmlns.oracle.com/ord/meta/ordimage"

xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance

xsi:schemaLocation="http://xmlns.oracle.com/ord/meta/ordimage

http://xmlns.oracle.com/ord/meta/ordimage">

<height>2304</height>

<width>3072</width>

<contentLength>1992462</contentLength>

<fileFormat>JFIF</fileFormat>

<contentFormat>24BITRGB</contentFormat>

<compressionFormat>JPEG</compressionFormat>

<mimeType>image/jpeg</mimeType>

</ordImageAttributes>

29

Typ danych ORDVideo

• Atrybuty:

– podstawowe: description, source, format, mimeType, comments

– charakterystyki wideo: height, width, frameResolution, frameRate, numberOfFrames, compressionType, numberOfColors, bitRate, videoDuration

• Metody:

– konstruktory: init(), init(...)

– metody setter/getter dla atrybutów, np. getMimeType/setMimeType, getFrameSize/setFrameSize, ...

– związane ze źródłem danych, np. import/export, setSource, getContent, getBFILE, ...

– związane z ekstrakcją metadanych: setProperties, checkProperties

– związane z przetwarzaniem danych: processVideoCommand

30

Typ danych ORDSource

• Wykorzystywany przez typy ORDAudio, ORDDoc, ORDImage, ORDVideo do reprezentacji lokalizacji danych (atrybut source)

• Atrybuty:– localData – typu BLOB

– srcType – ‘file’, ‘HTTP’ lub ‘<nazwa>’ dla źródeł użytkownika

– srcLocation – dla ‘file’: katalog (DIRECTORY), ‘HTTP’: URL katalogu

– srcName – dla ‘file’: nazwa pliku, dla ‘HTTP’: nazwa obiektu

– updateTime

– local

• Metody typu ORDSource:– metody setter/getter, export/import, open/close, ...

– metody typu ORDSource nie powinny być bezpośrednio wywoływane z poziomu aplikacji

– aplikacje powinny korzystać z odpowiadających im metod dostępnych w typach ORDAudio, ORDDoc, ORDImage i ORDVideo

SecureFiles w Oracle Multimedia 11g

• Nowa architektura składowania dużych obiektów

• Interfejs kompatybilny wstecz

• Najlepsze rozwiązanie dla nieustrukturalizowanej zawartości

• Oferuje funkcjonalność charakterystyczną dla zaawansowanych systemów plików

– wysoka wydajność

– deduplikacja

– kompresja

– szyfrowanie

– zaawansowane mechanizmy utrzymywania logu

31

SecureFiles w Oracle Multimedia 11g – Przykład

• Utworzenie tabeli ze wskazaniem architektury składowania zawartości binarnej

32

CREATE TABLE holiday_photos

(id NUMBER PRIMARY KEY,

metaEXIF XMLTYPE,

photo ORDSYS.ORDIMAGE)

LOB(photo.source.localdata) STORE AS SECUREFILE

XMLType COLUMN metaEXIF

XMLSCHEMA "http://xmlns.oracle.com/ord/meta/exif"

ELEMENT "exifMetadata";

33

Adnotacje w formacie XML

• Typy ORDAudio, ORDDoc i ORDVideo umożliwiają w ramach operacji ekstrakcji metadanych o parametrach wstawienie do atrybutu komentarza adnotacji w XML

– atrybut comments typu CLOB

• Aby wygenerować adnotację metodą setPropertiesnależy jako drugi argument przekazać TRUE

• Adnotacja zawiera:

– informacje o parametrach fizycznych (pokrywające się z atrybutami typów ORDAudio, ORDDoc, ORDVideo)

– informacje o zawartości merytorycznej umieszczone w obiekcie medialnym przez aplikację, która go utworzyła

34

Adnotacje – Przykład (1/2)

• Adnotacja wygenerowana dla utworu muzycznego w formacie mp3 (MPEG/Audio):

...

35

Adnotacje – Przykład (2/2)

...

36

Korzystanie z Multimedia –Przykłady (1/5)

CREATE TABLE dzwieki

OF ORDSYS.ORDAudio;

INSERT INTO dzwieki

VALUES (ORDSYS.ORDAudio.init('file', 'MEDIAFILES',

'tada.wav'));

• Utworzenie tabeli obiektów do składowania dźwięków

• Wstawienie do tabeli dźwięku składowanego jako BFILE

CREATE DIRECTORY mediafiles

AS 'c:\oracle\mediafiles';

GRANT READ ON DIRECTORY mediafiles

TO public;

37

Korzystanie z Multimedia –Przykłady (2/5)

DECLARE

au ORDSYS.ORDAudio;

ctx RAW(4000) := NULL;

BEGIN

SELECT value(d) INTO au FROM dzwieki d

WHERE d.getSourceName() = 'tada.wav' FOR UPDATE;

au.setProperties(ctx,FALSE); -- bez adnotacji w XML

DBMS_OUTPUT.put_line('encoding: ' || au.getEncoding());

DBMS_OUTPUT.put_line('numberOfChannels: '

|| TO_CHAR(au.getNumberOfChannels()));

DBMS_OUTPUT.put_line('samplingRate: '

|| TO_CHAR(au.getSamplingRate()));

DBMS_OUTPUT.put_line('sampleSize: '

|| TO_CHAR(au.getSampleSize()));

UPDATE dzwieki d SET value(d) = au

WHERE d.getSourceName() = 'audio3.wav';

END;

• Ekstrakcja metadanych o parametrach dźwięku

encoding: MS_PCM

numberOfChannels: 2

samplingRate: 22050

sampleSize: 16

38

Korzystanie z Multimedia –Przykłady (3/5)

CREATE TABLE mp3s

(id number, wykonawca varchar2(100),

tytul varchar2(100), probka ORDSYS.ORDAudio);

DECLARE

temp ORDSYS.ORDAudio := null;

ctx RAW(4000) := NULL;

row_id ROWID;

BEGIN

INSERT INTO mp3s VALUES (1, null, null,

ORDSYS.ORDAudio.init('file','MEDIAFILES', 'Cambodia.mp3'))

RETURNING ROWID, probka INTO row_id, temp;

temp.import(ctx);

UPDATE mp3s SET probka = temp WHERE rowid = row_id;

END;

/

• Utworzenie tabeli do składowania dźwięków w postaci obiektów kolumnowych

• Wstawienie piosenki jako BFILE i następnie import do BLOB

39

Korzystanie z Multimedia –Przykłady (4/5)

• Ekstrakcja metadanych o parametrach dźwięku i adnotacji w XML

• „Wydobycie” z adnotacji tytułu i wykonawcy utworuDECLARE

temp ORDSYS.ORDAudio := null;

ctx RAW(4000) := NULL;

opis XMLType := NULL;

wyk VARCHAR2(100) := '<nieznany>';

tyt VARCHAR2(100) := '<nieznany>';

row_id ROWID;

BEGIN

SELECT ROWID, probka INTO row_id, temp FROM mp3s

WHERE id = 1 FOR UPDATE;

temp.setProperties(ctx,TRUE); -- odczyt metadanych i adnotacji

opis := XMLType.createXML(temp.comments);

IF opis.existsNode('//AUDIO_ARTIST/text()') = 1 THEN

wyk := opis.extract('//AUDIO_ARTIST/text()').getStringVal();

END IF;

IF opis.existsNode('//MEDIA_TITLE/text()') = 1 THEN

tyt := opis.extract('//MEDIA_TITLE/text()').getStringVal();

END IF;

UPDATE mp3s SET wykonawca = wyk, tytul = tyt, probka = temp

WHERE rowid = row_id;

END;

/

40

Korzystanie z Multimedia –Przykłady (5/5)

SELECT id, wykonawca, tytul FROM mp3s;

ID WYKONAWCA TYTUL

--- --------------------- ---------

1 <![CDATA[Kim Wilde]]> <![CDATA[Cambodia]]>

41

Relacyjny interfejs Oracle Multimedia

• Umożliwia korzystanie z funkcji Multimedia w starych relacyjnych aplikacjach bez konieczności migracji do modelu obiektowo-relacyjnego:

– ekstrakcja metadanych

– przetwarzanie i kopiowanie obrazów

– operacje importu i eksportu danych

• Na interfejs relacyjny składają się statyczne metody typów:

– ORDAudio, ORDDoc, ORDImage i ORDVideo

• Metody statyczne operują na danych BLOB i BFILE

ORDSYS.ORDAudio.getProperties(ctx,data,attrib,format)

42

Możliwości rozszerzeń Multimedia

• Obsługa innych zewnętrznych źródeł danych

– poprzez implementację i instalację odpowiedniego pakietu w schemacie ORDPLUGINS

• Obsługa dodatkowych formatów danych

– dla typów ORDAudio, ORDDoc i ORDVideo poprzez implementację i instalację odpowiedniego pakietu w schemacie ORDPLUGINS

– dla obrazów istnieje możliwość jawnego podania metadanych wariantem metody setProperties (!)

• Przetwarzanie danych audio i wideo

– tylko dla formatów użytkownika w ramach implementacji pakietu obsługującego dany format

Oracle Multimedia DICOM

Digital Imaging and Communications in Medicine (DICOM)

• Obrazowanie Cyfrowe i Wymiana Obrazów w Medycynie

• Norma opracowana przez ACR/NEMA (American College of Radiology / National Electrical Manufacturers Association) dla potrzeb ujednolicenia wymiany i interpretacji danych medycznych związanych lub reprezentujących obrazy diagnostyczne w medycynie (wg Wikipedii)

• Zastosowania w radiologii, kardiologii, neurologii, chirurgii, itd.

• Cechą DICOM jest powiązanie obrazu z atrybutami go opisującymi (standard zorientowany obiektowo)

• Oficjalna wersja standardu od 1992 roku to DICOM 3.0 (ciągle uaktualniana)

44

DICOM – Podstawowe pojęcia

• Information object – zawartość obrazu medycznego

• Service class – difinicja czynności dokonywanej na zawartości medycznej

• SOP (service-object pair) class – kombinacja Information object i Service class

– podstawowa jednostka w DICOM

– opisuje funkcjonalność DICOM

– posiada identyfikator (UID)

– przykład: składowanie obrazów tomografii komputerowej

• SOP instance – konkretna instancja SOP klas

– np. konkretne zdjęcie konkretnego pacjenta

45

46

DICOM – przykładowy obraz

• Widok w zewnętrznym narzędziu (DicomWorks)

Oracle Multimedia DICOM

• Umożliwia składowanie, wyszukiwanie i przetwarzanie w bazie danych Oracle multimedialnych danych medycznych w standardzie DICOM

• Potencjalne możliwości:

– baza dla tworzenia archiwów zdjęć medycznych zarządzanych i chronionych przed niepowołanym dostępem przez SZBD Oracle

– umożliwienie centralnego składowania obrazów dla zastosowań w telemedycynie

– baza dla systemów klasy EHR (Electronic Healthcare Record)

47

DICOM w Oracle 10g / 11g

• Oracle 10gR2 (10.2)

– pierwsza wersja oferująca obsługę DICOM

– obrazy DICOM obsługiwane poprzez typ obiektowy ORDImage

– wsparcie ograniczone do rozpoznawania najważniejszych atrybutów

• Oracle 11g (11.1)

– dedykowany typ obiektowy ORDDicom

– pakiet ORD_DICOM (interfejs relacyjny o funkcjonalności ORDDicom)

– pełna obsługa metadanych

– testowanie zgodności ze standardem

– przetwarzanie obrazów (kopiowanie, konwersja formatu)

– anonimizacja danych DICOM

– tworzenie obiektów DICOM poprzez wiązanie zdjęć z metadanymi

– Java i PL/SQL API

48

49

Architektura Oracle Multimedia DICOM

Oracle Database

<XML>

JVM

DICOM Repository

DICOM Parser

DICOM XML Encoder

DICOM Confor-mance Validator

Image Pro-cessor (JAI)

ORDDicom - atrybuty

• metadata - metadane w formacie XML (XMLType) zawierające atrybuty DICOM

• source - oryginalna zawartość obrazu DICOM składowana jako BLOB lub plik zewnętrzny (typ ORDDataSource)

• Często wykorzystywane atrybuty DICOM, np. sop_class_uid, sop_instance_uid

• Atrybuty do wewnętrznego użytku Oracle

50

ORDDicom – przykładowe metody

• setProperties() – ekstrakcja metadanych

– możliwa również przy tworzeniu obiektu lub imporcie zawartości do bazy danych

• makeAnonymous()

– usunięcie danych personalnych pacjenta

– np. w celu udostępnienia zdjęć do badań naukowych

• processCopy()

– kopiowanie i/lub przetwarzanie obrazu

• konstruktory – tworzące pusty obiekt lub obiekt z zawartością w oparciu o BLOB, BFILE lub ORDImage

51

ORDDicom – Przykład (1/11)

• Utworzenie obiektu directory reprezentującego katalog systemu plików zawierający obrazy

• Utworzenie tabeli z kolumną typu ORDDicom

52

CREATE DIRECTORY dicomfiles

AS 'c:\oracle\dicom';

CREATE TABLE medical_images

(id INTEGER PRIMARY KEY,

patient_name VARCHAR2(30),

dicom ordsys.ORDDicom,

thumbnail ordsys.ORDImage);

ORDDicom – Przykład (2/11)

• Załadowanie repozytorium modelu danych z bazy danych do struktur w pamięci (konieczne na początku każdej sesji)

53

EXEC ordsys.ord_dicom.setDataModel()

ORDDicom – Przykład (3/11)

• Import obrazu DICOM z pliku do bazy danych

54

DECLARE

temp ordsys.ORDDicom;

BEGIN

INSERT INTO medical_images (id, dicom, thumbnail)

VALUES (179,

ordsys.ORDDicom('FILE',

'DICOMFILES', '179.dcm', 0),

ordsys.ORDImage.init())

RETURNING dicom INTO temp;

temp.import(1); -- 1: wywolaj setProperties()

UPDATE medical_images SET dicom=temp WHERE id=179;

COMMIT;

END;

/

ORDDicom – Przykład (4/11)

• Odczyt jednego z podstawowych atrybutów DICOM

• Odczyt rozmiaru obrazu

55

SELECT id, t.dicom.getSOPInstanceUID() AS SOP_Instance_UID

FROM medical_images t;

SELECT id, t.dicom.SOP_Instance_UID AS SOP_Instance_UID

FROM medical_images t;

ID SOP_INSTANCE_UID

---------- -------------------------------------------------------

179 1.2.392.200036.9116.2.2.2.1762676206.1077529882.102147

SELECT id, t.dicom.getContentLength() AS Length

FROM medical_images t;

ID LENGTH

---------- ----------

179 525974

ORDDicom – Przykład (5/11)

• Odczyt metadanych w formacie XML

56

SELECT t.dicom.metadata FROM medical_images t WHERE id=179;

<?xml version="1.0"?>

<DICOM_OBJECT xmlns="http://xmlns.oracle.com/ord/dicom/metadata_1_0" ... >

...

<CODE_STRING tag="00080008" definer="DICOM" name="Image Type"

offset="352" length="22">

ORIGINAL

</CODE_STRING>

...

<UNIQUE_ID tag="00080018" definer="DICOM" name="SOP Instance UID" offset="416"

length="54">1.2.392.200036.9116.2.2.2.1762676206.1077529882.102147</UNIQUE_ID>

...

<PERSON_NAME tag="00100010" definer="DICOM" name="Patient&apos;s Name"

offset="710" length="22">

<NAME type="unibyte"><FAMILY>CANCIO 2HR A-02-013</FAMILY> </NAME>

<VALUE>CANCIO 2HR A-02-013</VALUE>

</PERSON_NAME>

...

</DICOM_OBJECT>

ORDDicom – Przykład (6/11)

• Wyodrębnienie informacji z metadanych w formacie XML

57

ID PATIENT_NAME PATIENT_ID

---------- --------------------- --------------

179 CANCIO 2HR A-02-013 ISRSCT610b

SELECT id,

extractValue(t.dicom.metadata,

'/DICOM_OBJECT/*[@name="Patient''s Name"]/VALUE',

'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0')

as PATIENT_NAME,

extractValue(t.dicom.metadata,

'/DICOM_OBJECT/*[@name="Patient ID"]',

'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0')

as PATIENT_ID

FROM medical_images t;

ORDDicom – Przykład (7/11)

• Wyodrębnienie informacji z metadanych w formacie XMLi umieszczenie ich w kolumnie tabeli

58

ID PATIENT_NAME

---------- ---------------------

179 CANCIO 2HR A-02-013

UPDATE medical_images t

SET patient_name =

extractValue(t.dicom.metadata,

'/DICOM_OBJECT/*[@name="Patient''s Name"]/VALUE',

'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0');

SELECT id, patient_name FROM medical_images;

ORDDicom – Przykład (8/11)

• Utworzenie miniatur obrazów

59

DECLARE

dcmSrc ordsys.ORDDicom;

imgDst ordsys.ORDImage;

BEGIN

SELECT dicom, thumbnail INTO dcmSrc, imgDst

FROM medical_images

WHERE id = 179 FOR UPDATE;

dcmSrc.processCopy('fileformat=jfif fixedscale=75 100',

imgDst);

UPDATE medical_images

SET thumbnail = imgDst WHERE id = 179;

COMMIT;

END;

/

ORDDicom – Przykład (9/11)

• Anonimizacja

60

DECLARE

dcmSrc ordsys.ORDDicom;

anonDst ordsys.ORDDicom;

BEGIN

INSERT INTO anon_images(id, dicom)

VALUES (179, ordsys.ORDDicom())

RETURNING dicom INTO anonDst;

SELECT dicom INTO dcmSrc FROM medical_images

WHERE id = 179;

dcmSrc.makeAnonymous('1.2.3', anonDst);

UPDATE anon_images SET dicom = anonDst WHERE id = 179;

COMMIT;

END;

/

ORDDicom – Przykład (10/11)

• Anonimizacja - weryfikacja

61

SELECT id,

extractValue(t.dicom.metadata,

'/DICOM_OBJECT/*[@name="Patient''s Name"]/VALUE',

'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0')

AS PATIENT_NAME,

extractValue(t.dicom.metadata,

'/DICOM_OBJECT/*[@name="Patient ID"]',

'xmlns=http://xmlns.oracle.com/ord/dicom/metadata_1_0')

AS PATIENT_ID

FROM anon_images t;

ID PATIENT_NAME PATIENT_ID

---------- --------------------- --------------

179 anonymous anonymous

ORDDicom – Przykład (11/11)

• Eksport do pliku

62

DECLARE

dcmSrc ordsys.ORDDicom;

BEGIN

SELECT dicom INTO dcmSrc

FROM anon_images WHERE id = 179;

dcmSrc.export('FILE', 'DICOMFILES',

'anon.dcm');

END;

SQL/MM Still Imagew Oracle Multimedia

64

SQL/MM Still Image w Oracle

• SQL/MM: SQL Multimedia and Application Packages– standard ISO oparty o typy obiektowe SQL99

– standard obejmuje wiele części• SQL/MM Part 5: Still Image dotyczy obrazów

• Obecnie brak specyfikacji dla danych audio i wideo

• Specyfikacja SQL/MM Part 5: Still Image– pierwsza edycja: ISO/IEC 13249-5:2001

– druga edycja: ISO/IEC 13249-5:2003

• Oracle Multimedia 10g/11g a standard SQL/MM– implementacja pierwszej edycji standardu

– część nowych cech przewidzianej w drugiej edycji dostępna w Oracle 10g/11g jako ówczesne rozszerzenia standardu

65

Zakres SQL/MM Still Image

• Dotyczy składowania, przetwarzania i wyszukiwania obrazów (np. fotografii)

• Implementacje standardu mogą wspierać wiele różnych formatów: JPEG, GIF, TIFF, ...– Zakłada się, że obraz jest dwuwymiarową tablicą pikseli

(obraz bitmapowy)

• Przetwarzanie obejmuje m.in. skalowanie i inne transformacje, wycinanie

• Wsparcie dla zapytań dotyczących zawartości:– „Średni” kolor

– Histogramy kolorów (udział kolorów w obrazie)

– Lokalizacja kolorów

– Miara podobieństwa obrazów

• Specyfikacja obecnie zaimplementowana jedynie w Oracle10g/11g

66

Typy SQL/MM Still Image

• SI_StillImage – reprezentuje obraz

• SI_Color – reprezentuje kolor

• SI_AverageColor – reprezentuje średni kolor obrazu

• SI_ColorHistogram – reprezentuje histogram kolorów

• SI_PositionalColor – reprezentuje lokalizację kolorów obrazu

• SI_Texture – reprezentuje teksturę obrazu

• SI_FeatureList – reprezentuje listę właściwości wizualnych obrazu

67

Typ SI_StillImage: Atrybuty

• Standardowe: – SI_content (typu BLOB), SI_contentLength, SI_reference (typu

DATALINK – do reprezentacji zewnętrznych źródeł poprzez URL)

– SI_format, SI_height, SI_width

• Rozszerzenia/niezgodności w Oracle: – mimeType_ora, contentFormat_ora, compressionFormat_ora +

atrybuty do zapamiętania i automatycznej pielęgnacji właściwości wizualnych (retainFeatures_SI, averageColorSpec_ora, colorsList_ora, frequenciesList_ora, colorPositions_ora, textureEncoding_ora)

– zmiana nazw atrybutów standardowych (np. SI_content -> content_SI)

– content_SI typu ORDSource• Obejmuje BLOB dla składowania w bazie i linki do lokalizacji

zewnętrznych

• Oracle10g/11g zgodny z pierwszą wersją SQL/MM SI, typ DATALINK dostępny od drugiej wersji standardu

68

Typ SI_StillImage: Metody

• Konstruktory:

– SI_StillImage(BLOB), SI_StillImage(BLOB, ...)

• Metody do odczytu atrybutów:

– np. SI_Height, SI_Width, SI_Format, ...

• Związane z przetwarzaniem obrazów:

– SI_SetContent, SI_ChangeFormat

– SI_Thumbnail, SI_Scale, SI_Resize, SI_Rotate

• Związane z pielęgnacją właściwości wizualnych (Oracle10g/11g):

– SI_InitFeatures

• Wyznacza i zapamiętuje wartości własności wizualnych

• Wartości te będą automatycznie pielęgnowane

– SI_ClearFeatures

69

Metody SI_StillImage - Przykład

70

SQL/MM Still Image: Typy danych

reprezentujące własności sygnałowe obrazu

71

Typ danych SI_Color

• Typ pomocniczy, wykorzystywany przez SI_AverageColor, SI_ColorHistogram i SI_PositionalColor

• Atrybuty:

– redValue, greenValue, blueValue (wartości od 0 do 255)

• Metody:

– brak specyficznych konstruktorów – dostępny jedynie domyślny systemowy (nieweryfikujący poprawności danych!)

– inicjalizacja koloru: SI_RGBColor (redValue, greenValue, blueValue)

72

Typ danych SI_AverageColor

• Atrybuty:

– SI_AverageColorSpec (typu SI_Color)

• Metody:

– konstruktory: SI_AverageColor(SI_StillImage), SI_AverageColor(SI_Color)

– SI_Score(SI_StillImage) – wyznaczająca "odległość" obrazu od wzorcowego średniego koloru (wartość od 0.0 do 100.0)

• Algorytm wyznaczania średniego koloru dla obrazu:

– obraz jest dzielony na n próbek

– komponenty koloru R, G i B z poszczególnych próbek są niezależnie od siebie sumowane i dzielone przez liczbę próbek

heightSIwidthSI

jiB

heightSIwidthSI

jiG

heightSIwidthSI

jiR

BGR

widthSI

i

heightSI

j

widthSI

i

heightSI

j

widthSI

i

heightSI

j

_*_

),(

,_*_

),(

,_*_

),(

,,

_

1

_

1

_

1

_

1

_

1

_

1

73

Typ danych SI_ColorHistogram

• Atrybuty:– SI_ColorsList (typu SI_Color ARRAY),

SI_FrequenciesList (typu DOUBLE ARRAY)• Tablice mają taką samą liczbę elementów (maksymalny rozmiar

SI_MaxHistogramLength zależny od implementacji)

• Wartości częstotliwości ograniczone zakresem od 0 do 100

• W Oracle10g/11g zamiast ARRAY - "pomocnicze" typy colorsList i colorFrequenciesList, zdefiniowane jako kolekcje VARRAY

• Metody:– konstruktory: SI_ColorHistogram(SI_StillImage),

SI_ColorHistogram(SI_Color, DOUBLE PRECISION), SI_ColorHistogram(ARRAY, ARRAY)

– SI_Append(SI_Color, DOUBLE PRECISION) – dodająca kolor i jego częstość do histogramu

– SI_Score(SI_StillImage) – wyznaczająca "odległość" obrazu od wzorcowego histogramu kolorów (wartość od 0.0 do 100.0)

74

SI_ColorHistogram – algorytm generacji histogramu

• Realizowana poprzez wywołanie konstruktora SI_ColorHistogram(SI_StillImage)

• Zasada działania algorytmu:

– przestrzeń kolorów dzielona jest na pewną liczbę zakresów

• Zależną od implementacji, ograniczoną przez SI_MaxHistogramLength (wartość tego i innych parametrów w Oracle można sprawdzić w perspektywie SI_INFORMTN_SCHEMA.SI_VALUES)

– każdy obszar przestrzeni kolorów obejmuje pewien zbiór kolorówi jest reprezentowany przez jeden kolor Ci

– dla każdego obszaru kolorów określana jest jego częstotliwość Fi

w ramach obrazu poprzez iterację po wszystkich pikselach

– każdy piksel zwiększa wartość Fi o 1 dla tego zakresu i do którego należy jego kolor

– wartości Fi są normalizowane, aby zawierały się w zakresie od 0 do 100

75

Typ danych SI_PositionalColor

• Atrybuty:

– SI_ColorPositions (typu SI_Color ARRAY)

• Maksymalny rozmiar tablicy: SI_NumberSections

• W Oracle10g/11g zamiast ARRAY - "pomocniczy" typ colorPositions

• Metody:

– konstruktor: SI_PositionalColor(SI_StillImage)

– SI_Score(SI_StillImage) – wyznaczająca „odległość” obrazu od wzorcowej lokalizacji kolorów (wartość od 0.0 do 100.0)

• Algorytm wyznaczania lokalizacji kolorów dla obrazu:

– obraz jest dzielony na „siatkę” m x n prostokątów

– dla każdego z prostokątów wyznaczany jest dominujący kolor

76

Typ danych SI_Texture

• Atrybuty:

– SI_TextureEncoding

• W Oracle10g typu textureEncoding – kolekcja VARRAY zawierająca współczynniki opisujące takie cechy tekstury jak: "chropowatość", kontrast, kierunek ułożenia wzoru

• Metody:

– konstruktor: SI_Texture(SI_StillImage)

– SI_Score(SI_StillImage) – wyznaczająca "odległość" obrazu od wzorcowej tekstury (wartość od 0.0 do 100.0)

• Sposób opisu tekstury, algorytm wyznaczania współczynników i określania podobieństwa – zależne od implementacji

77

Typ danych SI_FeatureList

• Atrybuty:– właściwości i ich wagi: SI_AvgClrFtr (typu SI_AverageColor),

SI_AvgClrFtrWght, SI_ClrHstgrFtr (typu SI_ColorHistogram), SI_ClrHstgrFtrWght, SI_PstnlClrFtr (typu SI_PositionalColor), SI_PstnlClrFtrWght, SI_TextureFtr (typu SI_Texture), SI_TextureFtrWght

• Metody:– konstruktor: SI_FeatureList(SI_AverageColor, DOUBLE PRECISION,

SI_ColorHistogram, DOUBLE PRECISION, SI_PositionalColor, DOUBLE PRECISION, SI_Texture, DOUBLE PRECISION)

– metody do ustawiania poszczególnych właściwości i ich wag: SI_SetFeature(SI_AverageColor, DOUBLE PRECISION), SI_SetFeature(SI_ColorHistogram, DOUBLE PRECISION), SI_SetFeature(SI_PositionalColor, DOUBLE PRECISION), SI_SetFeature(SI_Texture, DOUBLE PRECISION),

– metody do odczytu atrybutów, np. SI_AvgClrFtr, SI_AvgClrFtrWght, ...

– SI_Score(SI_StillImage) – wyznaczająca "odległość" obrazu od wzorcowej listy właściwości (wartość od 0.0 do 100.0 – średnia ważona odległości dla poszczególnych właściwości)

N

ii

i

N

ii

W

WimageScoreSIF

1

1

_.

78

SQL/MM Still Image – Funkcje SQL

• Dla każdego konstruktora i metody typów SQL/MM Still Image istnieje równoważna funkcja lub procedura SQL

• Charakterystyka funkcji SQL dla Still Image:– uruchamiane z prawami wywołującego

– posiadające publiczne synonimy

– dostępne dla wszystkich użytkowników bazy danych

– W Oracle10g/11g utworzone w schemacie ORDSYS (podobnie jak wszystkie typy danych Oracle Multimedia)

• Przykłady:– SI_MkStillImage1(BLOB) dla

SI_StillImage.SI_StillImage(BLOB)

– SI_MkRGBClr dla SI_Color.SI_RGBColor()

– SI_GetHeight(StillImage) dla SI_StillImage.SI_Height()

79

SQL/MM Still Imagew Oracle – Przykład (1/4)

CREATE TABLE si_wzory

(nazwa VARCHAR2(40),

obraz ORDSYS.SI_StillImage);

DECLARE

lobd blob;

fils BFILE := BFILENAME('TKANINY','kratka.gif');

BEGIN

DBMS_LOB.CREATETEMPORARY(lobd, TRUE);

DBMS_LOB.fileopen(fils, DBMS_LOB.file_readonly);

DBMS_LOB.LOADFROMFILE(lobd, fils, DBMS_LOB.GETLENGTH(fils));

DBMS_LOB.FILECLOSE(fils);

INSERT INTO SI_WZORY (nazwa, obraz)

VALUES('kratka', new ORDSYS.SI_StillImage(lobd));

DBMS_LOB.FREETEMPORARY(lobd);

COMMIT;

END;

/

• Utworzenie tabeli do składowania obrazów

• Wstawienie obrazu do tabeli za pośrednictwem BFILE

80

SQL/MM Still Imagew Oracle – Przykład (2/4)

DECLARE

tempimage SI_StillImage;

BEGIN

SELECT obraz INTO tempimage FROM si_wzory

WHERE nazwa = 'kratka' FOR UPDATE;

tempimage.SI_InitFeatures;

UPDATE si_wzory

SET obraz = tempimage where nazwa = 'kratka';

COMMIT;

END;

/

• Wyznaczenie sygnatury dla obrazu

• UWAGA: w rzeczywistości należałoby przejść kursorem po wszystkich wierszach tabeli i modyfikować bieżący wiersz w kursorze (WHERE CURRENT OF)

81

SQL/MM Still Imagew Oracle – Przykład (3/4)

SELECT w.nazwa FROM si_wzory w

WHERE SI_FindTexture(

(SELECT v.obraz FROM si_wzory v

WHERE v.nazwa

= 'kratka')).SI_Score(w.obraz) < 30;

• Wyszukanie obrazów podobnych do danego pod względem tekstury

82

SQL/MM Still Imagew Oracle – Przykład (4/4)

DECLARE

tempimage SI_StillImage;

tempAvgColor SI_AverageColor;

tempTexture SI_Texture;

myFeatureList SI_FeatureList;

score DOUBLE PRECISION;

BEGIN

SELECT obraz INTO tempimage FROM si_wzory

WHERE nazwa = 'kratka';

tempAvgColor := NEW SI_AverageColor(tempimage);

tempTexture := NEW SI_Texture(tempimage);

myFeatureList := NEW SI_FeatureList(

tempAvgColor, 0.7, NULL, NULL, NULL, NULL, tempTexture, 0.3);

FOR c IN (SELECT nazwa, obraz FROM si_wzory) LOOP

score := myFeatureList.SI_Score(c.obraz);

IF score < 10 THEN

dbms_output.put_line(c.nazwa || ' score: ' || score);

END IF;

END LOOP;

END;

/

• Wyszukanie obrazów podobnych do danego pod względem koloru i tekstury

83

Content-based Image Retrieval -Uwagi

• Dobrze gdy szukany obiekt zajmuje cały obraz

• Jeśli na obrazie jest wiele kształtów, system poradzi sobie lepiej gdy:– gdy są w kontrastujących kolorach

– na obrazie jest niewiele prostych kształtów

• Komputer nie dorównuje człowiekowi w zakresie porównywania obrazów:– problemy ze skalowaniem, obrotami i przesłanianiem

obiektów

• Na potrzeby analizy obrazy są tymczasowo skalowane do jednego rozmiaru– fragment wycięty z obrazu może być uznany za

niepodobny do całego obrazu

Oracle Multimedia Java API

Czym jest Oracle Multimedia Java API?

• Zbiór klas Java umożliwiających korzystanie z obiektów Oracle Multimedia w programach Java

• Dla obiektowych typów SQL Oracle Multimedia dostarczone są ich odpowiedniki w postaci klas języka Java (OrdAudio, OrdImage, OrdVideo, ...)

• Ponadto dostępne są klasy wspierające obsługę multimediów w serwletach i JSP

• klasy Oracle Multimedia Java API zdefiniowane w pakiecie: oracle.ord.im

– import oracle.ord.im.*;

85

Oracle Multimedia Servlets and JSP Java API

• Upraszcza pobieranie i ładowanie multimediów do bazy danych z poziomu serwletów i JSP

• OrdHttpResponseHandler – umożliwia pobranie obiektu medialnego z bazy danych i wysłanie go do przeglądarki z poziomu serwletu

• OrdHttpJspResponseHandler – umożliwia pobranie obiektu medialnego z bazy danych i wysłanie go do przeglądarki z poziomu JSP

• OrdHttpUploadFormData i OrdHttpUploadFile – służą do obsługi danych przesłanych do serwletu/JSP metodą POST z formularza HTML (mechanizm „file upload”)

86

Klasa OrdHttpResponseHandler (1/2)

• Przykład zastosowania:

87

PreparedStatement stmt = conn.prepareStatement(

"select audio from mp3s where id = 1");

OracleResultSet rset = (OracleResultSet)stmt.executeQuery();

if (rset.next()){

OrdAudio media = (OrdAudio)rset.getCustomDatum(1,

OrdAudio.getFactory( ));

OrdHttpResponseHandler handler =

new OrdHttpResponseHandler(request, response);

handler.sendAudio(media);

}

else{

response.setStatus(response.SC_NOT_FOUND);

}

rset.close( );

stmt.close( );

Klasa OrdHttpResponseHandler (2/2)

• Uwagi:

– Korzystanie z pobranych z bazy danych obiektów Multimedia w Javie wymaga pozostawienia otwartego połączenia z bazą

– Jeśli w obiekcie ORDAudio, ORDDoc, ORDImage, ORDVideo jest ustawiony atrybut MIME Type, odpowiedni nagłówek zostanie automatycznie wysłany przy wywołaniu metody sendAudio, sendDoc, sendImage, sendVideo

– Jawne ustawienie nagłówka „Content-Type” umożliwia metoda sendResponse

88

...

handler.sendResponse(

mimeType, media.getContentLength( ),

media.getContent( ), media.getUpdateTime( ));

File upload w serwletach i JSP

• Pliki przesyłane są z formularzy HTML metodą POST jako zawartość typu multipart/form-data

• Klasa OrdHttpUploadFormData analizuje i udostępnia dane przesłane formularza

• Klasa OrdHttpUploadFile reprezentuje przesłany plik, oferując metody dostępu do niego

89

Podsumowanie

Podsumowanie (1/2)

• Oracle Multimedia jest atrakcyjnym rozwiązaniem dla użytkowników pracujących z dużymi kolekcjami obiektów multimedialnych

• Oracle Multimedia wspiera różne sposoby składowania danych

• Oracle Multimedia może zapewnić przetwarzanie transakcyjne obiektów multimedialnych

• Oracle Multimedia oferuje duże możliwości w zakresie ekstrakcji i przetwarzania metadanych

• Oracle Multimedia jest cechą serwera dostępną w edycji Standard Edition

91

Podsumowanie (2/2)

• Oracle Multimedia najwięcej możliwości oferuje dla obrazów

– wyszukiwanie ze względu na zawartość

– podstawowe przetwarzanie (konwersje, edycja)

– obsługa metadanych w 3 popularnych standardach

– od wersji 10g wybór między składnią specyficzną dla Oracle lub zgodną z SQL/MM Still Image

– szczególne wsparcie dla obrazów medycznych w standardzie DICOM

• Zbliżoną funkcjonalność do Oracle w zakresie multimediów oferują DB2 i Informix

– jedynie Oracle wspiera standard SQL/MM Still Image

– podobnie jak Oracle, IBM wycofał się z obsługi wyszukiwania w oparciu o zawartość na poziomie serwera bazy danych (funkcjonalność zbyt specyficzna, pozostawiona aplikacjom)

• Nadal brak szczególnego wsparcia dla standardu MPEG-792