Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Multimediální databáze

Podobné prezentace


Prezentace na téma: "Multimediální databáze"— Transkript prezentace:

1 Multimediální databáze
PDB Demonstrační cvičení Koncepty pro sledování chodců

2 Motivace Business Media streaming / on demand ($) Průmysl
CAD/CAM vývoj eVzdělávání Bezpečnost Medicína Rostoucí trend Abstrakt anglicky

3 Multimediální databáze
Bleskový úvod Podpora pro správu multimediálních dat doplněk tradičních databázových systémů Zaručují konzistenci, souběžnost, integritu Bezpečnost a dostupnost dat Manipulace Dotazování a získávání vysoce relevantních informací z obrovských kolekcí produkovaných dat dle popisu obsahu Abstrakt anglicky

4 Multimediální data Nestrukturovaná data: Vizuální 2D obrázky 3D modely
pohyblivé obrázky Dokumenty Audio Kombinace METADATA Exif, ID3, DICOM, MPEG-7… Abstrakt anglicky

5 Oracle® interMedia

6 Oracle® interMedia Rozšíření DB pro uchování, správu a dotazování obrázků, audia, videa a podobných pro libovolné aplikace Podporuje většinu formátů (JPEG, MPEG, QT, RM, …) Manipulace, zpracování obrazu, komprese Pro vývoj aplikací JDeveloper - ADF/UIX, Swing Application server - Servlet / JSP PL/SQL, Oracle Portal Streaming server (RealMedia, MS), … Rozšiřitelný (o zpracování řeči)

7 Oracle® interMedia obsahuje
Zdroj MM + umístění v tabulce (pod transakční kontrolou) na disku, webu, jinde (metainformace) Formát MM velikost, délka, rozlišení, komprese, … Metadata autor, copyright, popis datum, způsob pořízení Exif, IPTC-IIM, DICOM, XMP, libovolné XML U statických obrázků popis obsahu

8 Signature pro správu obsahu obrázků
Barva Tvar Textura Umístění Signature (3-4kB) je vyrobené segmentací barvy, …

9 Prerekvizity JDBC SQLJ JDeveloper

10 Oracle JDeveloper Poslední stabilní, plná, verze Neinstaluje se
Registrace (není pro teroristy :) SQL Developer Připojení Oracle Database 10g host: pcuifs1.fit.vutbr.cz port: 1521 SID: stud password = login

11 JDBC připojení set CLASSPATH=%ORACLE_HOME%\jdbc\lib\ojdbc14.jar; %ORACLE_HOME%\sqlj\lib\runtime12.jar; import java.sql.Connection; import java.sql.SQLException; import java.sql.DriverManager; import java.sql.Statement; import java.sql.PreparedStatement; import java.sql.ResultSet; import oracle.jdbc.OracleResultSet; import oracle.jdbc.OraclePreparedStatement; // register the oracle jdbc driver with the JDBC driver manager DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // connect pcuifs1.fit.vutbr.cz Connection conn = DriverManager.getConnection("jdbc:oracle:thin:login/password" + ); // note: set the autocommit to false for BLOBs (2-phase select-commit). conn.setAutoCommit(false); // create a JDBC Statement object to execute SQL in the database Statement stmt = conn.createStatement();

12 ORDImage OrdImage je objekt, (lepší než) BLOB Společný MM
import oracle.ord.im.OrdImage; import oracle.ord.im.OrdImageSignature; set CLASSPATH=%ORACLE_HOME%\ord\jlib\ordim.jar; OrdImage je objekt, (lepší než) BLOB Společný MM

13 ORDSYS.ORDImage (DB) a OrdImage (Java) objekt
OrdImage je Java objekt OrdImage je proxy pro databázový objekt Musí být vytvořeno z databázového ORDSYS.ORDImage, všechny operace provádí databáze

14 Vkládání obrázků do databáze
CREATE TABLE image_table (id number primary key, image ordsys.ordimage, signature ordsys.ordimagesignature); CREATE SEQUENCE image_sequence INCREMENT BY 1 START WITH 1;

