Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Multimédiás adatbázisok Szemináriumi előadás 2011.április 4.

Hasonló előadás


Az előadások a következő témára: "Multimédiás adatbázisok Szemináriumi előadás 2011.április 4."— Előadás másolata:

1 Multimédiás adatbázisok Szemináriumi előadás 2011.április 4.

2 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: MySQL Microsoft SQL Server Oracle Saját

3 MySQL A multimédiás adatok egyetlen tárolási módja a BLOB. TINYBLOB BLOB 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.

4 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 2GB. 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.

5 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 :2001 SQL/MM Part 5: Still Image Standard Objektumokként kezeli a multimédiás anyagokat: ORDImage ORDVideo ORDAudio

6 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. Később folytatjuk.

7 „Saját” megoldás Az általuk készített szerver próbálja ötvözni a pozitív tulajdonságokat. Megfelelően tudja kezelni a képeket. Lehessen olyan képekre vonatkozó lekérdezéseket végrehajtani, amelyek tartalmi információkon alapulnak. Legyen olcsó, azaz minél szélesebb körben használható. Megvalósult? A cikk szerint szabadalmaztatás alatt van. Nem találtam meg a kész megoldást, és cikkek sem hivatkoznak rá.

8 „Saját” megoldás A fejlesztés C++ segítségével történt. Cél volt egy olyan megoldás megalkotása, amely nem kíván a felhasználóktól túl sok új ismeretet: A standard SQL-en alapuljanak a lekérdezések. A képi tartalmi lekérdezések szerkezete egyszerű legyen. A felépítést modulárisan képzelték el, mivel így könnyebben kezelhetőek a feladatok.

9 „Saját” megoldás Elvi vázlat:

10 „Saját” megoldás Main modul: A klienssel tartja a kapcsolatot. Fogadja a lekérdezéseket. Feldolgozza azokat, majd meghatározza, hogy melyik modulokat kell meghívni a kérés végrehajtásához. Processing modul: Kinyeri a paramétereket a lekérdezésből. Ennek megfelelő adatokat keres az adatbázisfile-okban.

11 „Saját” megoldás Characteristics Extraction Module: Akkor lép működésbe, amikor olyan képeket tartalmazó lekérdezés érkezik, amely még nem szerepel az adatbáziban. Kinyeri a szín és textura információkat a képből. Database Files Manager: Ez a modul férhet hozzá a file-okhoz. A modul biztosítja az egyes file-okhoz tartozó lock-ok kezelését is.

12 „Saját” megoldás Az adatbázisban elérhető fontosabb funkciók: create database use database create table alter table select * from table selectImage from table drop delete

13 „Saját”megoldás Mivel a cikk írásakor kísérleti megoldást készítettek így viszonylag kevés típust implementáltak: integer double varchar image

14 „Saját” megoldás SelectImage: selectImage * from Patients where age>50 and picture like queryimage

15 „Saját” megoldás Képek hasonlóságára két jellemzőt használ: Textura információk Színhisztogram A lekérdezések során ezek külön-külön vagy együtt is használhatóak. Amennyiben mind a két jellemzőt használjuk, akkor a két jellemző által szolgáltatott hasonlósági mértékek számtani közepe lesz a végleges hasonlósági mérték.

16 „Saját” megoldás - tesztelés A megoldás jóságát a következő két jellemző alapján tesztelték:

17 „Saját” megoldás - tesztelés Az adatbázisban 170 fénykép található a következő eloszlásban: Polip: 75 kép Gyulladás: 30 kép Rectocolite: 29 kép Tumor: 36 kép Olyan képeket szerettek volna visszakapni, amelyekhez a diagnózis „gyulladás”. A tesztelés során mind a két jellemzőt használták. Tesztelés: ld. Cikk.

18 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ó.

19 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 egy egyszerű tábla tulajdonképpen két oszlopból állhat. Ennek ellenére a képek összes jellemző adata könnyen kezelhető.

20 Oracle multimédia

21 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 importFrom() metódusával történik.

