Der Präsentation

Werbung
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
Herunterladen