15 Vložení obrázku 1 // retrieve the next value in the sequence order
String SQLquery = "SELECT image_sequence.nextval FROM dual"; OracleResultSet rset = (OracleResultSet)stmt.executeQuery(SQLquery); rset.next(); int nextval = rset.getInt("nextval"); // insert a row (nextval, initialized ORDImage) into image_table SQLquery = "INSERT INTO image_table (id, image, signature) VALUES (" + nextval + ", ordsys.ordimage.init(), ordsys.ordimagesignature.init())"; stmt.execute(SQLquery); // select the new ORDImage into a java proxy OrdImage object (imageProxy) // Note: for update (we will be uploading data into the ORDImage’s BLOB) String rowSelectSQL = "SELECT image, signature FROM image_table WHERE id = " + nextval + " FOR UPDATE"; rset = (OracleResultSet)stmt.executeQuery(rowSelectSQL); OrdImage imageProxy = (OrdImage)rset.getCustomDatum("image", OrdImage.getFactory()); // (OrdImage)rset.getORAData("image", OrdImage.getORADataFactory()); OrdImageSignature signatureProxy = (OrdImageSignature)rset.getCustomDatum("signature", OrdImageSignature.getFactory()); rset.close();

16 Vložení obrázku 2 // load the image data from the goats.gif file into the ORDImage object // Note: and by extension into the database :-) imageProxy.loadDataFromFile(fileName); // automatically detect the image’s height, width, file format, and so on // Note: the proxy object forwards the request to the database to execute ORDImage.setProperties() on the server imageProxy.setProperties(); // generate an image signature for the specified image signatureProxy.generateSignature(imageProxy); String updateSQL = "UPDATE image_table SET image=?, signature=? where id=" + nextval; OraclePreparedStatement opstmt = (OraclePreparedStatement)conn.prepareStatement(updateSQL); opstmt.setCustomDatum(1, imageProxy); opstmt.setCustomDatum(2, signatureProxy); opstmt.execute(); opstmt.close(); // commit all our changes conn.commit();

17 Manipulace a vlastnosti obrázku
// see slide "Vlození obrázku 2" imageProxy.setProperties(); // the image is selected into a proxy object (imageProxy), and then getXY methods are called. String rowSelectSQL = "select image from image_table where id = 1"; OracleResultSet rset = (OracleResultSet)stmt.executeQuery(rowSelectSQL); rset.next(); OrdImage imageProxy = (OrdImage)rset.getORAData("image", OrdImage.getORADataFactory()); rset.close(); int height = imageProxy.getHeight(); int width = imageProxy.getWidth();

18 Konverze obrázků String rowInsertSQL = ("insert into image_table (id, image) " + "values (2, ordsys.ordimage.init())"); // get the source ORDImage object String srcSelectSQL = "select image from image_table where id=1"; ... OrdImage srcImageProxy = (OrdImage)rset.getORAData("image", OrdImage.getORADataFactory()); // get the newly inserted destination ORDImage object String dstSelectSQL = "select image from image_table where id=2 for update"; OrdImage dstImageProxy = (OrdImage)rset.getORAData("image", OrdImage.getORADataFactory()); // call the processCopy method (processing occurs on the SERVER) srcImageProxy.processCopy("maxscale= fileformat=jfif", dstImageProxy); // update the destination image in the second row String dstUpdateSQL = "update image_table set image=? where id=2"; opstmt.setORAData(1, dstImageProxy); // commit download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14297/toc.htm

19 Download Mazání je obyčejné SQL // export the data in row 2
String exportSelectSQL = "select image from image_table where id = 2"; OracleResultSet rset = (OracleResultSet)stmt.executeQuery(exportSelectSQL); // get the proxy for the image in row 2 rset.next(); OrdImage imageProxy = (OrdImage)rset.getORAData("image", OrdImage.getORADataFactory()); rset.close(); // call the getDataInFile method to write the ORDImage in row 2 to disk imageProxy.getDataInFile("row2.jpg"); Mazání je obyčejné SQL DELETE FROM image_table // restore database to its original state - drop image table and sequence stmt.executeQuery("DROP TABLE image_table"); stmt.executeQuery("DROP SEQUENCE image_sequence"); // commit all our changes conn.commit();

