Multimdis adatbzisok Szeminriumi elads 2011 prilis 4 Adatbzisok
Multimédiás adatbázisok Szemináriumi előadás 2011. április 4.
Adatbázisok Áttekintés a Cosmin Stoica Sphaiu: A multimedia database server: Implementations and functions c. cikke alapján. A cikk a képek tárolása és feldolgozásával foglalkozik. Elemzett multimédiás megoldások: My. SQL Microsoft SQL Server Oracle Saját
My. SQL A multimédiás adatok egyetlen tárolási módja a BLOB. TINYBLOB MEDIUMBLOB LONGBLOB Nincsenek speciális függvények a multimédiás tartalmak kezelésére. Csak olyan lekérdezések hathatóak végre, amelyeket „normál” SQL segítségével megtehetünk.
Microsoft SQL Server A multimédiás adatokat két módon is lehet tárolni: Külső szerveren: ilyenkor az adatbázisban csak a tartalom elérési útját tároljuk. Az adatbáziban: VARBINARY típusú oszlopokban tárolható. Maximális méret 2 GB. Nincsenek multimédiás tartalmakat kezelő függvények. A tartalmak megtekintéséhez és kezeléséhez külső programokra van szükség.
Oracle Az Oracle a multimédiás tartalmak kezelése során megvalósítja a tartalmakra vonatkozó szabványokat. Képek esetén: ISO/IEC 13249 -5: 2001 SQL/MM Part 5: Still Image Standard Objektumokként kezeli a multimédiás anyagokat: ORDImage ORDVideo ORDAudio
Oracle A tartalmak kezelésére viszonylag sok függvény áll a felhasználó rendelkezésére. Nagy hátránya: drága, így a kisebb cégek számára nem jelenthet megoldást.
Oracle multimédia Az Oracle multimédia három típusú multimédiás tartalom kezelésére alkalmas: Audio Kép Videó Mindhárom típushoz tartoznak saját – de hasonló – metódusok, amelyek segítségével a tartalmak kezelhetőek. Részletesebben a képek kezeléséről lesz szó.
Oracle multimédia Az Oracle a képeket két módon is tudja tárolni: Binary Large Object (BLOB) ORDImage objektum A képes tartalmakat kezelő függvények használatának érdekében ez utóbbit célszerű használni. Ebben az esetben egyszerű tábla tulajdonképpen két oszlopból állhat. Ennek ellenére a képek összes jellemző adata könnyen kezelhető.
Oracle multimédia
Oracle multimédia Amennyiben egy ORDImage objektumot szeretnénk egy táblába elhelyezni, akkor először meg kell hívnunk az objektum init() metódusát. Paraméterek nélkül: csak inicializálja az új elem helyét. Paraméterekkel: el is helyezi az elemet a táblába. A kép beszúrása előtt el kell azt helyeznünk a szerver megfelelő könyvárába. A táblába illesztés az objektum import. From() metódusával történik.
Oracle multimédia Kép importja: create or replace procedure photos 2_import(dest_id number, descript varchar 2, filename varchar 2) is img ordsys. ordimage; ctx raw(64) : = null; begin insert into photos 2 (id, description, image) values (dest_id, descript, ordsys. ordimage. init()) returning image into img; img. import. From(ctx, 'file', 'VBA_DIR', filename); update photos 2 set image=img where id=dest_id; end;
Oracle multimédia Kép exportja: create or replace procedure image_export (source_id number, filename varchar 2) as img. Src ordsys. ordimage; ctx raw(64) : = null; begin select image into img. Src from photos 2 where id=source_id; img. Src. export(ctx, 'FILE', ‚VBA_DIR', filename); end;
Oracle multimédia Az ORDImage objektumok adatait azok metódusaival lehet kezelni. Ezek közül néhány: copy() get. Compression. Format() get. Height() process. Copy() get. Metadata() put. Metadata()
Oracle multimedia A get… függvények arra szolgálnak, hogy az obejektumok – azaz a képek -, tárolt adatait lekérdezzük. A metaadatokat is le tudjuk kérdezni a get. Metadata() segítségével. A copy segítségével készíthetünk másolatot az objektumunkról. A process() a képek manipulációját biztosítja.
Oracle multimédia Kép magasságának lekérdezése: select id, ph. image. getheight() from photos 2 ph Fileforma, tartalom formájának lekérdezése: select id, ph. image. getfileformat(), ph. image. getcontentformat(), ph. image. getcompressionformat() from photos 2 ph
Oracle Multimédia Oracle inter. Media fileformátumok: Oracle tartalmi formátum (pl. ):
Oracle multimédia A process() és process. Copy() függvények arra szolgálnak, hogy manipulálni tudjuk a képeket. Néhány példa manipulációra: scale rotate contentformat fileformat
Oracle multimédia create or replace procedure f 4_2_image_process. Copy(source_id number, verb varchar 2) is img. Src ordsys. ordimage; img. Dst ordsys. ordimage; begin update album set result=ordsys. ordimage. init() where id=source_id; select pic into img. Src from album where id=source_id; select result into img. Dst from album where id=source_id for update; img. Src. process. Copy(verb, img. Dst); update album set result=img. Dst where id=source_id; end;
Oracle multimédia Kép átméretezése: call f 4_2_image_processcopy(1, 'scale=0. 5') Kép forgatása: call f 4_2_image_processcopy(1, 'rotate=90') Szürkeskálássá alakítás: call f 4_2_image_processcopy(1, 'contentformat=8 bitgray')
Oracle Multimédia A metaadatok lekérdezésére a get. Metadata() függvény szolgál. A metaadatok tárolására négyféle szabvány létezik, melyeket az Oracle támogat: Ordimage: az objektum „saját” metaadatai. EXIF: jellemzően a fényképezők által szolgáltatott metaadatok IPTC XMP: az Adobe által „kitalált” szabvány, amely tulajdonképpen egy RDF leírás. Közös jellemzőjük, hogy az adatokat XML formátumban tárolják.
Oracle multimédia Az Oracle támogatja az XML adatok tárolását XMLType típus használatával. Az XMLType-nak is saját függvényei vannak, amelyek segítségével a tárolta adatokon műveleteket végezhetünk. Egy ilyen függvény az extract(), amely XMLType típusú adatokból tudja kinyerni a benne tárolt információkat. A kép meta információit a következő lépésekben nyerhetjük ki: get. Metadata() segítségvel az ORDImage objektumból megszerezzük a metaadatokat. extract() segítségével az XLMType-ból kiolvassuk az XML-t.
Oracle multimédia create or replace procedure extractmetadata_photos 2(in. ID in integer) is img ordsys. ordimage; metav XMLSequence. Type; meta_root varchar 2(40); xml. ORD XMLType; xml. XMP XMLType; xml. EXIF XMLType; xml. IPTC XMLType; begin select image into img from photos 2 where id= in. ID; metav : = img. get. Metadata('ALL');
Oracle multimédia for i in 1. . metav. count() LOOP meta_root : = metav(i). get. Root. Element(); CASE meta_root WHEN 'ord. Image. Attributes' THEN xml. ORD : = metav(i); WHEN 'xmp. Metadata' THEN xml. XMP : = metav(i); WHEN 'iptc. Metadata' THEN xml. IPTC : = metav(i); WHEN 'exif. Metadata' THEN xml. EXIF : = metav(i); ELSE NULL; END CASE; END LOOP; UPDATE photos 2 SET meta. ORDImage = xml. ORD, meta. EXIF = xml. EXIF, meta. IPTC = xml. IPTC, meta. XMP = xml. XMP WHERE id = inid; END extract. Metadata_photos 2;
Oracle multimédia select ph. id, ph. description, ph. metaordimage. extract('/') meta from photos 2 ph
Oracle multimédia Meta. ORDimage
Oracle multimédia iptc xmp
Oracle multimédia EXIF
Oracle multimédia Az Oracle inter. Media segítségével megtehető, hogy a képek között tartalmi alapú kereséseket végezzünk. Az ilyen jellegű feladatok végrehajtásához ORDImage. Signature. Type típusú objektumok használatára van szükség. Saját metódusaik: init() evaluate. Score() generate. Signature() is. Similar()
Oracle multimédia A függvények alkalmazása során a képek négy jellemzőjét vehetjük figyelembe: Színhisztogram Textúra Alakzatok elhelyezkedése Alakzatok formája
Oracle multimédia generate. Signature() Feladata, hogy egy ORDImage objektum szignatúráját előállítsa. create or replace procedure sig_calc_photos 2(dest_id number) is sign ordsys. ordimagesignature; img ordsys. ordimage; begin update photos 2 set sig=ordsys. ordimagesignature. init() where id=dest_id; select sig, image into sign, img from photos 2 where id=dest_id for update; sign. generate. Signature(img); update photos 2 set sig=sign where id=dest_id; end;
Oracle multimédia evaluate. Score() Feladata, hogy két ORDImage. Signatura objektumról megállapítsa a „hasonlósági távolságot”. A felsorolt négy paraméter közül tetszőlegeseket lehet figyelembe venni a távolság számításánál, amelyeket súlyozhatunk is [0, 1] számokkal. Az eredmény a két objektum távolsága lesz, melyet egy [0, 100] érték reprezentál.
Oracle multimédia create or replace procedure evaluate. Score_photos 2(id 1 number, id 2 number, verb varchar 2) is sig 1 ordsys. ordimagesignature; sig 2 ordsys. ordimagesignature; score float; begin select sig into sig 1 from photos 2 where id=id 1; select sig into sig 2 from photos 2 where id=id 2; score: =ordsys. ordimagesignature. evaluatescore(sig 1, sig 2, verb); dbms_output. put_line('Score is ' || score); end;
Oracle multimédia A példákban az alábbi két képet hasonlítjuk össze.
Oracle multimédia Összehasonlítás csak színek alapján: call evaluatescore_photos 2(2, 3, 'color=1. 0') Score is 2, 92833 Összehasonlítás csak textúra alapján: call evaluatescore_photos 2(2, 3, 'texture=1. 0') Score is , 1992 Összehasonlítás forma és elhelyezkedés alapján: call evaluatescore_photos 2(2, 3, 'shape=1. 0 location=1. 0') Score is 15, 8149 Több paraméter súlyozva: call evaluatescore_photos 2(2, 3, 'color=0. 8 shape=0. 8 location=0. 2') Score is 9, 8685
Oracle multimédia is. Similar() Feladata azt megadni, hogy két kép hasonló-e. Gyakorlatilag ugyanaz, mint az előző függvény, de megadható egy küszöbérték, amely alatt hasonlónak tekinthető a két kép. Kimenő értékek: 0: nem hasonló 1: hasonló
Oracle multimédia create or replace procedure is. Similar_photos 2(id 1 number, id 2 number, verb varchar 2, score float) is sig 1 ordsys. ordimagesignature; sig 2 ordsys. ordimagesignature; similar integer; begin select sig into sig 1 from photos 2 where id=id 1; select sig into sig 2 from photos 2 where id=id 2; similar: =ordsys. ordimagesignature. issimilar(sig 1, sig 2, verb, score); dbms_output. put_line('Similar is ' || similar); end;
Oracle multimédia call evaluatescore_photos 2(2, 3, 'color=0. 8 shape=0. 8 location=0. 2') Score is 9, 8685 call is. Similar_photos 2(2, 3, 'color=0. 8 shape=0. 8 location=0. 2', 10) Similar is 1 call is. Similar_photos 2(2, 3, 'color=0. 8 shape=0. 8 location=0. 2', 7) Similar is 0
Oracle multimédia Egy táblában egy példaképhez hasonló képek keresése az előző függvényekkel könnyen elvégezhető. create or replace procedure similars 1(s_id number, verb varchar 2) is sig 1 ordsys. ordimagesignature; sig 2 ordsys. ordimagesignature; score float; id 1 number; descript varchar 2(200); img ordsys. ordimage; cursor photos is select id, description, image, sig from photos 2;
Oracle multimédia begin select sig into sig 1 from photos 2 where id=s_id; open photos; loop fetch photos into id 1, descript, img, sig 2; exit when photos%NOTFOUND; score: =ordsys. ordimagesignature. evaluatescore(sig 1, sig 2, verb); dbms_output. put_line('ID: ' || id 1 || 'Decription: ' || descript || 'Score: ' || score); end loop; close photos; end;
Oracle multimédia call similars 1(2, 'color=1'); ID: 5 Decription: gryllus Score: 74, 856 ID: 2 Decription: Kaszas Attila Score: 0 ID: 3 Decription: Kaszas Attila tukor Score: 2, 92833 ID: 1 Decription: Haumann Peter Score: 74, 4967 ID: 4 Decription: Gryllus Dorka Score: 74, 856 ID: 6 Decription: gryllus Score: 74, 856 ID: 7 Decription: hortobagy Score: 33, 2272
Oracle multimédia create or replace procedure similars 2(s_id number, verb varchar 2, score float) is sig 1 ordsys. ordimagesignature; sig 2 ordsys. ordimagesignature; similar float; sim varchar 2(10); id 1 number; descript varchar 2(200); img ordsys. ordimage; cursor photos is select id, description, image, sig from photos 2;
Oracle multimédia begin select sig into sig 1 from photos 2 where id=s_id; open photos; loop fetch photos into id 1, descript, img, sig 2; exit when photos%NOTFOUND; similar: =ordsys. ordimagesignature. is. Similar(sig 1, sig 2, verb, score); if similar=1 then sim: ='true'; else sim: ='false'; end if; dbms_output. put_line('ID: ' || id 1 || ' Decription: ' || descript || ' similar: ' || sim); end loop; close photos; end;
Oracle multimédia call similars 2(2, 'color=0. 8 shape=0. 8 location=0. 2', 10); ID: 5 Decription: gryllus similar: false ID: 2 Decription: Kaszas Attila similar: true ID: 3 Decription: Kaszas Attila tukor similar: true ID: 1 Decription: Haumann Peter similar: false ID: 4 Decription: Gryllus Dorka similar: false ID: 6 Decription: gryllus similar: false ID: 7 Decription: hortobagy similar: false
- Slides: 43