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

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

Petr Chmelař UIFS Multimediální databáze Oracle interMedia Prerekvizity Ukládání Manipulace Web API Dotazování 1 / 28 Multimediální databáze PDB Demonstrační.

Podobné prezentace


Prezentace na téma: "Petr Chmelař UIFS Multimediální databáze Oracle interMedia Prerekvizity Ukládání Manipulace Web API Dotazování 1 / 28 Multimediální databáze PDB Demonstrační."— Transkript prezentace:

1 Petr Chmelař UIFS Multimediální databáze Oracle interMedia Prerekvizity Ukládání Manipulace Web API Dotazování 1 / 28 Multimediální databáze PDB Demonstrační cvičení

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

3 3 Multimediální databáze  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 Bleskový úvod

4 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…

5 Petr Chmelař UIFS Multimediální databáze Oracle interMedia Prerekvizity Ukládání Manipulace Web API Dotazování 5 / 28 Oracle ® interMedia

6 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 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 8 Signature pro správu obsahu obrázků  Barva  Tvar  Textura  Umístění  Signature (3-4kB) je vyrobené segmentací barvy, …

9 Petr Chmelař UIFS Multimediální databáze Oracle interMedia Prerekvizity Ukládání Manipulace Web API Dotazování 9 / 28 Prerekvizity JDBC SQLJ JDeveloper

10 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 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 12 ORDImage 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 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 Petr Chmelař UIFS Multimediální databáze Oracle interMedia Prerekvizity Ukládání Manipulace Web API Dotazování 14 / 28 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 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); rset.next(); 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 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 Petr Chmelař UIFS Multimediální databáze Oracle interMedia Prerekvizity Ukládání Manipulace Web API Dotazování 17 / 28 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 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 19 Download // 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 20 Ukázka 1 (www.fit.vutbr.cz/~chmelarp/pdb/)www.fit.vutbr.cz/~chmelarp/pdb/

21 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 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 23 Upload médií (JSP) id: description: Photo: // JSP import // // 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 24 Ukázka 2 (www.fit.vutbr.cz/~chmelarp/pdb/)www.fit.vutbr.cz/~chmelarp/pdb/

25 Petr Chmelař UIFS Multimediální databáze Oracle interMedia Prerekvizity Ukládání Manipulace Web API Dotazování 25 / 28 Podobnostní vyhledávání download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14302/ch_cbr.htm

26 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 27 Literatura k projektu  Stránky předmětu PDB  Sklad projektu PDB  Oracle Technology Network  interMedia Documentation  interMedia Sample Applications … JAI, JMF, …

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


Stáhnout ppt "Petr Chmelař UIFS Multimediální databáze Oracle interMedia Prerekvizity Ukládání Manipulace Web API Dotazování 1 / 28 Multimediální databáze PDB Demonstrační."

Podobné prezentace


Reklamy Google