Current Page: | Greybox » Authoring » Course ID: medieninformatik » Modules » Module ID: m06 » Learning Units » Unit ID: 1_4_15 |
---|---|
Last Modified: | Tuesday, 2015-05-05 - 08:09:01 |
Tools: | Validate — Preview XML Preview HTML Preview PDF |
Alternative: | Printable HTML |
Title: | Oracle interMedia Fallbeispiel | ||
---|---|---|---|
Abstract: | Zuletzt zeigen wir ein Komplettbeispiel der Realisierung einer Bilddatenbank mit Oracle interMedia. Es werden sowohl die Speicherung, als auch die Suche demonstriert. | ||
Status: | Review II erfüllt. | Version: | 8.0 |
History: |
Codeformatierung sieh erstelus.ppt - Done, please check and remove xIgnore.Done (bt). Acronyme, Absätze und Wordanführungszeichen done. @ Prof. Kosch: Laut Review II Einleitung zu erweitern und Einleitung in ganzen Sätzen. done. Review von Prof. Kosch eingearbeitet. Sourcecode inline gestellt. |
Author 1: | Harald Kosch | E-Mail: | harald.kosch@itec.uni-klu.ac.at |
---|---|---|---|
Author 2: | (empty) | E-Mail: | (empty) |
Author 3: | (empty) | E-Mail: | (empty) |
Author 4: | (empty) | E-Mail: | (empty) |
Author 5: | (empty) | E-Mail: | (empty) |
Organization: | (empty) |
interMedia : komplettes Beispiel1Auto
Erstellung des BildverzeichnissesCREATE DIRECTORY IMGDIR AS 'C:\'; Erstellung der BildtabelleCREATE TABLE buecher ( id INTEGER PRIMARY KEY, isbn INTEGER, titel VARCHAR2(30), autor VARCHAR2(30), preis INTEGER, inhalt VARCHAR2(200), foto ORDSYS.ORDImage, foto_sig ORDSYS.ORDImageSignature ); EinfügeprozessEinfügen eines Buches und Initiierung des BildelementsDECLARE img ORDSYS.ORDImage; sig ORDSYS.ORDImageSignature; ctx RAW(4000):= NULL; BEGIN INSERT INTO buecher (id, isbn, titel, autor, preis, inhalt, foto, foto_sig) VALUES(1, 3544651, 'Java, die Referenz', 'David Flanagan', 60, 'Java-Klassen', ORDSYS.ORDImage.init('file', 'IMGDIR', 'Sample.jpg'), ORDSYS.ORDImageSignature.init() ); Laden des Bildes und die Generierung der SignaturSELECT B.foto, B.foto_sig INTO img, sig FROM buecher B WHERE B.id = 1 FOR UPDATE; img.import(ctx); sig.generateSignature(img); UPDATE buecher B SET B.foto = img, B.foto_sig = sig WHERE B.id = 1; END; Überprüfung der MetadatenDECLARE buch_id Integer; bild ORDSYS.ORDImage; buchtitel varchar2(30); getData BOOLEAN; BEGIN SELECT id, titel, foto INTO buch_id, buchtitel, bild FROM buecher WHERE id = 1; dbms_output.put_line(' Id : ' || buch_id || ' - Titel : '|| buchtitel); getData := bild.checkProperties(); IF getData THEN dbms_output.put_line('Höhe: '|| bild.getHeight()); dbms_output.put_line('Breite: '|| bild.getWidth()); dbms_output.put_line('MIME-Typ: '|| bild.getMimeType()); dbms_output.put_line('Dateiformat: '|| bild.getFileFormat()); dbms_output.put_line('Größe: '|| TO_CHAR(bild.getContentLength())); END IF; END; ÄhnlichkeitssucheDeklarierung eines CURSORsDECLARE
grenzwert NUMBER;
vergleich_sig ORDSYS.ORDImageSignature;
ergebnis_foto ORDSYS.ORDIMAGE;
id_foto INTEGER;
titel_foto VARCHAR2(30);
CURSOR rech_fotos IS
SELECT B.id, B.foto
FROM buecher B
WHERE ORDSYS.IMGSimilar(B.foto_sig, vergleich_sig,
'color="0,6" texture="0,2" shape="0,1" location="0,1"',
grenzwert)=1;
BEGIN -- Auswahl des Bildes, das als Vergleichsbasis dient SELECT B.foto_sig INTO vergleich_sig FROM buecher B WHERE B.id = 1; grenzwert := 30.0; -- Ähnlichkeitssuche OPEN rech_fotos; LOOP FETCH rech_fotos INTO id_foto, ergebnis_foto; EXIT WHEN rech_fotos%NOTFOUND; -- Ausgabe des Ergebnisses dbms_output.put_line(id_foto); END LOOP; CLOSE rech_fotos; END; Kombinierte AbfrageSELECT Q.id, Q.titel, Q.foto.getCompressionFormat() FROM buecher Q, buecher E WHERE E.id=1 AND ORDSYS.IMGSimilar(Q.foto_sig, E.foto_sig, 'color=1', 50.0)=1 AND Q.foto.getWidth() > 32 AND Q.foto.getContentLength() > 10000; 2AutoIm Folgenden wird ein komplettes Anwendungsbeispiel zur Erläuterung der Funktionalität von interMedia präsentiert. Es wird eine Bücherdatenbank erstellt, die zusätzlich zu Attributen wie ISBN-Nummer, Autor und Preis auch ein Foto des Buches enthält. Nach dem Einfügen eines Buches und der Initiierung des Bildelementes wird die Signatur des Bildes erstellt. Nach der Signaturgenerierung ist es nun möglich, Metadaten wie Höhe, Breite oder Dateiformat des Bildes abzufragen und spezielle Ähnlichkeitsanfragen durchzuführen. Umfangreiche Code-Beispiele beschreiben das praktische Arbeiten mit Oracle interMedia. Für die Erstellung der Bücherdatenbank muss ein Bildverzeichnis angelegt werden (Benutzer: system): Erstellung des BildverzeichnissesCREATE DIRECTORY IMGDIR AS 'C:\'; Erstellung der BildtabelleIm folgenden SQL402-Statement wird eine Tabelle "buecher" angelegt, mit dem Primärschlüssel "id", und mehreren Attributen (isbn, titel, autor, preis, inhalt). Außerdem gibt es ein Attribut "foto", mit dem Datentyp ORDSYS.ORDImage, und die dazugehörige Signatur des Bildes. Erstellung der BildtabelleCREATE TABLE buecher ( id INTEGER PRIMARY KEY, isbn INTEGER, titel VARCHAR2(30), autor VARCHAR2(30), preis INTEGER, inhalt VARCHAR2(200), foto ORDSYS.ORDImage, foto_sig ORDSYS.ORDImageSignature ); EinfügeprozessEinfügeprozess: Am Beginn werden einige Variablen deklariert, die später für das Importieren des Bildes und die Generierung der Signatur benötigt werden. Außerdem wird der erste Datensatz in die Datenbank eingefügt. Das Bild soll aus dem Bildverzeichnis IMGDIR sein und hat den Namen "Sample.jpg". Durch den Aufruf von ORDImageSignature.init() wird eine Signatur erstellt. Einfügen eines Buches und Initiierung des BildelementsDECLARE img ORDSYS.ORDImage; sig ORDSYS.ORDImageSignature; ctx RAW(4000):= NULL; BEGIN INSERT INTO buecher (id, isbn, titel, autor, preis, inhalt, foto, foto_sig) VALUES(1, 3544651, 'Java, die Referenz', 'David Flanagan', 60, 'Java-Klassen', ORDSYS.ORDImage.init('file', 'IMGDIR', 'Sample.jpg'), ORDSYS.ORDImageSignature.init() ); AutoDurch die folgenden Anweisungen wird das Bild geladen und die dazugehörige
Signatur des Bildes generiert. Laden des Bildes und die Generierung der SignaturSELECT B.foto, B.foto_sig INTO img, sig FROM buecher B WHERE B.id = 1 FOR UPDATE; AutoDanach wird das Bild importiert und die dazugehörige Signatur generiert: Generierung der Signaturimg.import(ctx); sig.generateSignature(img); AutoAm Schluss müssen nur noch das importierte Bild und die generierte Signatur des Datensatzes upgedatet werden. UpdateUPDATE buecher B SET B.foto = img, B.foto_sig = sig WHERE B.id = 1; END; Überprüfung der MetadatenDECLARE buch_id Integer; bild ORDSYS.ORDImage; buchtitel varchar2(30); getData BOOLEAN; BEGIN SELECT id, titel, foto INTO buch_id, buchtitel, bild FROM buecher WHERE id = 1; dbms_output.put_line(' Id : ' || buch_id || ' - Titel : '|| buchtitel); getData := bild.checkProperties(); IF getData THEN dbms_output.put_line('Höhe: '|| bild.getHeight()); dbms_output.put_line('Breite: '|| bild.getWidth()); dbms_output.put_line('MIME-Typ: '|| bild.getMimeType()); dbms_output.put_line('Dateiformat: '|| bild.getFileFormat()); dbms_output.put_line('Größe: '|| TO_CHAR(bild.getContentLength())); END IF; END; ÄhnlichkeitssucheÄhnlichkeitssuche: Deklarierung eines CURSORsDECLARE
grenzwert NUMBER;
vergleich_sig ORDSYS.ORDImageSignature;
ergebnis_foto ORDSYS.ORDIMAGE;
id_foto INTEGER;
titel_foto VARCHAR2(30);
CURSOR rech_fotos IS
SELECT B.id, B.foto
FROM buecher B
WHERE ORDSYS.IMGSimilar(B.foto_sig, vergleich_sig,
'color="0,6" texture="0,2" shape="0,1" location="0,1"',
grenzwert)=1;
Ähnlichkeitssuche (Fortsetzung)Hier wird ein Bild ausgewählt, das als Vergleichsbasis dienen soll, ein Grenzwert festgesetzt, und dann die Ähnlichkeitssuche durchgeführt. Der zuvor deklarierte Cursor wird jetzt dazu verwendet, um die Datensätze auszuwählen. Als Ergebnis wird die ID der ähnlichen Fotos ausgegeben. Ähnlichkeitssuche (Fortsetzung)BEGIN -- Auswahl des Bildes, das als Vergleichsbasis dient SELECT B.foto_sig INTO vergleich_sig FROM buecher B WHERE B.id = 1; grenzwert := 30.0; -- Ähnlichkeitssuche OPEN rech_fotos; LOOP FETCH rech_fotos INTO id_foto, ergebnis_foto; EXIT WHEN rech_fotos%NOTFOUND; -- Ausgabe des Ergebnisses dbms_output.put_line(id_foto); END LOOP; CLOSE rech_fotos; END; Kombinierte AbfrageBei der kombinierten Abfrage wird die Suche durch mehrere Angaben eingeschränkt. Im folgenden Beispiel wird nicht nur die Ähnlichkeit der Bilder verglichen, sondern auch die Breite des Bildes und die Größe des Bildes werden eingeschränkt: Kombinierte AbfrageSELECT Q.id, Q.titel, Q.foto.getCompressionFormat() FROM buecher Q, buecher E WHERE E.id=1 AND ORDSYS.IMGSimilar(Q.foto_sig, E.foto_sig, 'color=1', 50.0)=1 AND Q.foto.getWidth() > 32 AND Q.foto.getContentLength() > 10000; AutoEinschränkungen der Ergebnismenge können wie gewohnt in der Where-Klausel des SQL-Statements mit UND- oder ODER-Verknüpfung angegeben werden. Bibliographie2AutoKos04 Dun03 |
(empty) |