2017 Oracle Multimedia 12c – Apex Integration – Mit Bildern arbeiten MIT ORACLE MULTIMEDIA BILDER IN DER DATENBANK BEARBEITEN UND IN APEX DARSTELLEN Gunther Pippèrr © 2016 http://www.pipperr.de Seite 1 Gunther Pippèrr - IT-Architekt - Berater Background Selected Experience Gunther Pippèrr arbeitet seit mehr als 19 Jahre intensiv mit den Produkten der Firma Oracle im Bereich Datenbanken/Applikationsserver und Dokumenten-Management und seit 4 Jahren mit Oracle Primavera. ▪ ▪ ▪ Herr Pippèrr hat sich tiefes Wissen über den Aufbau komplexer IT Architektur aneignen können und hat dieses in der Praxis erfolgreich umgesetzt. Herr Pippèrr hat eine Abschluss als Dipl. Ing. Technische Informatik (FH) an der FH Weingarten. Functional Expertise • IT System Architekt • Technische Projektleitung • Design und Implementierung von Datenbank Anwendungen • Entwurf und Umsetzung von IT Infrastrukturen zum Datenmanagement Administration und Wartung von Oracle Datenbank Umgebungen Datenbank Architekt für ein Projekt zur Massendatenverarbeitung in der Telekommunikation Betrieb und technische Projektverantwortung für IT Infrastrukturprojekte, z.B.: ▪ Unterstützung beim Betrieb der Datenbank Umgebung für das größte deutsche Kunden Bindungsprogramm ▪ Zentrale Datenhaltung für Münchner Hotelgruppe mit über 25 Hotels weltweit, ▪ Redundante Cluster Datenbank Infrastrukturen für diverse größere Web Anwendungen wie Fondplattform und Versicherungsportale Industry Expertise • • • • • High-Tech Real Estate Utility Communications Pharm. ▪ Architekt und technische Projektverantwortung für ein Smart Metering Portal für das Erfassen von Energiezählerdaten und Asset Management ▪ Architekt und Projektleitung , Datenbank Design und Umsetzung für die Auftragsverwaltung mit Steuerung von externen Mitarbeitern für den Sprachdienstleister von deutschen Technologiekonzern Ich bin Ihr Partner für komplexe Oracle Projekte und unterstütze Sie gerne Gunther Pippèrr © 2016 http://www.pipperr.de Seite 2 Agenda 1 Oracle Multimedia Übersicht 2 Audio Daten speichern / ausgeben 3 Bilder in der Datenbank bearbeiten 4 Bilder in Apex suchen und anzeigen 5 Bilder vergleichen / durchsuchen Gunther Pippèrr © 2016 http://www.pipperr.de Seite 3 Lizenz – Oracle Multimedia Option 12c Allgemeiner Tenor : In allen DB Editionen verfügbar 10g http://docs.oracle.com/cd/B19306_01/appdev.102/b14302/ch_intr.htm Für 11g und 12c keinen vergleichbaren Eintrag in der Doku zu finden Gunther Pippèrr © 2016 http://www.pipperr.de Seite 4 Vorraussetzung (1) ▪ Oracle Multimedia Option installieren – Wie ? => Siehe https://docs.oracle.com/database/121/IMURG/ap_instl_upgr d.htm – Benötigt die JAVAVM, XDB, XML DB Optionen – Legt die folgenden User an • ORDSYS • ORDPLUGINS ( hier können eigene Erweiterungen abgelegt werden) • SI_INFORMTN_SCHEMA • ORDDATA • MDSYS - Oracle Multimedia Locatorset Default in Standard Edition Gunther Pippèrr © 2016 http://www.pipperr.de Seite 5 Vorraussetzung (2) ▪ Prüfen, ob die Option auch korrekt installiert wurde SYS>execute sys.validate_ordim; PL/SQL procedure successfully completed. SYS>select version, status from dba_registry where comp_id='ORDIM'; VERSION STATUS ------------------------------------------------- -------12.1.0.2.0 VALID Gunther Pippèrr © 2016 http://www.pipperr.de Seite 6 Einsatz – Audio und Video Daten speichern ▪ Audio und Video Daten – Eigenschaften wie Encoding Type, Play time etc. auswerten – Meta Daten in den Datenformaten auslesen Gunther Pippèrr © 2016 http://www.pipperr.de Seite 7 Einsatz – Bilder speichern und verarbeiten – Meta Daten (wie EXIF) Informationen auslesen – Bilder bearbeiten • Wie die Größe ändern, das Bild drehen, den Kontrast setzen etc. – Bilder vergleichen Feature Übersicht http://www.oracle.com/technetwork/database/database-technologies/multimedia/overview/multimedia11gr2-featover-128418.pdf Gunther Pippèrr © 2016 http://www.pipperr.de Seite 8 Architektur Oracle DB JVM Media Parser Image Processor JAI Oracle Database Audio ORDAudio Table Image - ORDImage Daten in der DB Speicherung in Objekt Typen External Filestore BFILE = externe Speicherung möglich Gunther Pippèrr © 2016 http://www.pipperr.de Seite 9 Objekt Relationaler Ansatz (1) ▪ ▪ ▪ ▪ Bild Daten Audio Daten Heterogene Daten Video Daten => ORDImage => ORDAudio => ORDDoc => ORDVideo Vorteil: • Daten und Eigenschaften über ein Objekt ansprechbar • Schlankes Datenmodel Nachteil: • Laderoutienen etwas komplexer • Gefahr von Bugs • Das eigentliche Bild muss für andere Tools immer extrahiert werden Gunther Pippèrr © 2016 http://www.pipperr.de Seite 10 Objekt Relationaler Ansatz (2) Abstract superclass ORDMulitMedia ORDSource Media data ORDImage ORDAudio Gunther Pippèrr © 2016 http://www.pipperr.de ORDDoc ORDVideo Seite 11 Plugin Konzept ▪ Über ein Context Objekt kann wird das Plugin für die Verarbeitung refernziert werden – Bei vielen Methoden muss daher ein Context Objekte (Datentyp RAW(64)) immer mit übergeben werden ▪ Plugins können auch User defined erweitert werden Gunther Pippèrr © 2016 http://www.pipperr.de Seite 12 Einsatz – Audio Daten in der DB Speichern ▪ Datentyp ORDSYS.ORDAudio – Was wird erkannt: (Methode getAllAttributes ) • WAV Beispiel: format=WAVE,mimeType=audio/x-wav,encoding=MP3 ,numberOfChannels=1,samplingRate=11025,sampleSize=NULL ,compressionType=MP3,audioDuration=NULL • MP3 format=MPGA,mimeType=audio/mpeg,encoding=LAYER3 ,numberOfChannels=2,samplingRate=44100,sampleSize=NULL ,compressionType=LAYER3,audioDuration=297 Gunther Pippèrr © 2016 http://www.pipperr.de Seite 13 Lade Routine mit Auslesen der Metadaten Leeres Objekt initialiseren Einlesen Als BFILE mit “FILE” Demo Gunther Pippèrr © 2016 http://www.pipperr.de Seite 14 Integration APEX ▪ Nativ in der Datenbank nur “download und Play” Mode – Kein integrierter Streaming Server in der DB per Default ▪ => Ganz Datei wird ausliefern und dann ausgeben Gunther Pippèrr © 2016 http://www.pipperr.de Seite 15 Datei ausgeben Inhalt in ein Temporäres Lob kopieren Gunther Pippèrr © 2016 http://www.pipperr.de Seite 16 HTML 5 Features nützen! ▪ Audio Tag z.B. Region mit Static Content Im Beispiel als Static File eingebunden Shared Components => Static Application Files Gunther Pippèrr © 2016 http://www.pipperr.de Seite 17 Video - ORDVideo ▪ Metadaten in der DB auswerten ▪ Apex Integration => HTML 5 VIDEO Tag nützen Gunther Pippèrr © 2016 http://www.pipperr.de Seite 18 Einsatz – Bild Daten verarbeiten ▪ Aufgabe – Speichern und Verarbeiten von Bildern – – – – – – In der Datenbank speichern Meta Informationen auslesen Preview erzeugen Mit dynamischen Wasserzeichen im Web anzeigen Größe ändern, drehen, Kontrast einstellen Vergleichen von Bildern über Score Werte Gunther Pippèrr © 2016 http://www.pipperr.de Seite 19 Der Typ ORDSYS.ORDImage ▪ Objektorientierter Ansatz – Bilder in einer Tabelle speichern – Methoden, um Bilder zu manipulieren SOURCE HEIGHT METHOD -----STATIC FUNCTION INIT RETURNS ORDIMAGE ..... MEMBER FUNCTION GETWIDTH RETURNS NUMBER ... STATIC PROCEDURE EXPORT ..... Gunther Pippèrr © 2016 http://www.pipperr.de Direkt auf den BLOB in den Objeckt zugreifen ( Nur wenn Local gespeichert! ) Seite 20 Umgebung in der DB einrichten ▪ Notwendige User Berechtigungen -- create the user create user conbook identified by conbook default tablespace USERS temporary tablespace TEMP; alter user conbook quota unlimited on USERS; grant connect, resource to conbook; ▪ Für Batch Load ein DB Directory anlegen -- create the info Archive DIRECTORY create or replace directory IMG_ARCHIVE as 'C:\entwicklung\work\OracleMultiMedia\99-Images'; grant read,write on directory IMG_ARCHIVE to conbook; Gunther Pippèrr © 2016 http://www.pipperr.de Seite 21 Anlegen des Image Stores ▪ Tabelle anlegen CREATE TABLE CONBOOK.CON_IMAGES ( ID ,name ,remarks ,img ,preview NUMBER(13) VARCHAR2(256) NOT NULL VARCHAR2(4000) ORDSYS.ORDIMAGE ORDSYS.ORDIMAGE ) LOB(img.source.localData) STORE AS SECUREFILE LOB(preview.source.localData) STORE AS SECUREFILE ; Speichern der Original Daten in der Datenbank Gunther Pippèrr © 2016 http://www.pipperr.de Seite 22 Tabelle Image Store im Batch Load füllen ▪ Laderoutine für local storage – Objekt initalisieren – Importieren mit importFrom() – Update in der Datenbank b Gunther Pippèrr © 2016 http://www.pipperr.de Bild in der DB speichern Seite 23 Preview Image erzeugen ▪ Bild bearbeiten – Referenz auf das Bild holen ( zuvor mit ORDSYS.ORDImage.init() anlegt!) – Bild mit “processCopy” bearbeiten – Update in der Datenbank In der DB Bild bearbeiten b Metadaten bei Bedarf entfernen! Gunther Pippèrr © 2016 http://www.pipperr.de Seite 24 In APEX einbinden – Ein Bild darstellen ▪ Bild darstellen – Page Item „Display Image“ erzeugen – BLOB refenzieren – SQL für das Page Item hinterlegen mit Referenz auf den BLOB über “ORDImage.source.localData” b Gunther Pippèrr © 2016 http://www.pipperr.de Seite 25 In Apex einbinden – Bilder Liste darstellen (1) ▪ Interaktive Report – SQL für die Berichtsabfrage erstellen • Enthält NICHT das Bild ansich in der Ergebnismenge sondern die Größe des Bildes! In der eigentlichen Berichtsabfrage darf nicht der BLOB des Bildes, sondern die Größe des Bildes muss referenziert werden! Gunther Pippèrr © 2016 http://www.pipperr.de Seite 26 In Apex einbinden – Bilder Liste darstellen (2) ▪ Interaktive Report – Spaltentype einstellen – In View BLOB zur Verfügung stellen create or replace view v_con_images_blob as SELECT ID , NAME , REMARKS , img.img.source.localData IMG , img.PREVIEW.source.localData as PREVIEW , img.img.getMimetype() mimetype FROM CON_IMAGES img / Gunther Pippèrr © 2016 http://www.pipperr.de Seite 27 In Apex einbinden – Bilder über Web laden ▪ Per Default View APEX_APPLICATION_TEMP_FILES ab Apex 5 für Upload von Dateien in Verwendung – Page Item vom Typ „File Browse“ anlegen – Submit Button auf der Page anlegen ( Action „Submit Page“) – PL/SQL code für den „After Submit“ Process der Apex Seite für das Umkopieren des Bilds in unsere eigene Struktur hinterlegen • Bilddaten aus der „apex_application_temp_files“ auslesen • Einlesen in unsere eigene Struktur mit ORDImage • Löschen aus der „apex_application_temp_files“ Für das spätere Suchen hier auch die Metadaten aus den Bildern gleich mit extrahieren Gunther Pippèrr © 2016 http://www.pipperr.de Seite 28 Beispiel (1) Demo Gunther Pippèrr © 2016 http://www.pipperr.de Seite 29 Beispiel (2) Demo Gunther Pippèrr © 2016 http://www.pipperr.de Seite 30 Bilder bearbeiten ▪ ORDImage.process – => Bild auslesen, bearbeiten und im gleichen Objekt auch wieder speichern ▪ ORDImage.processCopy – => Bild auslesen und bearbeiten und in ein zuvor initalisiten Objekt einfügen Image Processing Operators contrast cut flip gamma mirror nometadata Gunther Pippèrr © 2016 http://www.pipperr.de quantize rotate Scaling Operators sharpen tiled transparencyFillColor Seite 31 Bild bearbeiten - ORDImage.process (1) ▪ Bearbeitungskommando wird als Werteliste übergeben ▪ Beispiele: Nicht in einen Schritt kombinierbar! – Bild auf 126 Pixel skalieren – keine Metadaten übertragen maxScale=126 126 nometadata – Rotieren in Uhrzeigersinn – Grad Rotate=90.0 – Bildauschnitt ausschneiden – X Y WEITE HÖHE (x,y)= (0 0) cut 500 500 1200 1200 Gunther Pippèrr © 2016 http://www.pipperr.de Seite 32 Bild bearbeiten - ORDImage.process (1) – Dateiformat ändern in BMPF, CALS, GIFF, JFIF, PBMF, PGMF, PICT, PNGF, PNMF,PPMF, RASF, RPIX, TGAF, TIFF, WBMP Kann bei jeden Operator mit angeben werden – Kompremierung einstellen fileFormat=JFIF CompressionQuality=MAXINTEGRITY fileFormat=JFIF CompressionQuality=50 – Metadaten wegelassen nometadata Gunther Pippèrr © 2016 http://www.pipperr.de Seite 33 Aufruf über Apex Gunther Pippèrr © 2016 http://www.pipperr.de Demo Seite 34 ORDSYS.ORDImage.applyWatermark einsetzen Ab Oracle 11g R2 Eingesetzt für die Fehlerbehandlung Gunther Pippèrr © 2016 http://www.pipperr.de Seite 35 Problem mit ORDImage.applyWatermark ▪ Das Problem nach ein paar Aufrufen ERROR: ORA-29400: data cartridge error IMG-00003: exhausted memory while processing image IMG-003: out of memory in (native) awt jpeg decode ▪ Lösung – Dummy Operation mit einem weiteren ORDImage Objekte um den Java Stack wieder aufzuräumen Gunther Pippèrr © 2016 http://www.pipperr.de Seite 36 Bilder vergleichen ▪ Signatur Bild 1 ermitteln ▪ Signatur Bild 2 ermittlen ▪ Signaturen vergleichen – Dazu die unterschiedlichen Eigenschaften entsprechend in Bildbereichen (location) gewichten • Color • Texture • Shape ▪ Ergebniss interpretieren Gunther Pippèrr © 2016 http://www.pipperr.de Seite 37 Bilder vergleichen ▪ Sore Werte zwischen 0 und 100 werden ermittelt aus der Gewichtung von Color / Texture und Shape Unterschied wird größer => 100 weighted_sum = color_weight * color_distance + texture_weight * texture_distance + shape_weight * shape_distance IMG 2 weighted_sum Texture Score IMG 2 0 IMG 1 Color Score 100 Unterschied wird größer => Wie Bilder vergleichen? Gunther Pippèrr © 2016 http://www.pipperr.de Seite 38 Bilder vergleichen / suchen ▪ Mit dem Object “ORDSYS.ORDImageSignature” Bilder Signaturen vergleichen ▪ Parameter Gewichtung der Unterschiede ▪ z.b. „color="0.4",texture="0.10",shape="0.3", location="0.2“” ▪ In SQL Abfragen in der Where Bedingung mit “ORDSYS.ORDImageSignature.ISSIMILAR(v_i1_img_ sig, rec.signature, “parameter”, threshold)” abfragen – weighted_sum > threshold = 1 ansonsten 0 Gunther Pippèrr © 2016 http://www.pipperr.de Seite 39 Beispiel eines Vergleichs Demo Gunther Pippèrr © 2016 http://www.pipperr.de Seite 40 Fazit – Einsatz von Oracle Multimedia ▪ Ein Top Feature der Oracle Datenbank ▪ Einfach in die APEX Welt integrierbar ▪ Leider immer noch mit ein paar Bugs behaftet, gut testen und gleich Bug eröffnen! ▪ Bildervergleich nicht mehr zeitgemäss implemtiert – Externe Logik verwenden .-(j Gunther Pippèrr © 2016 http://www.pipperr.de Seite 41 Fragen Bilder mit Oracle Mulitmedia verarbeiten Gunther Pippèrr © 2016 http://www.pipperr.de Seite 42 Quellen ▪ Oracle Dokumentation und Support Portal ▪ https://www.pipperr.de/dokuwiki/doku.php?id=prog:ora cle_multimedia_12c ▪ Wieder mal eine andere Script Library – https://orapowershell.codeplex.com/ ▪ Bildmaterial : https://pixabay.com Gunther Pippèrr © 2016 http://www.pipperr.de Seite 43