20 Ukázka 1 (www.fit.vutbr.cz/~chmelarp/pdb/)

21 Dotazování médií import oracle.ord.im.OrdAudio;
import oracle.ord.im.OrdDoc; import oracle.ord.im.OrdImage; import oracle.ord.im.OrdVideo; String query = "select product_photo, product_audio," + " product_video, product_testimonials from" + " pm.online_media where product_id=3117"; PreparedStatement pstmt = conn.prepareStatement(query); OracleResultSet rset = (OracleResultSet)pstmt.executeQuery(); if ( rset.next() ) { OrdImage imgProxy = (OrdImage)rset.getORAData( "product_photo", OrdImage.getORADataFactory()); OrdAudio audProxy = (OrdAudio)rset.getORAData( "product_audio", OrdAudio.getORADataFactory()); OrdVideo vidProxy = (OrdVideo)rset.getORAData( "product_video", OrdVideo.getORADataFactory()); OrdDoc docProxy = (OrdDoc)rset.getORAData( "product_testimonials", OrdDoc.getORADataFactory()); } String audFormat = audProxy.getFormat(); String vidMimetype = vidProxy.getMimeType();

22 Doručování médií (Servlet)
Je možné použít třídy OrdHttpResponseHandler nebo OrdHttpJspResponsehandler pro doručení HTTP klientovi. import oracle.ord.im.OrdHttpResponseHandler; protected void doGet(HttpServletRequest reqest, HttpServletResponse response) throws ServletException, java.io.IOException { // obtain oracle.ord.im.OrdImage object // imgProxy follows the Section "Media Retrieval in Java" ... // deliver the image data to the browser OrdHttpResponseHandler handler = new OrdHttpResponseHandler(request, response); handler.sendImage(imgProxy); }

23 Upload médií (JSP) <!-- HTML FORM -->
<form action="upload.jsp" method="post" enctype="multipart/form-data"> id: <input type="text" name="id"/> description: <input type="text" name="description"/> Photo: <input type="file" name="photo"/> </form> // JSP import // page import="oracle.ord.im.OrdHttpUploadFormData" %> // page import="oracle.ord.im.OrdHttpUploadFile" %> // In JSP als nächstes folgt muß in den <% %> sein :) OrdHttpUploadFormData formData = new OrdHttpUploadFormData( request ); formData.parseFormData(); // Get the description, location, and photo. String id = formData.getParameter( "id" ); String description = formData.getParameter( "description" ); OrdHttpUploadFile photo = formData.getFileParameter( "photo" ); ... formData.release(); photo.loadImage(imgProxy); // und so veiter update photo... download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14302/ch_websrvtier.htm#sthref135

24 Ukázka 2 (www.fit.vutbr.cz/~chmelarp/pdb/)

25 Podobnostní vyhledávání
download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14302/ch_cbr.htm

26 Vyhledávání dle obsahu
Doporučuji používat IMGSimilar a IMGScore raději než evaluateScore a isSimilar následujícím způsobem: SELECT img1.id, img2.id, ORDSYS.IMGScore(123) as distance FROM image_table img1, image_table img2 WHERE ORDSYS.IMGSimilar(img1.signature, img2.signature, 'color="0.3" texture="0.3" shape="0.3" location="0.1"', 100, 123) = 1 AND img1.id <> img2.id AND img1.id = 1 ORDER BY distance Protože je možné použít index: CREATE INDEX image_index ON image_table(signature) INDEXTYPE IS ordsys.ordimageindex PARAMETERS ('ORDImage_Filter_Tablespace = USER1, ORDImage_Index_Tablespace = USER2') download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14297/ch_imgref.htm

27 Literatura k projektu Stránky předmětu PDB
Sklad projektu PDB Oracle Technology Network interMedia Documentation interMedia Sample Applications JAI, JMF, …

28 Dotazy… ? Organizace projektů… Děkuji. ctrl + S


Stáhnout ppt "Multimediální databáze"

Podobné prezentace


Reklamy Google