i wyszukiwanie danych multimedialnych w Oracle 11g · Składowanie, przetwarzanie i wyszukiwanie...
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
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
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):
...
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
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
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'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;
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
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
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 (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