MultimediaDB

Werbung
Multimediale Datenbanken mit
Oracle8i interMedia Audio,
Image and Video
Vortrag für Oberseminar Datenbanken
Michael Maduch
Michael Maduch
1
Inhalt
•
•
•
•
1. Einleitung
2. ORDAudio
3. ORDVideo
4. ORDImage
Michael Maduch
2
Einleitung
- interMedia Audio, Image and Video ist eine Komponente
von Oracle8i interMedia
- diese Komponente erlaubt die Verwaltung von Bilder,
Tönen und Video in einer integrierten Weise mit anderen
Unternehmensinformationen über Objekttypen und
benutzerdefinierte Datentypen
- interMedia audio, image and video unterstützt das
Speichern, Wiederfinden und Verwalten multimedialer
Daten in Oracle8i
Michael Maduch
3
Einleitung
- folgendes kann verwaltet werden:
- Binary large objects (BLOBs)
- File-based large objects (BFILEs)
- URLs
- Streaming audio or video
- andere spezielle Multimediaformate
Michael Maduch
4
Einleitung
- Oracle8i benutzt Objekttypen, ähnlich Java und C++Klassen, zum beschreiben von Sound-, Bild- und
Videodaten
- diese Objekttypen sind:
- ORDAudio für Audiodaten
- ORDVideo für Videodaten
- ORDImage für Bilddaten
- ORDSource für Anwendungen
Michael Maduch
5
Einleitung
- diese Objekte enthalten Attribute (Metadaten und
Mediendaten) und Methoden (zur Datenmanipulation)
- Mediendaten sind Daten zum aktuellen Medium
- Metadaten sind Informationen über die Daten, wie
-
Objektlänge, Kompression, Format
Speicherinformationen (Datentyp, Speicherplatz/Ort)
Sourcenamen
Charakteristische Daten der jeweiligen Medien (Audio,
Video oder Bild)
- Methoden sind Prozeduren, welche auf die Objekte
angewendet werden können, z.B. getContent() oder
process()
Michael Maduch
6
Einleitung
- die interMedia-Objekte (ORDAudio, ORDVideo,...)
haben ein gemeinsames Speichermodell für Daten
- gespeichert werden kann in einer Datenbank, in
einem BLOB, dabei unterstützt die
Transaktionskontrolle von Oracle oder
- außerhalb einer Datenbank (BFILEs, HTTP-Server,
Medien-Server)
Michael Maduch
7
Einleitung
- Oracle8i interMedia audio, image and video ist so
entworfen, daß es erweitert werden kann
- von Haus aus unterstützt es eine Basis-Menge an Audio-,
Bild- und Videodaten-Eigenschaften
- erweiterbar mit Hilfe von:
- Erzeugen eines neuen Formates, basierend auf
Definition vorhandener Formate
- Erzeugen neuer Plugins für erweiterte Unterstützung
bei den Mediendaten
Michael Maduch
8
Einleitung
- Oracle8i ist ein ORDB-Verwaltungssystem
- Objektrelationale Typen:
ORDAudio,
ORDVideo
ORDImage
ORDSource
- weitere Informationen darüber:
- Oracle8i Application Developer´s Guide - Large Objects
(LOBs)
- Oracle8i Concepts
Michael Maduch
9
Einleitung
- Anwendungen können mir Hilfe von SQL, PL/SQL oder
Java über ORD-Typen auf MM-Daten zugreifen und diese
auch manipulieren
- für Benutzung von Java siehe auch:
Oracle8i interMedia audio, image and video Java Client User‘s
Guide and Reference
Michael Maduch
10
Einleitung
- Zugriff auf Attribute innerhalb eines Objekts erfolgt mit
der Syntax:
variable.data_attribute
- Aufruf von Methoden eines Objekts erfolgt mit der Syntax:
variable.function(parameter1,parameter2,...)
Michael Maduch
11
Der Dateityp Audio
Michael Maduch
12
Audio
- unterstützte Audioformate
Format
WAV
Format ID ‘WAVE’
File Format: ‘WAVE’
File Ext: .wav
Choose one of these
compression formats:
Michael Maduch
Audio Feature
Single channel
Stereo
8-bit samples
16-bit samples
Linear PCM encoding
Compression Format
Uncompressed
Microsoft ADPCM
13
Audio
Format
AU
Format ID ‘AUFF’
File Format: ‘AUFF’
File Ext: .au
Michael Maduch
Audio Feature
Single channel
Stereo
8-bit samples
16-bit samples
Mu-law encoding
Linear PCM encoding
Compression Format
Uncompressed
14
Audio
- weitere Audioformate:
- AIFF - Format
- AIFF-C - Format
Michael Maduch
15
Audio
- Definition des Typs ORDAudio
CREATE OR REPLACE TYPE ORDAudio
AS OBJECT
(
-- ATTRIBUTES
description
VARCHAR2(4000),
source
ORDSource,
format
VARCHAR2(31),
mimeType
VARCHAR2(4000),
comments
CLOB,
Michael Maduch
16
-- AUDIO RELATED ATTRIBUTES
encoding
VARCHAR2(256),
numberOfChannels
INTEGER,
samplingRate
INTEGER,
sampleSize
INTEGER,
compressionType
VARCHAR2(4000),
audioDuration
INTEGER,
-- METHODS
-- Methods associated with the date attribute
MEMBER FUNCTION getUpdateTime RETURN DATE,
PRAGMA RESTRICT_REFERENCES(getUpdateTime, WNDS, WNPS, RNDS, RNPS),
MEMBER PROCEDURE setUpdateTime(current_time DATE),
-- Methods associated with the description attribute
MEMBER PROCEDURE setDescription(user_description IN VARCHAR2),
MEMBER FUNCTION getDescription RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(getDescription, WNDS, WNPS, RNDS, RNPS),
Michael Maduch
17
-- Methods associated with the mimeType attribute
MEMBER PROCEDURE setMimeType(mime IN VARCHAR2),
MEMBER FUNCTION getMimeType RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(getMimeType, WNDS, WNPS, RNDS, RNPS),
-- Methods associated with the source attribute
MEMBER FUNCTION processSourceCommand(
ctx IN OUT RAW,
cmd IN VARCHAR2,
arguments IN VARCHAR2,
result OUT RAW)
RETURN RAW,
MEMBER FUNCTION isLocal RETURN BOOLEAN,
PRAGMA RESTRICT_REFERENCES(isLocal, WNDS, WNPS, RNDS, RNPS),
MEMBER PROCEDURE setLocal,
MEMBER PROCEDURE clearLocal,
Michael Maduch
18
MEMBER PROCEDURE setSource(
source_type IN VARCHAR2,
source_location IN VARCHAR2,
source_name IN VARCHAR2),
MEMBER FUNCTION getSource RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(getSource, WNDS, WNPS, RNDS, RNPS),
MEMBER FUNCTION getSourceType RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(getSourceType, WNDS, WNPS, RNDS, RNPS),
MEMBER FUNCTION getSourceLocation RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(getSourceLocation, WNDS, WNPS, RNDS, RNPS),
MEMBER FUNCTION getSourceName RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(getSourceName, WNDS, WNPS, RNDS, RNPS),
Michael Maduch
19
MEMBER PROCEDURE import(ctx IN OUT RAW),
MEMBER PROCEDURE importFrom(
ctx IN OUT RAW,
source_type IN VARCHAR2,
source_location IN VARCHAR2,
source_name IN VARCHAR2),
MEMBER PROCEDURE export(
ctx IN OUT RAW,
source_type IN VARCHAR2,
source_location IN VARCHAR2,
source_name IN VARCHAR2),
MEMBER FUNCTION getContentLength(ctx IN OUT RAW) RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(getContentLength, WNDS, WNPS, RNDS, RNPS),
MEMBER FUNCTION getContentInLob(
ctx IN OUT RAW,
dest_lob IN OUT NOCOPY BLOB,
mimeType OUT VARCHAR2,
format OUT VARCHAR2),
Michael Maduch
20
MEMBER FUNCTION getContent RETURN BLOB,
PRAGMA RESTRICT_REFERENCES(getContent, WNDS, WNPS, RNDS, RNPS),
MEMBER PROCEDURE deleteContent,
-- Methods associated with file operations on the source
MEMBER FUNCTION openSource(userArg IN RAW, ctx OUT RAW) RETURN
INTEGER,
MEMBER FUNCTION closeSource(ctx IN OUT RAW) RETURN INTEGER,
MEMBER FUNCTION trimSource(ctx IN OUT RAW,
newlen IN INTEGER) RETURN INTEGER,
MEMBER PROCEDURE readFromSource(
ctx IN OUT RAW,
startPos IN INTEGER,
numBytes IN OUT INTEGER,
buffer OUT RAW),
MEMBER PROCEDURE writeToSource(
ctx IN OUT RAW,
startPos IN INTEGER,
numBytes IN OUT INTEGER,
buffer IN RAW),
Michael Maduch
21
-- Methods associated with the comments attribute
MEMBER PROCEDURE appendToComments(amount IN BINARY_INTEGER,
buffer IN VARCHAR2),
MEMBER PROCEDURE writeToComments(offset IN INTEGER,
amount IN BINARY_INTEGER,
buffer IN VARCHAR2),
MEMBER FUNCTION readFromComments(offset IN INTEGER,
amount IN BINARY_INTEGER := 32767)
RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(readFromComments, WNDS, WNPS, RNDS,
RNPS),
MEMBER FUNCTION locateInComments(pattern IN VARCHAR2,
offset IN INTEGER := 1,
occurrence IN INTEGER := 1)
RETURN INTEGER,
MEMBER PROCEDURE trimComments(newlen IN INTEGER),
MEMBER PROCEDURE eraseFromComments(amount IN OUT NOCOPY INTEGER,
offset IN INTEGER := 1),
Michael Maduch
22
MEMBER PROCEDURE deleteComments,
MEMBER PROCEDURE loadCommentsFromFile(fileobj IN BFILE,
amount IN INTEGER,
from_loc IN INTEGER := 1,
to_loc IN INTEGER := 1),
MEMBER PROCEDURE copyCommentsOut(dest IN OUT NOCOPY CLOB,
amount IN INTEGER,
from_loc IN INTEGER := 1,
to_loc IN INTEGER := 1),
MEMBER FUNCTION compareComments(
compare_with_lob
IN CLOB,
amount
IN INTEGER := 4294967295,
starting_pos_in_comment
IN INTEGER := 1,
starting_pos_in_compare
IN INTEGER := 1)
RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(compareComments, WNDS, WNPS, RNDS,RNPS),
MEMBER FUNCTION getCommentLength RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(getCommentLength, WNDS, WNPS, RNDS,
RNPS),
Michael Maduch
23
-- Methods associated with audio attributes accessors
MEMBER PROCEDURE setFormat(knownformat IN VARCHAR2),
MEMBER FUNCTION getFormat RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(getFormat, WNDS, WNPS, RNDS, RNPS),
MEMBER FUNCTION getFormat(ctx IN OUT RAW) RETURN VARCHAR2,
MEMBER PROCEDURE setEncoding(knownEncoding IN VARCHAR2),
MEMBER FUNCTION getEncoding RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(getEncoding, WNDS, WNPS, RNDS, RNPS),
MEMBER FUNCTION getEncoding(ctx IN OUT RAW) RETURN VARCHAR2,
MEMBER PROCEDURE setNumberOfChannels(knownNumberOfChannels IN
INTEGER),
MEMBER FUNCTION getNumberOfChannels RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(getNumberOfChannels, WNDS, WNPS, RNDS,
RNPS),
MEMBER FUNCTION getNumberOfChannels(ctx IN OUT RAW) RETURN INTEGER,
MEMBER PROCEDURE setSamplingRate(knownSamplingRate IN INTEGER),
MEMBER FUNCTION getSamplingRate RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(getSamplingRate, WNDS, WNPS, RNDS, RNPS),
MEMBER FUNCTION getSamplingRate(ctx IN OUT RAW) RETURN INTEGER,
Michael Maduch
24
MEMBER PROCEDURE setSampleSize(knownSampleSize IN INTEGER),
MEMBER FUNCTION getSampleSize RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(getSampleSize, WNDS, WNPS, RNDS, RNPS),
MEMBER FUNCTION getSampleSize(ctx IN OUT RAW) RETURN INTEGER,
MEMBER PROCEDURE setCompressionType(knownCompressionType IN VARCHAR2),
MEMBER FUNCTION getCompressionType RETURN VARCHAR2,
PRAGMA RESTRICT_REFERENCES(getCompressionType, WNDS, WNPS, RNDS,RNPS),
MEMBER FUNCTION getCompressionType(ctx IN OUT RAW) RETURN VARCHAR2,
MEMBER PROCEDURE setAudioDuration(knownAudioDuration IN INTEGER),
MEMBER FUNCTION getAudioDuration RETURN INTEGER,
PRAGMA RESTRICT_REFERENCES(getAudioDuration, WNDS, WNPS, RNDS, RNPS),
MEMBER FUNCTION getAudioDuration(ctx IN OUT RAW) RETURN INTEGER,
MEMBER PROCEDURE setKnownAttributes(knownFormat IN VARCHAR2,
knownEncoding IN VARCHAR2,
knownNumberOfChannels IN INTEGER,
knownSamplingRate IN INTEGER,
knownSampleSize IN INTEGER,
knownCompressionType IN VARCHAR2,
knownAudioDuration IN INTEGER),
Michael Maduch
25
-- Methods associated with setting all the properties
MEMBER PROCEDURE setProperties(ctx IN OUT RAW),
MEMBER FUNCTION checkProperties(ctx IN OUT RAW) RETURN BOOLEAN,
MEMBER FUNCTION getAttribute(
ctx IN OUT RAW,
name IN VARCHAR2) RETURN VARCHAR2,
MEMBER PROCEDURE getAllAttributes(
ctx IN OUT RAW,
attributes IN OUT NOCOPY CLOB),
-- Methods associated with audio processing
MEMBER FUNCTION processAudioCommand(
ctx IN OUT RAW,
cmd IN VARCHAR2,
arguments IN VARCHAR2,
result OUT RAW)
RETURN RAW
);
Michael Maduch
26
Audio
- werden Methoden benutzt, die als erstes Argument “ctx”
haben, müssen Voraussetzungen geschaffen werden
- vor dem ersten Aufruf dieser Methoden muß der
Client die ctx-Struktur allokieren und mit “NULL”
initialisieren und anschließend die openSoucre()Methode aufrufen
- jetzt kann das Source-Plugin den Kontext für den
Client initialisieren
- wenn die Verarbeitung beendet ist, sollte der Client
die closeSource()-Methode aufrufen
Michael Maduch
27
Audio
Beispiel einer Audio - Tabellen - Definition
CREATE TABLE TAUD(n NUMBER, aud ORDSYS.ORDAUDIO)
storage (initial 100K next 100K pctincrease 0);
INSERT INTO TAUD VALUES(1, ORDSYS.ORDAudio(
NULL,
ORDSYS.ORDSOURCE(EMPTY_BLOB(), NULL, NULL, NULL, SYSDATE,
NULL),
NULL,
NULL,
EMPTY_CLOB(), NULL, 0, 0, 0, NULL, 0)
);
Michael Maduch
28
Audio
INSERT INTO TAUD VALUES(2, ORDSYS.ORDAudio(
NULL,
ORDSYS.ORDSOURCE(EMPTY_BLOB(), NULL, NULL, NULL, SYSDATE, NULL),
NULL,
NULL,
EMPTY_CLOB(), NULL, 0, 0, 0, NULL, 0)
);
CREATE TABLE TS(n NUMBER, s ORDSYS.ORDSOURCE);
INSERT INTO TS VALUES(1, ORDSYS.ORDSOURCE(EMPTY_BLOB(), NULL, NULL,
NULL, SYSDATE, NULL));
INSERT INTO TS VALUES(2, ORDSYS.ORDSOURCE(EMPTY_BLOB(), NULL, NULL,
NULL, SYSDATE, NULL));
Michael Maduch
29
Audio
INSERT INTO TS VALUES(3, ORDSYS.ORDSOURCE(EMPTY_BLOB(), NULL,
NULL, NULL, SYSDATE, NULL));
INSERT INTO TS VALUES(4, ORDSYS.ORDSOURCE(EMPTY_BLOB(), NULL,
NULL, NULL, SYSDATE, NULL));
Michael Maduch
30
Audio
- Packages oder PL/SQL-Plugins
- dienen als Anleitung für Entwicklung eigener
Audioformate
- als Beispiel das Package:
ORDPLUGINS.ORDX_DEFAULT_AUDIO
CREATE OR REPLACE PACKAGE ORDX_DEFAULT_AUDIO
authid current_user
AS
--AUDIO ATTRIBUTES ACCESSORS
FUNCTION getFormat(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN VARCHAR2;
Michael Maduch
31
FUNCTION getEncoding(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN VARCHAR2;
FUNCTION getNumberOfChannels(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN INTEGER;
FUNCTION getSamplingRate(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN INTEGER;
FUNCTION getSampleSize(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN INTEGER;
FUNCTION getCompressionType(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN VARCHAR2;
FUNCTION getAudioDuration(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN INTEGER;
PROCEDURE setProperties(ctx IN OUT RAW, obj IN OUT NOCOPY
ORDSYS.ORDAudio);
FUNCTION checkProperties(ctx IN OUT RAW, obj IN OUT ORDSYS.ORDAudio)
RETURN NUMBER;
FUNCTION getAttribute(ctx IN OUT RAW,
obj IN ORDSYS.ORDAudio,
name IN VARCHAR2) RETURN VARCHAR2;
Michael Maduch
32
PROCEDURE getAllAttributes(ctx IN OUT RAW,
obj IN ORDSYS.ORDAudio,
attributes IN OUT NOCOPY CLOB);
--AUDIO PROCESSING METHODS
FUNCTION processCommand(ctx
IN OUT RAW,
obj
IN OUT NOCOPY ORDSYS.ORDAudio,
cmd
IN VARCHAR2,
arguments IN VARHAR2,
result
OUT RAW)
RETURN RAW;
PRAGMA RESTRICT_REFERENCES(getFormat, WNDS, WNPS, RNDS, RNPS);
PRAGMA RESTRICT_REFERENCES(getEncoding, WNDS, WNPS, RNDS, RNPS);
PRAGMA RESTRICT_REFERENCES(getNumberOfChennels, WNDS, WNPS, RNDS, RNPS);
PRAGMA RESTRICT_REFERENCES(getSamplingRate, WNDS, WNPS, RNDS, RNPS);
PRAGMA RESTRICT_REFERENCES(getSampleSize, WNDS, WNPS, RNDS, RNPS);
PRAGMA RESTRICT_REFERENCES(getCompressionType, WNDS, WNPS, RNDS, RNPS);
PRAGMA RESTRICT_REFERENCES(getAttribute, WNDS, WNPS, RNDS, RNPS);
PRAGMA RESTRICT_REFERENCES(getAudioDuration, WNDS, WNPS, RNDS, RNPS);
END;
/
Michael Maduch
33
Audio
- weiter Packages
ORDPLUGINS.ORDX_AUFF_AUDIO - Package
ORDPLUGINS.ORDX_AIFF_AUDIO - Package
ORDPLUGINS:ORDX_AIFC_AUDIO - Package
ORDPLUGINS.ORDX_WAVE_AUDIO - Package
Michael Maduch
34
Audio
-
Erweiterung von interMedia für Unterstützung neuer
Audioformate
- dies geschieht in 4 Schritten:
- entwerfen eines neuen Audiodatenformates
- implementieren des neuen Formates und benennen,
z.B.: ORDX_MY_AUDIO.SQL
- installieren des neuen Plugins unter ORDPLUGINS
- Zugriffsrechte freigeben, z.B. für PUBLIC
Michael Maduch
35
Audio
- Package-Listing für eigenes Audioformat
CREATE OR REPLACE PACKAGE BODY ORDX_MY_AUDIO
AS
--AUDIO ATTRIBUTES ACCESSORS
FUNCTION getFormat(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN VARCHAR2
IS
--Your variables go here
BEGIN
--Your code goes here
END;
Michael Maduch
36
Audio
FUNCTION getEncoding(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN VARCHAR2
IS
--Your variables go here
BEGIN
--Your code goes here
END;
FUNCTION getNumberOfChannels(ctx IN OUT RAW, obj IN ORDSYS.ORDAudio)
RETURN INTEGER
IS
--Your variables go here
BEGIN
--Your code goes here
END;
...
Michael Maduch
37
Audio
- Beispiele
Define a Song Object
CREATE TYPE songObject as OBJECT (
cdRef
REF CdObject,
-- REF into the cd table
songId
VARCHAR2(20),
title
VARCHAR2(4000),
artist
VARCHAR2(4000),
awards
VARCHAR2(4000),
timePeriod
VARCHAR2(20),
duration
INTEGER,
clipRef
REF clipObject,
-- REF into the clips table (music video)
txtcontent
CLOB,
audioSource
ORDSYS.ORDAUDIO
);
Michael Maduch
38
Audio
Create a Table Named SongsTable
CREATE TABLE SongsTable of songObject (UNIQUE (songId), songId
NOT NULL);
Michael Maduch
39
Audio
Insert a Song into the SongsTable Table
-- insert a song into the songs table
INSERT INTO SongsTable VALUES (NULL, ’00’,
’Under Pressure’,
’Queen’,
’no awards’,
’80-90’,
243,
NULL,
EMPTY_CLOB(),
ORDSYS.ORDAudio(NULL,
ORDSYS.ORDSource(EMPTY_BLOB(),NULL,NULL,NULL,NULL,NULL),
NULL, NULL, EMPTY_CLOB(), NULL, NULL, NULL, NULL, NULL, NULL));
-- check songs insertion
SELECT s.title
FROM SongsTable s
WHERE songId = ’00’
Michael Maduch
40
Der Datentyp Video
Michael Maduch
41
Video
- die Definition des Typs ORDVideo
CREATE OR REPLACE TYPE ORDVideo
AS OBJECT
(
-- ATTRIBUTES
description
VARCHAR2(4000),
source
ORDSource,
format
VARCHAR2(31),
mimeType
VARCHAR2(4000),
comments
CLOB,
Michael Maduch
42
Video
-- VIDEO RELATED ATTRIBUTES
width
INTEGER,
height
INTEGER,
frameResolution
INTEGER,
frameRate
INTEGER,
videoDuration
INTEGER,
numberOfFrames
INTEGER,
compressionType
VARCHAR2(4000),
numberOfColors
INTEGER,
bitRate
INTEGER,
-- METHODS
...
Michael Maduch
43
Video
- werden Methoden benutzt, die als erstes Argument “ctx”
haben, müssen Voraussetzungen geschaffen werden
- vor dem ersten Aufruf dieser Methoden muß der
Client die ctx-Struktur allokieren und mit “NULL”
initialisieren und anschließend die openSoucre()Methode aufrufen
- jetzt kann das Source-Plugin den Kontext für den
Client initialisieren
- wenn die Verarbeitung beendet ist, sollte der Client
die closeSource()-Methode aufrufen
Michael Maduch
44
Video
- Beispiel einer Video-Tabellen-Definition
CREATE TABLE TVID(n NUMBER, vid ORDSYS.ORDVIDEO)
storage (initial 100K next 100K pctincrease 0);
INSERT INTO TVID VALUES(1, ORDSYS.ORDVideo(
NULL,
ORDSYS.ORDSOURCE(EMPTY_BLOB(), NULL, NULL, NULL, SYSDATE, NULL),
NULL,
NULL,
EMPTY_CLOB(),0,0,0,0,0,0,0,0,0)
);
Michael Maduch
45
Video
INSERT INTO TVID VALUES(2, ORDSYS.ORDVideo(
NULL,
ORDSYS.ORDSOURCE(EMPTY_BLOB(), NULL, NULL, NULL,SYSDATE,NULL),
NULL,
NULL,
EMPTY_CLOB(),0,0,0,0,0,0,0,0,0)
);
Michael Maduch
46
Video
- Packages oder PL/SQL-Plugins
ORDPLUGINS.ORDX_DEFAULT_VIDEO - Package
- dient als Anleitung zur Entwicklung eigener Videoformate
- weitere Packages
ORDPLUGINS.ORDX_AVI_VIDEOAUDIO - Package
ORDPLUGINS:ORDX_QT_VIDEO - Package
ORDPLUGINS.ORDX_MOOV_VIDEO - Package
ORDPLUGINS.ORDX_MPEG_VIDEO - Package
Michael Maduch
47
Video
- Erweiterung von interMedia zur Unterstützung neuer
Videoformate
- dies geschieht in 4 Schritten
- entwerfen eines neuen Videodatenformates
- implementieren des neuen Formates und benennen,
z.B.: ORDX_MY_VIDEO.SQL
- installieren des neuen Plugins unter ORDPLUGINS
- Zugriffsrechte freigeben, z.B. für PUBLIC
Michael Maduch
48
Video
- Package für eigenes Audioformat
CREATE OR REPLACE PACKAGE BODY ORDX_MY_VIDEO
AS
--VIDEO ATTRIBUTES ACCESSORS
FUNCTION getFormat(ctx IN OUT RAW, obj IN ORDSYS.ORDVideo)
RETURN VARCHAR2
IS
--Your variables go here
BEGIN
--Your code goes here
END;
...
Michael Maduch
49
- Beispiele
Define a Clip Object
CREATE TYPE clipObject as OBJECT (
videoRef
REF VideoObject,
clipId
VARCHAR2(20),
title
VARCHAR2(4000),
director
VARCHAR2(4000),
casting
ORDSYS.ORDAnnotations,
category
VARCHAR2(20),
copyright
VARCHAR2(4000),
producer
VARCHAR2(4000),
awards
VARCHAR2(4000),
timePeriod
VARCHAR2(20),
rating
VARCHAR2(256),
duration
INTEGER,
cdRef
REF CdObject,
txtcontent
CLOB,
coverImg
REF ORDSYS.ORDImage,
videoSource
ORDSYS.ORDVideo
);
Michael Maduch
-- REF into the video table
-- Id inside of the clip table
-- Pairs of characters/actors
-- REF into a CdObject(soundtrack)
-- REF into the ImageTable
50
Video
Create a Table Named clipsTable
CREATE TABLE ClipsTable of clipObject (UNIQUE (clipId), clipId NOT NULL)
NESTED TABLE casting.annotations STORE AS annot_store_table2;
Michael Maduch
51
Video
Insert a Video Clip into the clipsTable Table
-- Insert a Video Clip into the ClipsTable
insert into ClipsTable values (NULL,
’11’,
’Oracle Commercial’,
’Larry Ellison’,
ORDSYS.ORDAnnotations(NULL),
’commercial’,
’Oracle Corporation’,
’’,
’no awards’,
’90s’
’no rating’,
Michael Maduch
52
Video
30,
NULL,
EMPTY_CLOB(),
NULL,
ORDSYS.ORDVIDEO(’Oracle Commercial 1 Video Clip’,
ORDSYS.ORDSource(EMPTY_BLOB(),NULL,NULL,NULL,NULL,NULL),
’QuickTime File Format’,
’video/quicktime’,
EMPTY_CLOB(),
160, 120, 72, 15, 30, 450, ’Cinepak’, 256, 15000));
Michael Maduch
53
Der Datentyp Image
Michael Maduch
54
Image
- die unterstützten Bildformate
Format
BMP
File Format: ‘BMPF’
File Ext: .bmp
Mime: image/bmp
Choose one of these compression formats:
Choose one or more of these content formats:
Michael Maduch
Pixel Format
Monochrome
4-bit LUT
8-bit LUT
16-bit RGB
24-bit RGB
32-bit RGB
Compression Format
Uncompressed
BMPRLE (for 8-bit LUT)
Data Description
Inverse DIB
OS/2 format
Support
Read/Write
Read
Read/Write
Read
Read/Write
Read
Support
Read/Write
Read/Write
Support
Read
Read
55
Image
Format
GIF
Pixel Format
Monochrome
8-bit LUT
Support
Read
Read/Write
Compression Format
GIFLZW (LZW)
Data Description
NA
Support
Read/Write
Support
NA
File Format: ‘GIFF’
File Ext: .gif
Mime: image/gif
NOTE: interMedia image has limited support
for animated GIF images; there is setProperties( )
support; however, processing using the
process( ) and processCopy( ) (or Analyze)
methods is not supported.
Michael Maduch
56
Image
- weitere Bildformate:
Michael Maduch
CALS Raster - Format
JFIF - Format
PCX - Format
PICT - Format
Raw Pixel - Format
Sun Raster - Format
Targa - Format
TIFF - Format
57
Image
- Definition des Typs ORDImage
CREATE OR REPLACE TYPE ORDImage AS OBJECT
(
-- TYPE ATTRIBUTES
source
ORDSource,
height
INTEGER,
width
INTEGER,
contentLength
INTEGER,
fileFormat
VARCHAR2(4000),
contentFormat
VARCHAR2(4000),
compressionFormat
VARCHAR2(4000),
mimeType
VARCHAR2(4000),
-- METHOD DECLARATION
...
Michael Maduch
58
Image
- werden Methoden benutzt, die als erstes Argument “ctx”
haben, müssen Voraussetzungen geschaffen werden
- vor dem ersten Aufruf dieser Methoden muß der
Client die ctx-Struktur allokieren und mit “NULL”
initialisieren und anschließend die Soucre.open()Methode aufrufen
- jetzt kann das Source-Plugin den Kontext für den
Client initialisieren
- wenn die Verarbeitung beendet ist, sollte der Client
die Source.close()-Methode aufrufen
Michael Maduch
59
Image
- Beispiel einer Video-Tabellen-Definition
CREATE TABLE emp (
ename
VARCHAR2(50),
salary
NUMBER,
job
VARCHAR2(50),
department
INTEGER,
photo
ORDSYS.ORDImage,
large_photo
ORDSYS.ORDImage);
DECLARE
Image ORDSYS.ORDImage;
Michael Maduch
60
Image
BEGIN
INSERT INTO emp VALUES (’John Doe’, 24000, ’Technical Writer’, 123,
ORDSYS.ORDImage(ORDSYS.ORDSource(empty_blob(),’file’,’ORDIMGDIR’,
’jdoe.gif’,SYSDATE,0),
NULL,NULL,NULL,NULL,NULL,NULL,NULL),
ORDSYS.ORDImage(ORDSYS.ORDSource(empty_blob(),’file’,’ORDIMGDIR’,
’jdoe.gif’,SYSDATE,0),
NULL,NULL,NULL,NULL,NULL,NULL,NULL));
SELECT large_photo INTO Image FROM emp
WHERE ename = ’John Doe’ FOR UPDATE;
Image.setProperties;
UPDATE emp SET large_photo = Image WHERE ename = ’John Doe’;
COMMIT;
END;
/
Michael Maduch
61
Image
- Beispiele
Adding a New Column of Type ORDImage to the emp Table
ALTER TABLE emp
ADD (photo ORDSYS.ORDImage);
Michael Maduch
62
Image
Adding ORDImage Types to a New Table
CREATE TABLE emp (
ename VARCHAR2(50),
salary NUMBER,
job VARCHAR2(50),
department INTEGER,
photo ORDSYS.ORDImage,
large_photo ORDSYS.ORDImage
);
Michael Maduch
63
Image
Insert a Row into a Table with Empty Data in the ORDImage Type
Column (BLOB)
INSERT INTO emp VALUES (
’John Doe’, 24000, ’Technical Writer’, 123,
ORDSYS.ORDImage(ORDSYS.ORDSource(empty_blob(),
NULL,NULL,NULL,SYSDATE,1),
NULL,NULL,NULL,NULL,NULL,NULL,NULL));
Insert a Row into a Table with an Image in the ORDImage Type Column
(BFILE)
INSERT INTO emp VALUES (
’John Doe’, 24000, ’Technical Writer’, 123,
ORDSYS.ORDImage(ORDSYS.ORDSource(empty_blob(),’file’,’ORDIMGDIR’,
’jdoe.gif’,SYSDATE,0),
NULL,NULL,NULL,NULL,NULL,NULL,NULL));
Michael Maduch
64
Image
Inhalts-basierte Suche bei Bilddaten
- dies läßt Fragen basierend auf innere visuelle Attribute der
Bilder durchführen
- zum Beispiel Farbe, Struktur oder Textur
- man ist nicht nur auf Schlüsselworte oder ähnliches
angewiesen
- die zu Grunde liegende Technologie wurde von Virage,
Inc, einem führendem Unternehmen auf diesem Gebiet
entwickelt
Michael Maduch
65
Image
- ein Beispiel:
- eine Datenbank mit Bildern von Autos
- man will alle roten Autos suchen
- zuerst ein Bild mit rotem Auto auswählen und dann
ähnliche Bilder suchen
- da Autos aber immer irgendwie ähnlich aussehen,
kann die Genauigkeit der Abfrage noch erhöht
werden, indem man der Farbe mehr Gewicht
verleiht als z.B. der Struktur
Michael Maduch
66
Image
- Anwendungen können mir Hilfe von SQL, PL/SQL oder
Java über ORDVir Bilder zugreifen und diese auch
manipulieren
- für Benutzung von Java siehe auch:
Oracle8i Visual Information Retrieval Java Client User’s Guide
and Reference
Michael Maduch
67
Image
- Zugriff auf Attribute innerhalb eines Objekts erfolgt mit
der Syntax:
variable.data_attribute
- Aufruf von Methoden eines Objekts erfolgt mit der Syntax:
variable.function(parameter1,parameter2,...)
Michael Maduch
68
Image
- es gibt zwei Möglichkeiten um Bilder suchen zu lassen:
- über Informationen die Benutzer in DB eingetragen
hat, wie Titel, beschreibende Schlüsselwörter in
eingeschränktem Vokabular oder vorbestimmten
Klassifikationen
- über automatische Bildmerkmalsextraktion und
Gegenstandserkennung, um Bildinhalt einzustufen,
das ist Vorgehensweise bei inhalts-basierender
Suche
Michael Maduch
69
Image
- der primäre Vorteil beim Benutzen der inhalts-basierenden
Suche ist die Verringerung von Zeit und Aufwand beim
Beschaffen von bild-basierenden Informationen
- einige Gebiete, wo inhalts-basierende Suche nützlich sein
kann:
(hier ist die Abfrage: finde Gegenstand, der wie dieser aussieht)
-
Warenzeichen und Copyrights
Kunstgalerien und Museen
Mode und Stoff-Design
Kriminaltechnik
- so könnte ein Käufer im Internet-Shop eine Suchanfrage
eingeben: “Finde grünen Mantel mit roten Punkten”
Michael Maduch
70
Image
- ein inhatsbasierendes Suchsystem verarbeitet die
enthaltenen Bilddaten und erschafft ein abstraktes Objekt
dieses Inhalts in Hinsicht auf die visuellen Eigenschaften
- einige Abfragen werden mit dem abstrakten Objekt
schneller fertig, als mit dem Bild
- so wird jedes Bild einer Datenbank analysiert und eine
kompakte Repräsentation seines Inhalts in einer “Signatur”
abgelegt
Michael Maduch
71
Image
- so eine Signatur enthält beispielsweise:
global Color: Verteilung der Farben innerhalb des Bildes, diese
Verteilung schließt alle Farben ein, aber nicht die Lage
local Color: Verteilung der Farbe und wo sie im Bild vorkommt
Texture: low-level Muster und Texturen innerhalb des Bildes, wie z.B.
Körnigkeit oder Ebenheit
Structure: Formen, die im Bild erscheinen, sie werden bestimmt durch
Formcharakterisierungstechniken, wie Kantenerkennung
Facial: repräsentiert die einzigartigen Charakteristiken von Gesichtern,
wie Form und Größe der Nase, Augenabstand,...
aber: Gesichtssignaturen werden mit einer separat erhältlichen
Software (kaufen) von Viisage Technology, Inc.
Michael Maduch
72
Image
- all diese Kenndaten für visuelle Attribute werden in der
Signatur gespeichert, diese hat eine Größe zwischen 1000
und 2000 Byte
- für bessere Performance bei großen Bilddatenbanken ist es
besser einen Index, basierend auf den Signaturen, zu
erstellen
Michael Maduch
73
Image
- Bild kann gefunden werden, indem es mit einem
Vergleichsbild zusammenpaßt (übereinstimmt)
- der Vergleichsvorgang erfordert die Signaturen beider
Bilder
- Bilder sind aber selten gleich und so wird der Vergleich
über eine ähnlichkeitsmessende Funktion, basierend auf
den visuellen Attributen, geführt
- als Ergebnis entsteht eine verhältnismäßige Entfernung
zwischen beiden Bildern
- dieses Ergebnis wird benutzt, um den Grad der Ähnlichkeit
herauszufinden
- kleinere Entfernung bedeutet bessere Übereinstimmung der
Bilder
Michael Maduch
74
Image
- globale und lokale Farben
-
wie gesagt: globale Farben repräsentieren die
Verteilung von Farben innerhalb eines Bildes, und
lokale Farben repräsentieren die Verteilung einzelner
Farben und ihre Lage im Bild
Michael Maduch
75
Image
Bild 1
Bild 2
- werden die Bilder nun auf global Farben verglichen, dann
sind sie gleich:
- Ergebnis der ähnlichkeitsmessenden Funktion ist 0.0, weil jede Farbe
mit gleicher Prozentzahl in beiden Bildern vorkommt
- werden die Bilder auch nach lokalen Farbe verglichen,
dann sind sie nicht gleich
- hier ist das Ergebnis 100, weil es keine Überschneidungen gibt
Michael Maduch
76
Image
- Abbildung zeigt zwei Bilder, wo der Vergleich ein “sehr
nah” (0.0) für globale Farben ergibt
Michael Maduch
77
Image
- Abbildung zeigt zwei Bilder, wo der Vergleich ein “sehr
nah” (0.02461) für lokale Farbe ergibt
Michael Maduch
78
Image
- Textur und Struktur
- Bilder, die komplette Texturen haben, z.B. Marmor oder
Steine, sind allgemein schwer mit Hilfe von
Schlüsselworten zu katalogisieren, weil das Vokabular für
Texturen begrenzt ist
- Texturen können allein (ohne Farben) oder aber auch mit
kleinen Farbflächen, wie bei Holz oder Stoffmuster,
verwendet werden
Michael Maduch
79
Image
- Abbildung zeigt zwei ähnliche Texturen
Michael Maduch
80
Image
- eine Struktur wird nicht strikt auf eine bestimmte Größe
oder Position beschränkt
- aber Objekte von gleicher Größe oder Position sind
ähnlicher als Objekte in verschiedenen Größen
- Strukturen sind nützlich um Objekte zu erfassen, wie die
Horizontlinie einer Landschaft, rechteckigen Strukturen an
Gebäuden oder organische Strukturen bei Bäumen
- eine Struktur ist sehr nützlich zur Abfrage einfacher
Formen, wie Kreise oder Rechtecke, besonders wenn das
gesucht Bild von Hand gezeichnet wurde und Farben nicht
so von Bedeutung sind
Michael Maduch
81
Image
- Abbildung zeigt zwei Bilder, die “sehr nah” in Bezug auf
die Struktur sind
Michael Maduch
82
Image
- Gesichtserkennung
- Visual Information Retrieval unterstützt die
Gesichtserkennungssoftware von Viisage
Technology, Inc.
- Dieses Programm analysiert Bilder von Gesichtern
und generiert eine Gesichtssignatur, basierend auf
verschiedenen einmaligen biometrischen
Charakteristika
- Nach der Erzeugung der Signatur kann man die
Methoden Convert(), VIRScoure() und
VIRSimilar(), um Bilder zu vergleichen
Michael Maduch
83
Image
- wenn Bilder verglichen werden sollen, müssen die
visuellen Eigenschaften ein “Gewicht” erhalten
- damit errechnet Visual Information Retrieval ein
Ähnlichkeitsmaß für jede visuelle Eigenschaft
- jedes Gewicht repräsentiert, wie empfindlich der
Vergleichsprozeß sein soll, z.B. sehr ähnlich, wenig
ähnlich oder gar nicht ähnlich
- mit den Gewichten wird ein sogenannter “Score” bzw. die
Entfernung zwischen zwei Bilder ermittelt
- der Score reicht von 0 (keine Unterschiede) bis 100 ( sehr
viele Unterschiede)
Michael Maduch
84
Image
- Beispiele
Create a New Table Containing an Image
SQL> CREATE TABLE stockphotos (photo_id NUMBER, photographer VARCHAR2(64),
annotation VARCHAR2(255), photo ORDSYS.ORDVir);
Ergebnis:
Column Name
Null?
Type
----------------------------------------------------------------------------------------PHOTO_ID
NUMBER
PHOTOGRAPHER
VARCHAR2(64)
ANNOTATION
VARCHAR2(255)
PHOTO
ADT(2880)
Michael Maduch
85
Image
Add an Image Column to an Existing Table
ALTER TABLE stockphotos ADD (photo ORDSYS.ORDVir);
Retrieve an Image (Simple Read)
DECLARE
image
ORDSYS.ORDVIR;
myid
INTEGER;
BEGIN
-- Select the desired photograph from the stockphotos table.
SELECT photo INTO image FROM stockphotos
WHERE photo_id = myid;
END;
Michael Maduch
86
Image
Retrieve Images Similar to a Comparison Image
- Global color: 0.2
- Local color: 0.3
- Texture: 0.1
- Structure: 0.4
DECLARE
threshold
compare_sig
compare_img
photo_id
photographer
annotation
photo
Michael Maduch
NUMBER;
RAW(2000);
ORDSYS.ORDVir;
NUMBER;
VARCHAR2(64);
VARCHAR2(255);
ORDSYS.ORDVIR;
87
Image
-- Define cursor for matching. Set weights for the visual attributes.
CURSOR getphotos IS
SELECT photo_id, photographer, annotation, photo FROM stockphotos T
WHERE ORDSYS.VIRSimilar(T.photo.Signature, compare_sig,
’globalcolor="0.2" localcolor="0.3" texture="0.1"
structure="0.4"’, threshold)=1;
BEGIN
-- Create BLOB object
SELECT s.photo INTO compare_img FROM stockphotos s
WHERE photo_id = 1;
-- Generate signature of comparison image, which resides in compare_img.
compare_img.Analyze;
compare_sig:= compare_img.signature;
Michael Maduch
88
Image
-- Set the threshold value.
threshold := 25;
-- Retrieve rows for matching images
OPEN getphotos;
LOOP
FETCH getphotos INTO photo_id, photographer, annotation, photo;
EXIT WHEN getphotos%NOTFOUND;
-- Display or store the results.
.
.
END LOOP;
CLOSE getphotos;
END;
Michael Maduch
89
- Quellen
- Oracle8i interMedia audio, image and video User´s
Guide and Reference
- Oracle8i Visual Information Retrieval User´s Guid
and Reference
Michael Maduch
90
Herunterladen