Multimediln databze Oracle inter Media Prerekvizity Multimediln databze
Multimediální databáze Oracle inter. Media Prerekvizity Multimediální databáze PDB Demonstrační cvičení Ukládání Manipulace Web API Dotazování Petr Chmelař UIFS 1
Motivace o Business n Media streaming / on demand ($) o Průmysl n CAD/CAM vývoj o e. Vzdělávání o Bezpečnost o Medicína o … o Rostoucí trend 2
Multimediální databáze Bleskový úvod o Podpora pro správu multimediálních dat n doplněk tradičních databázových systémů o Zaručují konzistenci, souběžnost, integritu o Bezpečnost a dostupnost dat o Manipulace o Dotazování a získávání vysoce relevantních informací z obrovských kolekcí produkovaných dat n dle popisu n obsahu http: //www. fit. vutbr. cz/~chmelarp/pdb/ 3
Multimediální data Nestrukturovaná data: o Vizuální n 2 D obrázky n 3 D modely n pohyblivé obrázky n Dokumenty o Audio o Kombinace METADATA Exif, ID 3, DICOM, MPEG-7… 4
Multimediální databáze Oracle inter. Media ® Oracle inter. Media Prerekvizity Ukládání Manipulace Web API Dotazování Petr Chmelař UIFS www. oracle. com/technology/products/intermedia/ 5 / 28
Oracle inter. Media ® o Rozšíření DB pro uchování, správu a dotazování obrázků, audia, videa a podobných pro libovolné aplikace o Podporuje většinu formátů (JPEG, MPEG, QT, RM, …) o Manipulace, zpracování obrazu, komprese o Pro vývoj aplikací n JDeveloper - ADF/UIX, Swing n Application server - Servlet / JSP n PL/SQL, Oracle Portal n Streaming server (Real. Media, MS), … o Rozšiřitelný (o zpracování řeči) www. oracle. com/technology/ 6
Oracle inter. Media obsahuje ® o Zdroj MM + umístění n v tabulce (pod transakční kontrolou) n na disku, webu, jinde (metainformace) o Formát MM n velikost, délka, rozlišení, komprese, … o Metadata n autor, copyright, popis n datum, způsob pořízení n Exif, IPTC-IIM, DICOM, XMP, libovolné XML o U statických obrázků popis obsahu www. oracle. com/pls/db 102/portal_db? selected=7 7
Signature pro správu obsahu obrázků o Barva o Tvar o Textura o Umístění o Signature (3 -4 k. B) je vyrobené segmentací barvy, … 8
Multimediální databáze Prerekvizity Oracle inter. Media JDBC Prerekvizity SQLJ Ukládání Manipulace Web API JDeveloper Dotazování Petr Chmelař UIFS www. oracle. com/technology/sample_code/products/intermedia/ 9 / 28
Oracle JDeveloper o Poslední stabilní, plná, verze o Neinstaluje se o Registrace (není pro teroristy : ) www. oracle. com/technology/software/products/jdev/ o SQL Developer www. oracle. com/technology/software/products/sql/ o Připojení Oracle Database 10 g 10 n host: pcuifs 1. fit. vutbr. cz n port: 1521 n SID: stud n password = login
JDBC připojení set CLASSPATH=%ORACLE_HOME%jdbclibojdbc 14. jar; %ORACLE_HOME%sqljlibruntime 12. jar; import import java. sql. Connection; java. sql. SQLException; java. sql. Driver. Manager; java. sql. Statement; java. sql. Prepared. Statement; java. sql. Result. Set; oracle. jdbc. Oracle. Prepared. Statement; // register the oracle jdbc driver with the JDBC driver manager Driver. Manager. register. Driver(new oracle. jdbc. driver. Oracle. Driver()); // connect pcuifs 1. fit. vutbr. cz Connection conn = Driver. Manager. get. Connection("jdbc: oracle: thin: login/password" + "@pcuifs 1. fit. vutbr. cz: 1521: stud" ); // note: set the autocommit to false for BLOBs (2 -phase select-commit). conn. set. Auto. Commit(false); // create a JDBC Statement object to execute SQL in the database Statement stmt = conn. create. Statement(); 11
ORDImage import oracle. ord. im. Ord. Image; import oracle. ord. im. Ord. Image. Signature; set CLASSPATH=%ORACLE_HOME%ordjlibordim. jar; Ord. Image je objekt, (lepší než) BLOB Společný MM 12
ORDSYS. ORDImage (DB) a Ord. Image (Java) objekt o Ord. Image je Java objekt o Ord. Image je proxy pro databázový objekt o Musí být vytvořeno z databázového ORDSYS. ORDImage, všechny operace provádí databáze 13
Multimediální databáze Vkládání obrázků do databáze Oracle inter. Media Prerekvizity Ukládání Manipulace Web API CREATE TABLE image_table (id number primary key, image ordsys. ordimage, signature ordsys. ordimagesignature); CREATE SEQUENCE image_sequence INCREMENT BY 1 START WITH 1; Dotazování Petr Chmelař UIFS 14 / 28
Vložení obrázku 1 // retrieve the next value in the sequence order String SQLquery = "SELECT image_sequence. nextval FROM dual"; Oracle. Result. Set rset = (Oracle. Result. Set)stmt. execute. Query(SQLquery); rset. next(); int nextval = rset. get. Int("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 Ord. Image object (image. Proxy) // Note: for update (we will be uploading data into the ORDImage’s BLOB) String row. Select. SQL = "SELECT image, signature FROM image_table WHERE id = " + nextval + " FOR UPDATE"; rset = (Oracle. Result. Set)stmt. execute. Query(row. Select. SQL); rset. next(); Ord. Image image. Proxy = (Ord. Image)rset. get. Custom. Datum("image", Ord. Image. get. Factory()); // (Ord. Image)rset. get. ORAData("image", Ord. Image. get. ORAData. Factory()); Ord. Image. Signature signature. Proxy = (Ord. Image. Signature)rset. get. Custom. Datum("signature", Ord. Image. Signature. get. Factory()); rset. close(); 15
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 : -) image. Proxy. load. Data. From. File(file. Name); // 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. set. Properties() on the server image. Proxy. set. Properties(); // generate an image signature for the specified image signature. Proxy. generate. Signature(image. Proxy); String update. SQL = "UPDATE image_table SET image=? , signature=? where id=" + nextval; Oracle. Prepared. Statement opstmt = (Oracle. Prepared. Statement)conn. prepare. Statement(update. SQL); opstmt. set. Custom. Datum(1, image. Proxy); opstmt. set. Custom. Datum(2, signature. Proxy); opstmt. execute(); opstmt. close(); // commit all our changes conn. commit(); 16
Multimediální databáze Manipulace a vlastnosti obrázku // see slide "Vlození obrázku 2" image. Proxy. set. Properties(); Oracle inter. Media Prerekvizity Ukládání Manipulace Web API Dotazování // the image is selected into a proxy object (image. Proxy), and then get. XY methods are called. String row. Select. SQL = "select image from image_table where id = 1"; Oracle. Result. Set rset = (Oracle. Result. Set)stmt. execute. Query(row. Select. SQL); rset. next(); Ord. Image image. Proxy = (Ord. Image)rset. get. ORAData("image", Ord. Image. get. ORAData. Factory()); rset. close(); int height = image. Proxy. get. Height(); int width = image. Proxy. get. Width(); Petr Chmelař UIFS 17 / 28
Konverze obrázků String row. Insert. SQL = ("insert into image_table (id, image) " + "values (2, ordsys. ordimage. init())"); // get the source ORDImage object String src. Select. SQL = "select image from image_table where id=1"; . . . Ord. Image src. Image. Proxy = (Ord. Image)rset. get. ORAData("image", Ord. Image. get. ORAData. Factory()); // get the newly inserted destination ORDImage object String dst. Select. SQL = "select image from image_table where id=2 for update"; . . . Ord. Image dst. Image. Proxy = (Ord. Image)rset. get. ORAData("image", Ord. Image. get. ORAData. Factory()); // call the process. Copy method (processing occurs on the SERVER) src. Image. Proxy. process. Copy("maxscale=100 fileformat=jfif", dst. Image. Proxy); // update the destination image in the second row String dst. Update. SQL = "update image_table set image=? where id=2"; opstmt. set. ORAData(1, dst. Image. Proxy); // commit download-uk. oracle. com/docs/cd/B 19306_01/appdev. 102/b 14297/toc. htm 18
Download // export the data in row 2 String export. Select. SQL = "select image from image_table where id = 2"; Oracle. Result. Set rset = (Oracle. Result. Set)stmt. execute. Query(export. Select. SQL); // get the proxy for the image in row 2 rset. next(); Ord. Image image. Proxy = (Ord. Image)rset. get. ORAData("image", Ord. Image. get. ORAData. Factory()); rset. close(); // call the get. Data. In. File method to write the ORDImage in row 2 to disk image. Proxy. get. Data. In. File("row 2. jpg"); Mazání je obyčejné SQL DELETE FROM image_table // restore database to its original state - drop image table and sequence stmt. execute. Query("DROP TABLE image_table"); stmt. execute. Query("DROP SEQUENCE image_sequence"); // commit all our changes conn. commit(); 19
Ukázka 1 (www. fit. vutbr. cz/~chmelarp/pdb/) 20
Dotazování médií import oracle. ord. im. Ord. Audio; oracle. ord. im. Ord. Doc; oracle. ord. im. Ord. Image; oracle. ord. im. Ord. Video; String query = "select product_photo, product_audio, " + " product_video, product_testimonials from" + " pm. online_media where product_id=3117"; Prepared. Statement pstmt = conn. prepare. Statement(query); Oracle. Result. Set rset = (Oracle. Result. Set)pstmt. execute. Query(); if ( rset. next() ) { Ord. Image img. Proxy = (Ord. Image)rset. get. ORAData( "product_photo", Ord. Image. get. ORAData. Factory()); Ord. Audio aud. Proxy = (Ord. Audio)rset. get. ORAData( "product_audio", Ord. Audio. get. ORAData. Factory()); Ord. Video vid. Proxy = (Ord. Video)rset. get. ORAData( "product_video", Ord. Video. get. ORAData. Factory()); Ord. Doc doc. Proxy = (Ord. Doc)rset. get. ORAData( "product_testimonials", Ord. Doc. get. ORAData. Factory()); } String aud. Format = aud. Proxy. get. Format(); String vid. Mimetype = vid. Proxy. get. Mime. Type(); 21
Doručování médií (Servlet) Je možné použít třídy Ord. Http. Response. Handler nebo Ord. Http. Jsp. Responsehandler pro doručení HTTP klientovi. import oracle. ord. im. Ord. Http. Response. Handler; protected void do. Get(Http. Servlet. Request reqest, Http. Servlet. Response response) throws Servlet. Exception, java. io. IOException { // obtain oracle. ord. im. Ord. Image object // img. Proxy follows the Section "Media Retrieval in Java". . . // deliver the image data to the browser Ord. Http. Response. Handler handler = new Ord. Http. Response. Handler(request, response); handler. send. Image(img. Proxy); } 22
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. Ord. Http. Upload. Form. Data" %> // <%@ page import="oracle. ord. im. Ord. Http. Upload. File" %> // In JSP als nächstes folgt muß in den <% %> sein : ) Ord. Http. Upload. Form. Data form. Data = new Ord. Http. Upload. Form. Data( request ); form. Data. parse. Form. Data(); // Get the description, location, and photo. String id = form. Data. get. Parameter( "id" ); String description = form. Data. get. Parameter( "description" ); Ord. Http. Upload. File photo = form. Data. get. File. Parameter( "photo" ); . . . form. Data. release(); photo. load. Image(img. Proxy); // und so veiter update photo. . . download-uk. oracle. com/docs/cd/B 19306_01/appdev. 102/b 14302/ch_websrvtier. htm#sthref 135 23
Ukázka 2 (www. fit. vutbr. cz/~chmelarp/pdb/) 24
Multimediální databáze Podobnostní vyhledávání Oracle inter. Media Prerekvizity Ukládání Manipulace Web API Dotazování Petr Chmelař UIFS download-uk. oracle. com/docs/cd/B 19306_01/appdev. 102/b 14302/ch_cbr. htm 25 / 28
Vyhledávání dle obsahu Doporučuji používat IMGSimilar a IMGScore raději než evaluate. Score a is. Similar následujícím způsobem: SELECT img 1. id, img 2. id, ORDSYS. IMGScore(123) as distance FROM image_table img 1, image_table img 2 WHERE ORDSYS. IMGSimilar(img 1. signature, img 2. signature, 'color="0. 3" texture="0. 3" shape="0. 3" location="0. 1"', 100, 123) = 1 AND img 1. id <> img 2. id AND img 1. 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 = USER 1, ORDImage_Index_Tablespace = USER 2') download-uk. oracle. com/docs/cd/B 19306_01/appdev. 102/b 14297/ch_imgref. htm 26
Literatura k projektu o Stránky předmětu PDB o Sklad projektu PDB http: //www. fit. vutbr. cz/~chmelarp/pdb/ o Oracle Technology Network www. oracle. com/technology/ o inter. Media Documentation www. oracle. com/pls/db 102/portal_db? selected=7 o inter. Media Sample Applications www. oracle. com/technology/sample_code/products/intermedia/ … http: //java. sun. com/javase/6/docs/technotes/guides/imageio/ JAI, JMF, … 27
Dotazy… ? Organizace projektů… Děkuji. 28 ctrl + S
- Slides: 28