22 Oracle multimédia create or replace procedure photos2_import(dest_id number, descript varchar2, filename varchar2) is img ordsys.ordimage; ctx raw(64) := null; begin insert into photos2 (id, description, image) values (dest_id, descript, ordsys.ordimage.init()) returning image into img; img.importFrom(ctx, 'file', 'VBA_DIR', filename); update photos2 set image=img where id=dest_id; end; Kép importja:

23 Oracle multimédia Kép exportja: create or replace procedure image_export (source_id number, filename varchar2) as imgSrc ordsys.ordimage; ctx raw(64) := null; begin select image into imgSrc from photos2 where id=source_id; imgSrc.export(ctx, 'FILE', ‚VBA_DIR', filename); end;

24 Oracle multimédia Az ORDImage objektumok adatait azok metódusaival lehet kezelni. Ezek közül néhány: copy() getCompressionFormat() getHeight() process() processCopy() getMetadata() putMetadata()

25 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 getMetadata() 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.

26 Oracle multimédia Kép magasságának lekérdezése: select id, ph.image.getheight() from photos2 ph Fileforma, tartalom formájának lekérdezése: select id, ph.image.getfileformat(), ph.image.getcontentformat(), ph.image.getcompressionformat() from photos2 ph

27 Oracle Multimédia Oracle interMedia fileformátumok: Oracle tartalmi formátum (pl.):

28 Oracle multimédia A process() és processCopy() függvények arra szolgálnak, hogy manipulálni tudjuk a képeket. Néhány példa maninpulációra: scale rotate contentformat fileformat

29 Oracle multimédia create or replace procedure f4_2_image_processCopy(source_id number, verb varchar2) is imgSrc ordsys.ordimage; imgDst ordsys.ordimage; begin update album set result=ordsys.ordimage.init() where id=source_id; select pic into imgSrc from album where id=source_id; select result into imgDst from album where id=source_id for update; imgSrc.processCopy(verb, imgDst); update album set result=imgDst where id=source_id; end;

30 Oracle multimédia call f4_2_image_processcopy(1,'scale=0.5') call f4_2_image_processcopy(1,'rotate=90') call f4_2_image_processcopy(1,'contentformat=8bitgray') Kép átméretezése: Kép forgatása: Szürkeskálássá alakítás:

31 Oracle Multimédia A metaadatok lekérdezésére a getMetadata() 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.

32 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: getMetadata() segítségvel az ORDImage objektumból megszerezzük a metaadatokat. extract() segítségével az XLMType-ból kiolvassuk az XML-t.

33 Oracle multimédia create or replace procedure extractmetadata_photos2(inID in integer) is img ordsys.ordimage; metav XMLSequenceType; meta_root varchar2(40); xmlORD XMLType; xmlXMP XMLType; xmlEXIF XMLType; xmlIPTC XMLType; begin select image into img from photos2 where id= inID; metav := img.getMetadata('ALL');

34 Oracle multimédia for i in 1..metav.count() LOOP meta_root := metav(i).getRootElement(); CASE meta_root WHEN 'ordImageAttributes' THEN xmlORD := metav(i); WHEN 'xmpMetadata' THEN xmlXMP := metav(i); WHEN 'iptcMetadata' THEN xmlIPTC := metav(i); WHEN 'exifMetadata' THEN xmlEXIF := metav(i); ELSE NULL; END CASE; END LOOP; UPDATE photos2 SET metaORDImage = xmlORD, metaEXIF = xmlEXIF, metaIPTC = xmlIPTC, metaXMP = xmlXMP WHERE id = inid; END extractMetadata_photos2;

35 Oracle multimédia select ph.id, ph.description, ph.metaordimage.extract('/') meta from photos2 ph

36 Oracle multimédia MetaORDimage

37 Oracle multimédia iptcxmp

38 Oracle multimédia EXIF

39 Oracle multimédia Az Oracle interMedia 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 ORDImageSignatureType típusú objektumok használatára van szükség. Saját metódusaik: init() evaluateScore() generateSignature() isSimilar()

40 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 Az egyes jellemzők számításáról bővebb információt nem találtam.

41 Oracle multimédia generateSignature() Feladata, hogy egy ORDImage objektum szignatúráját előállítsa. create or replace procedure sig_calc_photos2(dest_id number) is sign ordsys.ordimagesignature; img ordsys.ordimage; begin update photos2 set sig=ordsys.ordimagesignature.init() where id=dest_id; select sig, image into sign, img from photos2 where id=dest_id for update; sign.generateSignature(img); update photos2 set sig=sign where id=dest_id; end;

42 Oracle multimédia evaluateScore() Feladata, hogy két ORDImageSignatura 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.

43 Oracle multimédia create or replace procedure evaluateScore_photos2(id1 number, id2 number, verb varchar2) is sig1 ordsys.ordimagesignature; sig2 ordsys.ordimagesignature; score float; begin select sig into sig1 from photos2 where id=id1; select sig into sig2 from photos2 where id=id2; score:=ordsys.ordimagesignature.evaluatescore(sig1, sig2, verb); dbms_output.put_line('Score is ' || score); end;

44 Oracle multimédia A példákban az alábbi két képet hasonlítjuk össze.

45 Oracle multimédia Összehasonlítás csak színek alapján: call evaluatescore_photos2(2, 3, 'color=1.0')Score is 2,92833 Összehasonlítás csak textúra alapján: call evaluatescore_photos2(2, 3, 'texture=1.0')Score is,1992 Összehasonlítás forma és elhelyezkedés alapján: call evaluatescore_photos2(2, 3, 'shape=1.0 location=1.0') Score is 15,8149 Több paraméter súlyozva: call evaluatescore_photos2(2, 3, 'color=0.8 shape=0.8 location=0.2') Score is 9,8685

46 Oracle multimédia isSimilar() 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ó

47 Oracle multimédia create or replace procedure isSimilar_photos2(id1 number, id2 number, verb varchar2, score float) is sig1 ordsys.ordimagesignature; sig2 ordsys.ordimagesignature; similar integer; begin select sig into sig1 from photos2 where id=id1; select sig into sig2 from photos2 where id=id2; similar:=ordsys.ordimagesignature.issimilar(sig1, sig2, verb, score); dbms_output.put_line('Similar is ' || similar); end;

48 Oracle multimédia call evaluatescore_photos2(2, 3, 'color=0.8 shape=0.8 location=0.2') Score is 9,8685 call isSimilar_photos2(2, 3, 'color=0.8 shape=0.8 location=0.2', 10) Similar is 1 call isSimilar_photos2(2, 3, 'color=0.8 shape=0.8 location=0.2', 7) Similar is 0

49 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 similars1(s_id number, verb varchar2) is sig1 ordsys.ordimagesignature; sig2 ordsys.ordimagesignature; score float; id1 number; descript varchar2(200); img ordsys.ordimage; cursor photos is select id, description, image, sig from photos2;

50 Oracle multimédia begin select sig into sig1 from photos2 where id=s_id; open photos; loop fetch photos into id1, descript, img, sig2; exit when photos%NOTFOUND; score:=ordsys.ordimagesignature.evaluatescore(sig1, sig2, verb); dbms_output.put_line('ID: ' || id1 || 'Decription: ' || descript || 'Score: ' || score); end loop; close photos; end;

51 Oracle multimédia call similars1(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

52 Oracle multimédia create or replace procedure similars2(s_id number, verb varchar2, score float) is sig1 ordsys.ordimagesignature; sig2 ordsys.ordimagesignature; similar float; sim varchar2(10); id1 number; descript varchar2(200); img ordsys.ordimage; cursor photos is select id, description, image, sig from photos2;

53 Oracle multimédia begin select sig into sig1 from photos2 where id=s_id; open photos; loop fetch photos into id1, descript, img, sig2; exit when photos%NOTFOUND; similar:=ordsys.ordimagesignature.isSimilar(sig1, sig2, verb, score); if similar=1 then sim:='true'; else sim:='false'; end if; dbms_output.put_line('ID: ' || id1 || ' Decription: ' || descript || ' similar: ' || sim); end loop; close photos; end;

54 Oracle multimédia call similars2(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


Letölteni ppt "Multimédiás adatbázisok Szemináriumi előadás 2011.április 4."

Hasonló előadás


Google Hirdetések