Academia.eduAcademia.edu
Cơ sở dữ liệu đa phương tiện: Oracle Multimedia Võ Tấn Khoaa *, Phan Thế Duyb ** Học Viên Cao Học, ĐH Công Nghệ Thông Tin ĐH Quốc Gia TP HCM,Ngành CNTT, MSHV: CH1301094 Học Viên Cao Học, ĐH Công Nghệ Thông Tin ĐH Quốc Gia TP HCM,Ngành CNTT, MSHV: CH1302006 a b Tóm tắt Mục đích của bài báo là tìm hiểu đặc điểm, tính chất của cơ s dữ liệu (CSDL) đa ph ơng tiện, tập trung vào cấu trúc cơ bản và nguyên lý làm việc của Oracle trên cơ s dữ liệu đa ph ơng tiện tiện nh hình ảnh, audio, video; đi vào trọng điểm là cách thức l u trữ xử lý đối t ợng dữ liệu hình ảnh. Mục tiêu là nắm bắt các kiểu dữ liệu đa ph ơng tiện hỗ trợ đồng th i khai thác cách sử dụng các hàm, các ph ơng thức của Oracle Multimedia (Oracle interMedia) để xây dựng các ứng dụng về l u trữ, xử lý các dữ liệu đa ph ơng. Song song với việc bao quát các đặc điểm, cấu trúc và tính năng các ph ơng thức của Oracle Multimedia (OM) trên các kiểu dữ liệu đa ph ơng tiện, bài báo sẽ đ a ra những đánh giá về khả năng hỗ trợ của Oracle so với nhu cầu, đòi hỏi cần có của một CSDL đa ph ơng tiện. Keywords: Oracle interMedia; multimedia database; CSDL đa ph ơng tiện, oracle multimedia database; Oracle 10g 1. Mở đầu Sự bùng nổ khối l ợng lớn các kiểu dữ liệu đa dạng dẫn đến nhu cầu l u trữ xử lý dữ liệu ngày càng tăng. Đặc biệt, với tính chất dữ liệu lớn và khó xử lý, thao tác hơn của các loại dữ liệu đa ph ơng tiện nh hình ảnh, âm thanh, video trong rất nhiều loại ứng dụng mới đặt ra vấn đề cần có một CSDL có khả năng hỗ trợ mạnh mẽ việc l u trữ và xử lý trên loại dữ liệu này. Với sự ra phát hành phiên bản Oracle 10g, hệ quản trị cơ s dữ liệu Oracle cung cấp tính năng Oracle interMedia, đư có thể thao tác với dữ liệu đa ph ơng tiện đáp ứng nhu cầu l u trữ, xử lý phân tích các dạng dữ liệu đa ph ơng tiện của ng i dùng. Trong nội dung bài trình bày này, nhóm chúng tôi sẽ đ a ra một cái nhìn tổng quan về các dạng kiểu dữ liệu khác nhau đ ợc dùng để l u trữ dữ liệu đa ph ơng tiện, cũng nh cách thức hoạt động của những ph ơng thức, các hàm xử lý dữ liệu đa ph ơng tiện đ ợc hỗ trợ b i Oracle khi thao tác trên những kiểu dữ liệu này. 2. Các yêu cầu của một hệ quản trị CSDL đa phương tiện Dữ liệu sinh ra ngày càng nhiều, không chỉ bao gồm dữ liệu số, chuỗi mà còn cả dữ liệu có cấu trúc, không có cấu trúc và đặc biệt là dữ liệu đa ph ơng tiện (văn bản, hình ảnh, video, audio,…): - Một số l ợng lớn ảnh và video trên Internet phát sinh mới hàng ngày, hàng gi . - Rất nhiều tranh vẽ, ảnh chụp đang đ ợc chuyển sang dạng số để dễ xử lý, bảo quản. - Các bức ảnh từ bản tin truy vấn và trên báo cũng đang đ ợc chuyển sang dạng số để dễ dàng quản lý. - L ợng lớn ảnh y tế, ảnh vệ tinh đang đ ợc thu thập hàng ngày. Các đặc trưng của CSDL đa phương tiện: Do CSDL đa ph ơng tiện là sự tổng hợp của nhiều dữ liệu đa ph ơng tiện khác nhau nên nó có những đặc tr ng nổi bật nh sau: - Thiếu cấu trúc (lack of structure): CSDL đa ph ơng tiện th ng không có cấu trúc, do đó các tác vụ chuẩn trên CSDL truyền thống nh chỉ số hóa, tìm kiếm nội dung, truy xuất dữ liệu có thể không thực hiện đ ợc. - Tính th i gian (temporality): một vài kiểu dữ liệu multimedia nh là video, âm thanh (audio), hoạt hình (animation) đều phụ thuộc vào yếu tố th i gian liên quan mật thiết đến việc l u trữ, thao tác và mô tả chúng. - Dung l ợng l u trữ lớn (massive volume): các dữ liệu video và âm thanh th ng đòi hỏi các thiết bị l u trữ có dung l ợng lớn. - Các ứng dụng, cơ chế hỗ trợ (logistics): các kiểu dữ liệu phi chuẩn có thể đòi hỏi các quy trình, công cụ xử lý phức tạp nh việc sử dụng các thuật toán nén dữ liệu đối với các ứng dụng CSDL đa ph ơng tiện. * Tel.:+84985.144.476 E-mail address: khoavt@uit.edu.vn ** Tel.:+84168.3456.056 E-mail address: phantheduy.ptd@gmail.com 1 Võ Tấn Khoa, Phan Thế Duy Hiện tại, không phải bất kì loại CSDL nào cũng hỗ trợ đầy đủ việc l u trữ và rút trích thông tin trên tất cả những dạng dữ liệu vừa đề cập. Thông qua một hệ quản trị CSDL, chúng ta phải đạt đ ợc mục đích có thể tổ chức cấu trúc dữ liệu để l u trữ và đảm bảo khả năng xử lý, truy vấn, thực hiện giao dịch đồng th i các khối dữ liệu lớn một cách hiệu quả. Tuy nhiên, nếu chúng ta muốn l u trữ và thực hiện các truy vấn xử lý bao gồm cả kiểu dữ liệu đa ph ơng tiện, thì một CSDL sẽ gặp một số tr ngại nhất định nh : khối l ợng rất lớn và đa dạng, dữ liệu đa ph ơng tiện có cấu trúc hoàn toàn khác so với các kiểu cấu trúc dữ liệu cơ bản, và nó không thích hợp với việc truy vấn, tìm kiếm một cách rõ ràng dựa trên nội dung. Do đó, cũng t ơng tự nh các hệ CSDL cơ bản thông th ng, một hệ quản trị CSDL đa ph ơng tiện cần đáp ứng đ ợc một số yêu cầu nh sau: - Đầy đủ các khả năng của một hệ quản trị CSDL truyền thống. - Khả năng l u trữ lớn: các đối t ợng dữ liệu đa ph ơng tiện có thể đ ợc l u trữ và sử dụng lại b i các giao tác khác. - Tính bảo mật: phân cấp quyền truy cập và kiểm soát. - Đảm bảo tính toàn vẹn dữ liệu: đảm bảo tính thống nhất cơ s dữ liệu giữa các giao tác. - Khả năng phục hổi, rollback dữ liệu. - Hỗ trợ truy vấn đa ph ơng tiện: cho phép dễ dàng truy vấn dữ liệu đa ph ơng tiện. - Có giao diện đa ph ơng tiện và t ơng tác. 3. Các kiểu dữ liệu đa phương tiện và một số phương thức trong Oracle interMedia 10g Oracle Multimedia (OM) hay còn gọi là Oracle interMedia, là một tính năng cho phép CSDL Oracle l u trữ, quản lý và truy xuất hình ảnh, video, âm thanh, hoặc các dữ liệu media hỗn hợp. OM thừa kế độ tin cậy, tính sẵn có, và khả năng quản lý dữ liệu của CSDL Oracle đối với nội dung đa ph ơng tiện. OM không kiểm soát các thiết bị ghi nhận media (media capture) hoặc các thiết bị đầu ra, chức năng sẽ đ ợc đảm nhiệm b i một phần mềm ứng dụng cụ thể. Hệ quản trị CSDL Oracle là một hệ quản trị CSDL quan hệ - đối t ợng. Điều này có nghĩa là, ngoài vai trò truyền thống của mình trong việc quản lý an toàn và hiệu quả dữ liệu quan hệ, nó còn cung cấp sự hỗ trợ cho các khái niệm về nhiều loại đối t ợng khác nhau, bao gồm tất cả các dữ liệu liên quan với các đối t ợng và các ph ơng thức có thể đ ợc thực hiện trên chúng. Công nghệ quan hệ - đối t ợng bao gồm việc hỗ trợ tích hợp BLOBs (Binary Large Objects) để cung cấp cơ s cho việc bổ sung các đối t ợng phức tạp, chẳng hạn nh âm thanh, hình ảnh và video đ ợc số hóa vào CSDL. OM hỗ trợ l u trữ các định dạng tập tin thông dụng, bao gồm các hình ảnh đ ợc tạo ra trên máy tính, và các định dạng âm thanh, video trong CSDL. OM cung cấp các cơ chế để them các cột hay đối t ợng chứa dữ liệu hình ảnh, âm thanh, video hay các dữ liệu media hỗn hợp khác vào các bảng sẵn có, chèn vào và lấy ra các dữ liệu đa ph ơng tiện. Điều này cho phép các nhà thiết kế CSDL m rộng các CSDL hiện có với dữ liệu đa ph ơng tiện hoặc xây dựng các ứng dụng CSDL đa ph ơng tiện mới dành cho ng i dùng cuối. OM sử dụng các loại đối t ợng, t ơng tự nh các lớp Java hay C++ để mô tả dữ liệu đa ph ơng tiện. Những loại đối t ợng này đ ợc gọi là ORDAudio, ORDImage, ORDVideo, ORDDoc. Một thể hiện của các loại đối t ợng này bao gồm các thuộc tính, siêu dữ liệu metadata, dữ liệu media, và các ph ơng thức. Dữ liệu media chính là các dữ liệu âm thanh, hình ảnh, video hoặc các loại dữ liệu hỗn hợp khác. Siêu dữ liệu là thông tin về dữ liệu, chẳng hạn nh độ dài l u trữ đối t ợng, kiểu nén, hoặc định dạng. Các ph ơng thức là các thủ tục mà có thể đ ợc thực hiện trên các đối t ợng, chẳng hạn nh getContent() hay setProperties(). Các đối t ợng trong OM có một mô hình l u trữ dữ liệu media chung. Các thành phần dữ liệu media của các đối t ợng này có thể đ ợc l u trữ trong CSDL, trong đối t ợng kiểu BLOB d ới sự kiểm soát giao dịch (transaction). Các dữ liệu media cũng có thể đ ợc l u trữ bên ngoài CSDL mà không nằm trong sự quản lý các giao dịch. Trong tr ng hợp này, một con trỏ đ ợc l u trữ trong CSDL d ới sự quản lý giao dịch và các dữ liệu media đ ợc l u trữ trong: - Đối t ợng lớn dựa trên tập tin (kiểu BFILE). - Một đ ng dẫn URL. - Một nguồn do ng i dùng xác định trên một máy chủ dữ liệu đa ph ơng tiện chuyên biệt, hoặc một máy chủ khác. Siêu dữ liệu (metadata) đ ợc l u trữ trong CSDL d ới sự kiểm soát của OM. Dù cho dữ liệu media đ ợc l u trữ bên trong hay bên ngoài CSDL, OM đều quản lý siêu dữ liệu cho tất cả các loại media và có thể tự động trích xuất siêu dữ liệu cho âm thanh, hình ảnh và video. Siêu dữ liệu này bao gồm các thuộc tính nh sau: - L u trữ thông tin về âm thanh, hình ảnh, video hay các kiểu dữ liệu multimedia hỗn hợp khác, bao gồm loại nguồn, đ ng dẫn, tên nguồn và dữ liệu đ ợc l u trữ cục bộ (trong CSDL) hay bên ngoài. - Cập nhật thông tin nhưn th i gian cho hình ảnh, âm thanh, video hoặc các dữ liệu media hỗn hợp. - Mô tả dữ liệu âm thanh, video (description). - Định dạng của dữ liệu đa ph ơng tiện. - Kiểu MIME ((Multi-Purpose Internet Mail Extension) của dữ liệu đa ph ơng tiện. - Các đặc tr ng âm thanh: kiểu mư hóa, số kênh, tỉ lệ mẫu, kiểu nén, và th i gian phát (duration). - Các đặc tr ng hình ảnh: kích th ớc chiều cao và chiều rộng, định dạng nội dung hình ảnh, định dạng nén, và độ dại nội dung hình ảnh. 2 Võ Tấn Khoa, Phan Thế Duy Các đặc tr ng video: chiều rộng và chiều cao của khung, độ phâ giải của khung, tỉ lệ khung, th i gian phát, kiểu nén, số khung, số l ợng màu sắc và tỉ lệ bitrate. - Các diêu dữ liệu trích xuất từ cấu trúc XML, nh đạo diễn, nhà sản xuất của bộ phim, video. Oracle Multimedia là một tập hợp các tính năng dành cho dữ liệu đa ph ơng tiện bao gồm một số loại đối t ợng ORDAudio, ORDDoc, ORDImage, ORDImageSignature, ORDVideo cùng với một tập hợp nhiều ph ơng thức để có thể: - L u trữ, thực hiện nhiều thao tác trên các loại dữ liệu đa ph ơng tiện. - Trích xuất thông tin, đặc điểm, thuộc tính hay các dữ liệu metadata từ dữ liệu đa ph ơng tiện. - Truy vấn, quản lý các kiểu dữ liệu đa ph ơng tiện từ Oracle interMedia, hay các máy chủ web. Trong đó, loại đối t ợng ORDSource và các ph ơng thức của nó đ a ra cách tiếp cận tập trung xử lý, thao tác trực tiếp nguồn dữ liệu đa ph ơng tiện. Các kiểu đối t ợng ORDAudio, ORDDoc, ORDImage, ORDImageSignature, ORDVideo đều chứa một thuộc tính là kiểu dữ liệu ORDSource. - ORDAudio: loại đối t ợng cho các dữ liệu âm thanh, audio. - ORDVideo: loại đối t ợng dành cho các dữ liệu phim, video. - ORDDoc: kiểu đối t ợng hỗ trợ việc l u trữ và quản lý bất kỳ dạng thông tin đa ph ơng tiện nào nh hình ảnh, audio và video. - ORDImage: kiểu dữ liệu đặc tr ng trong việc l u trữ, thao tác dữ liệu hình ảnh. - ORDImageSignature: hỗ trợ các việc nhận dạng tìm kiếm hình ảnh/ đối t ợng dựa trên nội dung - content-based retrieval (image matching). - 3.1 ORDSource: Kiểu đối t ợng ORDSource đ ợc “gắn” vào trong các loại đối t ợng ORDAudio, ORDDoc, ORDVideo nh một thuộc tính. ORDSource hỗ trợ truy cập đến nhiều loại dữ liệu đa ph ơng tiện, có thể truy cập tới các nguồn dữ liệu nh : - BLOB cục bộ (local) trong Oracle Database - truy cập BFILE trên hệ thống file cục bộ (local file system), hoặc từ URL trên HTTP server. - truy cập ra bên ngoài từ các nguồn dữ liệu định nghĩa b i ng i dùng (user-defined source) trên server khác. Các thuộc tính của ORDSource: - localData: l u trữ cục bộ dữ liệu đa ph ơng tiện trong BLOB. Có thể l u trữ 4 GB/ 1 BLOB. - srcType: loại nguồn dữ liệu. - srcLocation: nơi l u trữ nguồn dữ liệu dựa trên srcType. - srcName: tên đối t ợng nguồn dữ liệu. - updateTime: th i điểm cập nhật nguồn dữ liệu gần nhất. - local: thuộc tính “c ” (flag) để chỉ ra dữ liệu là cục bộ - local (1 hoặc NULL) hay bên ngoài - external (0). Một số ph ơng thức: - clearLocal(): dùng để gán giá trị của biến c local thành 0, nghĩa là dữ liệu đ ợc l u trữ bên ngoài phạm vi cơ s dữ liệu. - getContentLength(): trả về số byte chiều dài của nguồn dữ liệu. - getLocalContent(): ph ơng thức này cho kết quả là giá trị nội dung hay BLOB chứa dữ liệu của localData. - getUpdateTime(): trả về th i điểm cuối cùng mà đối t ợng bị tác động hay thay đổi. 3.2 ORDImage: Kiểu đối t ợng ORDImage hỗ trợ việc l u trữ, xử lý, thao tác trên những dữ liệu hình ảnh trong một CSDL. Các thuộc tính: - source: nguồn của dữ liệu hình ảnh đ ợc l u trữ. - height: kích th ớc chiều cao của hình ảnh, tính bằng pixel. - width: độ dài chiều rộng của hình ảnh, tính bằng pixel. - contentLength: kích th ớc của tập tin hình ảnh trên đĩa l u trữ, đ ợc tính bằng bytes. - fileFormat: định dạng của tập tin hình ảnh đ ợc l u trữ. - contentFormat: dạng nội dung của hình ảnh. - compressionFormat: thuật toán nén đư đ ợc dung trong dữ liệu hình ảnh. - mimeType: thông tin về MIME của hình ảnh. 3 Võ Tấn Khoa, Phan Thế Duy Một số phương thức chính: - Hàm init(): kh i tạo đối t ợng ORDImage.  Cấu trúc: init( ) RETURN ORDImage;  Ví dụ: Kh i tạo một thể hiện của kiểu dữ liệu ORDImage BEGIN INSERT INTO pm.online_media (product_id, product_photo) VALUES (3501, ORDSYS.ORDImage.init()); COMMIT; END; / - Hàm kh i tạo init(srcType,srcLocation,srcName): đ ợc sử dụng khi kh i tạo một đối t ợng kiểu dữ liệu hình ảnh ORDImage.  Cấu trúc: init(srcType IN VARCHAR2, srcLocation IN VARCHAR2, srcName IN VARCHAR2) RETURN ORDImage; Trong đó, các tham số: + srcType: dạng nguồn của hình ảnh + srcLocation: vị trí nguồn của hình ảnh + srcName: tên nguồn của hình ảnh.  Ví dụ: BEGIN INSERT INTO pm.online_media (product_id, product_photo) VALUES (3515, ORDSYS.ORDImage.init('FILE', 'FILE_DIR','speaker.jpg')); COMMIT; END; / - Hàm import() / importFrom(): Chuyển dữ liệu hình ảnh từ nguồn dữ liệu ảnh bên ngoài vào thuộc tính localData (embedded ORDSource object) bên trong CSDL  Cấu trúc: import(ctx IN OUT RAW); - Hàm import(ctx) có tham số ctx là giá trị source plugin context, th ng kh i tạo có giá trị là NULL. importFrom(ctx IN OUT RAW, source_type IN VARCHAR2, source_location IN VARCHAR2, source_name IN VARCHAR2); - Các tham số của hàm importFrom(), chuyển dữ liệu ảnh đ ợc chỉ định rõ ràng bên ngoài vào thuộc tính ORDSource.localData: source_type: dạng của ảnh nguồn, source_name: tên của ảnh nguồn, source_location: vị trí mà ảnh nguồn đ ợc l u trữ  Ví dụ: Import dữ liệu ảnh từ nguồn dữ liệu ảnh bên ngoài vào local source trong CSDL: 4 Võ Tấn Khoa, Phan Thế Duy DECLARE obj ORDSYS.ORDImage; ctx RAW(64) :=NULL; BEGIN SELECT p.product_photo INTO obj FROM pm.online_media p WHERE p.product_id = 3515 FOR UPDATE; DBMS_OUTPUT.PUT_LINE('getting source'); DBMS_OUTPUT.PUT_LINE('--------------------------'); -- Get source information DBMS_OUTPUT.PUT_LINE(obj.getSource()); -- Import data obj.import(ctx); -- Check size DBMS_OUTPUT.PUT_LINE('Length is ' || obj.getContentLength); UPDATE pm.online_media p SET p.product_photo = obj WHERE p.product_id = 3515; COMMIT; END; / - Hàm getFileFormat(): lấy giá trị thuộc tính kiểu định dạng file của hình ảnh  Cấu trúc: getFileFormat( ) RETURN VARCHAR2;  Ví dụ: lấy giá trị định dạng file của đối t ợng hình ảnh DECLARE image ORDSYS.ORDImage; file_format VARCHAR2(4000); BEGIN SELECT p.product_photo INTO image FROM pm.online_media p WHERE p.product_id = 3515; -- Get the image file format: file_format := Image.getFileFormat(); DBMS_OUTPUT.PUT_LINE('File format is ' || file_format); COMMIT; END; / - Hàm getCompressionFormat(): Trả về giá trị thuộc tính compressionFormat của đối t ợng hình ảnh  Cấu trúc: getCompressionFormat( ) RETURN VARCHAR2;  Ví dụ: Lấy giá trị kiểu định dạng compression của hình ảnh 5 Võ Tấn Khoa, Phan Thế Duy DECLARE image ORDSYS.ORDImage; compression_format VARCHAR2(4000); BEGIN SELECT p.product_photo INTO image FROM pm.online_media p WHERE p.product_id = 3515; -- Get the image compression format: compression_format := image.getCompressionFormat(); DBMS_OUTPUT.PUT_LINE('Compression format is ' || compression_format); COMMIT; END; / - Hàm getWidth() / getHeight(): Trả về giá trị kích th ớc chiều cao/ rộng của hình ảnh  Cấu trúc: getHeight( ) RETURN INTEGER; getWidth( ) RETURN INTEGER;  Ví dụ: Lấy giá trị kích th ớc chiều cao của bức ảnh DECLARE image ORDSYS.ORDImage; height INTEGER; BEGIN SELECT p.product_photo INTO image FROM pm.online_media p WHERE p.product_id = 3515; -- Get the image height: height := image.getHeight(); DBMS_OUTPUT.PUT_LINE('Height is ' || height); COMMIT; END; / - Hàm processCopy(): thực hiện sao chép hình ảnh đ ợc l u trữ bên trong hay nằm bên ngoài, đgiá trị ảnh sao chép đ ợc giữ trong nội tại nơi chứa nguồn ảnh.  Cấu trúc: processCopy(command IN VARCHAR2, dest IN OUT ORDImage);  Ví dụ: Tạo ảnh thumbnail cho một ảnh gốc: 6 Võ Tấn Khoa, Phan Thế Duy DECLARE obj_1 ORDSYS.ORDImage; obj_2 ORDSYS.ORDImage; BEGIN SELECT product_photo, product_thumbnail INTO obj_1, obj_2 FROM pm.online_media WHERE product_id = 3515 FOR UPDATE; obj_1.processCopy('maxScale=32 32', obj_2); UPDATE pm.online_media SET product_thumbnail = obj_2 WHERE product_id=3515; COMMIT; EXCEPTION WHEN ORDSYS.ORDImageExceptions.NULL_DESTINATION THEN DBMS_OUTPUT.PUT_LINE('The destination is null'); WHEN ORDSYS.ORDImageExceptions.DATA_NOT_LOCAL THEN DBMS_OUTPUT.PUT_LINE('Data is not local'); WHEN ORDSYS.ORDImageExceptions.NULL_LOCAL_DATA THEN DBMS_OUTPUT.PUT_LINE('dest.source.localData attribute is null'); COMMIT; END; / 3.3 ORDImageSignature: ORDImageSignature là kiểu đối t ợng đ ợc dùng để hỗ trợ vấn đề tìm kiếm, so khớp dữ liệu hình ảnh dựa trên nội dung (content-based retrieval). Các thuộc tính: - source: nguồn của dữ liệu hình ảnh đ ợc l u trữ. - height: kích th ớc chiều cao của hình ảnh, tính bằng pixel. - width: độ dài chiều rộng của hình ảnh, tính bằng pixel. - contentLength: kích th ớc của tập tin hình ảnh trên đĩa l u trữ, đ ợc tính bằng bytes. - fileFormat: định dạng của tập tin hình ảnh đ ợc l u trữ. - contentFormat: dạng nội dung của hình ảnh. - compressionFormat: thuật toán nén đư đ ợc dung trong dữ liệu hình ảnh. - mimeType: thông tin về MIME của hình ảnh. Một số phương thức chính: - init(): ph ơng thức này dùng để kh i tạo một đối t ợng ORDImageSignature, kiểu dữ liệu trả về là ORDImageSignature. - generateSignature( ) : đ ợc dùng để tạo một signature cho đối t ợng hình ảnh, kết quả là signature của ảnh trả về sẽ đ ợc dùng để đánh giá độ khác biệt giữa 2 bức ảnh.  Cấu trúc: generateSignature (image IN ORDImage);  Ví dụ: Phát sinh signature cho đối t ợng hình ảnh đ ợc l u trữ trong CSDL. 7 Võ Tấn Khoa, Phan Thế Duy DECLARE t_image ORDSYS.ORDImage; image_sig ORDSYS.ORDImageSignature; BEGIN SELECT p.product_photo, p.product_photo_signature INTO t_image, image_sig FROM pm.online_media p WHERE p.product_id = 2402 FOR UPDATE; -- Generate a signature: image_sig.generateSignature(t_image); UPDATE pm.online_media p SET p.product_photo_signature = image_sig WHERE product_id = 2402; END; - evaluateScore(): ph ơng thức này cung cấp cách xác định khoảng cách khác biệt giữa 2 signature đầu vào, dựa trên trọng số đ ợc chỉ định.  Cấu trúc: evaluateScore( sig1 IN ORDImageSignature, sig2 IN ORDImageSignature, weights IN VARCHAR2) RETURN FLOAT; - Hàm evaluateScore() trả về giá trị kiểu FLOAT, mang giá trị trong khoảng từ 0.0 đến 100.0; trong đó 0.0 nghĩa là các hình ảnh đó đồng nhất hay giống nhau, ng ợc lại 100.0 chỉ ra rằng chúng hoàn toàn khác biệt nhau. Chuỗi trọng số weights là một chuỗi giá trị các tên thuộc tính dùng để đánh giá đ ợc gán giá trị trong khoảng 0.0 và 1.0, nếu không đ ợc chỉ định b i ng i dùng, nó sẽ mang giá trị mặc định là 0.0. Nếu một thuộc tính đ ợc gán giá trị là 0.0 tức là sẽ không xem xét đên thuộc tính này khi đánh giá, và ng ợc lại giá trị 1.0 là độ u tiên cao nhất. Ngoài ra, điều kiện bắt buộc là phải có một thuộc tính đ ợc chỉ định mang giá trị lớn hơn 0.0. Có 4 thuộc tính để đánh giá trọng số:  color: mang giá trị từ 0.0 đến 1.0, chỉ ra mức độ quan trọng của yếu tố màu sắc trong đánh giá, so sánh 2 hình ảnh.  texture: mang giá trị từ 0.0 đến 1.0, chỉ ra mức độ quan trọng của yếu tố texture trong đánh giá, so sánh 2 hình ảnh.  shape: mang giá trị từ 0.0 đến 1.0, chỉ ra mức độ quan trọng của yếu tố hình dạng - shape trong đánh giá, so sánh 2 hình ảnh.  location: mang giá trị từ 0.0 đến 1.0, chỉ ra mức độ quan trọng của yếu tố vị trí của những vùng khác nhau của hình ảnh trong đánh giá, so sánh 2 hình ảnh. Thuộc tính này không thể đ ợc sử dụng một cách độc lập, mà bắt buộc phải dùng kèm các yếu tố thuộc tính khác.  Ví dụ: Đánh giá độ khác biệt giữa 2 đối t ợng hình ảnh. DECLARE t_image ORDSYS.ORDImage; c_image ORDSYS.ORDImage; image_sig ORDSYS.ORDImageSignature; compare_sig ORDSYS.ORDImageSignature; score FLOAT; BEGIN SELECT p.product_photo, p.product_photo_signature INTO t_image, image_sig FROM pm.online_media p WHERE p.product_id = 1910 FOR UPDATE; -- Generate a signature: image_sig.generateSignature(t_image); UPDATE pm.online_media p SET p.product_photo_signature = image_sig WHERE product_id =1910; SELECT p.product_photo, p.product_photo_signature INTO c_image, compare_sig FROM pm.online_media p 8 Võ Tấn Khoa, Phan Thế Duy WHERE p.product_id = 1940 FOR UPDATE; -- Generate a signature: compare_sig.generateSignature(c_image); UPDATE pm.online_media p SET p.product_photo_signature = compare_sig WHERE product_id = 1940; SELECT p.product_photo, p.product_photo_signature INTO t_image, image_sig FROM pm.online_media p WHERE p.product_id = 1910; SELECT p.product_photo, p.product_photo_signature INTO c_image, compare_sig FROM pm.online_media p WHERE p.product_id = 1940; -- Compare two images for similarity based on image color: score:=ORDSYS.ORDImageSignature.evaluateScore(image_sig, compare_sig,'color=1.0,texture=0,shape=0,location=0'); DBMS_OUTPUT.PUT_LINE('Score is ' || score); END; / - isSimilar( ): hỗ trợ so khớp về mức độ giống nhau giữa các đối t ợng hình ảnh  Cấu trúc: isSimilar( sig1 IN ORDImageSignature, sig2 IN ORDImageSignature, weights IN VARCHAR2, threshold IN FLOAT) RETURN INTEGER; Trọng số weights là một chuỗi giá trị các tên thuộc tính u tiên để đánh giá đ ợc gán giá trị trong khoảng 0.0 và 1.0, nếu không đ ợc chỉ định b i ng i dùng, nó sẽ mang giá trị mặc định là 0.0. Nếu một thuộc tính đ ợc gán giá trị là 0.0 tức là sẽ không xem xét đên thuộc tính này khi đánh giá, và ng ợc lại giá trị 1.0 là độ u tiên cao nhất. Có 4 thuộc tính để đánh giá trọng số:  color: mang giá trị từ 0.0 đến 1.0, chỉ ra mức độ quan trọng của yếu tố màu sắc trong đánh giá, so sánh 2 hình ảnh.  texture: mang giá trị từ 0.0 đến 1.0, chỉ ra mức độ quan trọng của yếu tố texture trong đánh giá, so sánh 2 hình ảnh.  shape: mang giá trị từ 0.0 đến 1.0, chỉ ra mức độ quan trọng của yếu tố hình dạng - shape trong đánh giá, so sánh 2 hình ảnh.  location: mang giá trị từ 0.0 đến 1.0, chỉ ra mức độ quan trọng của yếu tố vị trí của những vùng khác nhau của hình ảnh trong đánh giá, so sánh 2 hình ảnh. Thuộc tính này không thể đ ợc sử dụng một cách độc lập, mà bắt buộc phải dung kèm các yếu tố thuộc tính khác.  Tham số threshold: mức độ mà ng i dùng chỉ ra trong việc xác định ng ỡng giá trị trả về nào là giới hạn để xác định 2 bức ảnh giống nhau, chẳng hạn nếu threshold là 10, thì chỉ có những bức ảnh nào có khoảng cách khác biệt signature không v ợt quá 10 mới đ ợc trả về.  Ví dụ: So sánh 2 hình ảnh dựa trên đặc điểm màu sắc. ví dụ này, 2 hình ảnh đ ợc kết luận là t ơng tự, hay giống nhau nếu khoảng cách khác biệt trả về giữa chúng có giá trị không v ợt quá 10. DECLARE image_sig1 ORDSYS.ORDImageSignature; image_sig2 ORDSYS.ORDImageSignature; value INTEGER; BEGIN SELECT product_photo_signature INTO image_sig1 FROM pm.online_media WHERE product_id = 1910; SELECT product_photo_signature INTO image_sig2 FROM pm.online_media WHERE product_id = 1940; 9 Võ Tấn Khoa, Phan Thế Duy -- Compare the images: value := ORDSYS.ORDImageSignature.isSimilar(image_sig1, image_sig2,'color=1.0,texture=0,shape=0,location=0',10); IF value = 1 THEN DBMS_OUTPUT.PUT_LINE('The images are similar'); ELSIF value = 0 THEN DBMS_OUTPUT.PUT_LINE('The images are not similar'); END IF; END; / 3.4. ORDVideo: ORDVideo tích hợp l u trữ, trích xuất và quản lý dữ liệu video số hóa trong một CSDL. Video có thể đ ợc tạo ra b i một đầu thu video, máy quay phim, video hoạt hình số hóa, các thiết bị quay video chuyên dụng khác hoặc thậm chí dựa trên thuật toán của một ch ơng trình. ORDVideo có thể l u trữ và truy xuất dữ liệu video của bất kỳ định dạng dữ liệu nào đ ợc hỗ trợ. ORDVideo có thể: - Tự động trích xuất siêu dữ liệu từ dữ liệu video của nhiều dạng video phổ biến. - Trích xuất các thuộc tính và l u trữ chúng trong thuộc tính “comments” của các đối t ợng dạng XML. - Đ ợc thiết kế để có thể nhận ra và hỗ trợ thêm định dạng video. Các thuộc tính: - source: giá trị ORDSource, nơi mà đối t ợng video đ ợc tìm thấy. - description: mô tả, chú thích về thông tin video. - format: định dạng video. - height: kích th ớc chiều cao của mỗi khung hình- frame trong video, tính bằng pixel. - width: độ dài chiều rộng của mỗi khung hình- frame trong video, tính bằng pixel. - comments: thông tin metadata của video. - frameResolution: độ phân giải video. - frameRate: tỉ lệ frame của video. - videoDuration: tổng th i gian kéo dài của video. - numberOfFrames: số l ợng các khung hình trong video. - compressionType: định dạng nén đư đ ợc dùng trong dữ liệu video. - numberOfColors: số l ợng màu sắc trong dữ liệu video. - bitRate: bit rate của video, một thuật ngữ chỉ khối l ợng dữ liệu đ ợc truyền trong một khoảng th i gian nhất định, những đơn vị dùng để đo l ng bitrate th ng là kbit/s (kilobit trên giây) và Mbps (megabit trên giây). Dù sử dụng đơn vị nào, con số bitrate càng cao càng tốt, đem lại tốc độ hoặc chất l ợng cao. Bitrate là l ợng dữ liệu chuyển từ file film lên CPU trong 1 giây để xử lý giải mư thành hình ảnh và âm thanh. Bitrate càng cao phim càng đẹp, âm thanh càng hay nh ng cũng đồng nghĩa với việc CPU phải giải quyết càng nhiều công việc. - mimeType: thông tin về MIME của hình ảnh. Một số phương thức chính: - Hàm init(): đ ợc dung để kh i tạo một đối t ợng ORDVideo mới.  Cấu trúc hàm: init( ) RETURN ORDVideo;  Ví dụ: BEGIN INSERT INTO pm.online_media (product_id, product_video) VALUES (2004, ORDSYS.ORDVideo.init()); COMMIT; END; / - Hàm getBitRate(): lấy giá trị thuộc tính bitrate của video  Cấu trúc: 10 Võ Tấn Khoa, Phan Thế Duy getBitRate( ) RETURN INTEGER  - Ví dụ: DECLARE obj ORDSYS.ORDVideo; res INTEGER; BEGIN SELECT p.product_video INTO obj FROM pm.online_media p WHERE p.product_id = 2030; res := obj.getBitRate(); DBMS_OUTPUT.PUT_LINE('bit rate : ' || res ); COMMIT; END; / Hàm getVideoDuration(): lấy giá trị th i gian để phát hết đối t ợng video  Cấu trúc: getVideoDuration( ) RETURN INTEGER;  Ví dụ: DECLARE obj ORDSYS.ORDVideo; res INTEGER; BEGIN SELECT p.product_video INTO obj FROM pm.online_media p WHERE p.product_id = 2030; res := obj.getVideoDuration(); DBMS_OUTPUT.PUT_LINE('video duration : ' ||res); COMMIT; END; / - Hàm getFormat(): lấy giá trị định thuộc tính định dạng của đối t ợng video.  Cấu trúc: getFormat( ) RETURN VARCHAR2;  Ví dụ: DECLARE obj ORDSYS.ORDVideo; BEGIN SELECT p.product_video INTO obj FROM pm.online_media p WHERE p.product_id = 2030; DBMS_OUTPUT.PUT_LINE('writing format'); DBMS_OUTPUT.PUT_LINE('--------------'); DBMS_OUTPUT.PUT_LINE(obj.getFormat()); COMMIT; END; / 11 Võ Tấn Khoa, Phan Thế Duy - Hàm importFrom(): Chuyển dữ liệu video từ nguồn dữ liệu đ ợc chỉ định sẵn bên ngoài vào thuộc tính localData (embedded ORDSource object) bên trong CSDL  Cấu trúc: importFrom(ctx IN OUT RAW, source_type IN VARCHAR2, source_location IN VARCHAR2, source_name IN VARCHAR2); Các tham số của hàm importFrom(), chuyển dữ liệu video đ ợc chỉ định rõ ràng bên ngoài vào thuộc tính ORDSource.localData: source_type: dạng của file video nguồn, source_name: tên của video nguồn, source_location: vị trí mà video nguồn đ ợc l u trữ  Ví dụ: DECLARE obj ORDSYS.ORDVideo; ctx RAW(64) :=NULL; BEGIN SELECT p.product_video INTO obj FROM pm.online_media p WHERE p.product_id = 2004 FOR UPDATE; DBMS_OUTPUT.PUT_LINE('setting and getting source'); DBMS_OUTPUT.PUT_LINE('--------------------------'); -- Import data: obj.importFrom(ctx,'file','FILE_DIR','speakers.rm'); -- Check size: DBMS_OUTPUT.PUT_LINE('Length is ' ||TO_CHAR(obj.getContentLength(ctx))); UPDATE pm.online_media p SET p.product_video = obj WHERE p.product_id = 2004; COMMIT; EXCEPTION WHEN ORDSYS.ORDSourceExceptions.METHOD_NOT_SUPPORTED THEN DBMS_OUTPUT.put_line('Source METHOD_NOT_SUPPORTED caught'); WHEN ORDSYS.ORDSourceExceptions.SOURCE_PLUGIN_EXCEPTION THEN DBMS_OUTPUT.put_line('SOURCE PLUGIN EXCEPTION caught'); WHEN ORDSYS.ORDVideoExceptions.METHOD_NOT_SUPPORTED THEN DBMS_OUTPUT.put_line('VIDEO METHOD_NOT_SUPPORTED EXCEPTION caught'); WHEN ORDSYS.ORDVideoExceptions.VIDEO_PLUGIN_EXCEPTION THEN DBMS_OUTPUT.put_line('VIDEO PLUGIN EXCEPTION caught'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('EXCEPTION Caught'); END; / - Hàm getFrameSize(): lấy giá trị thuộc tính chiều cao và chiều rộng của khung video:  Cấu trúc: getFrameSize(retWidth OUT INTEGER, retHeight OUT INTEGER);  Ví dụ: Lấy kích th ớc chiều cao và chiều rộng của video: 12 Võ Tấn Khoa, Phan Thế Duy DECLARE obj ORDSYS.ORDVideo; width INTEGER; height INTEGER; BEGIN SELECT p.product_video INTO obj FROM pm.online_media p WHERE p.product_id = 2030; obj.getFrameSize(width, height); DBMS_OUTPUT.PUT_LINE('width :' || width); DBMS_OUTPUT.PUT_LINE('height :' || height); COMMIT; END; / 4. Lưu trữ, truy vấn và nạp dữ liệu đa phương tiện Dữ liệu đa ph ơng tiện nên đ ợc nạp vào CSDL để tận dụng u thế về độ tin cậy, khả năng m rông, tính sẵn có và khả năng quản lý dữ liệu. Để đ a dữ liệu multimedia vào CSDL với số l ợng lớn, chúng ta có thể dung SQL* Loader, một tiện ích của Oracle cho phép nạp dữ liệu, và trong tr ng hợp này, dữ liệu đa ph ơng tiện từ các tập tin multimedia bên ngoài đ ợc đ a vào một bảng của một CSDL chứa các cột thuộc kiểu đối t ợng t ơng ứng trong OM. u điểm của SQL* Loader là nó rất dễ dàng tạo ra và kiểm tra tập tin kiểm soát hoạt động nạp dữ liệu của ng i sử dụng. Các đối t ợng OM nh ORDAudio, ORDImage, ORDVideo, ORDDoc cung cấp tập các ph ơng thức bao gói để thực hiện các vấn đề l u trữ dữ liệu đa ph ơng tiện: - Thiết lập nguồn dữ liệu là cục bộ hay bên ngoài. - Sửa đổi th i gian lần cập nhật mới nhất của đối t ợng. - Thiết lập thông tin về các kiểu nguồn bên ngoài, vị trí và tên của dữ liệu. - Chuyển dữ liệu vào hoặc ra khỏi CSDL. - Lấy ra các thông tin về nội dung dữ liệu cục bộ nh chiều dài, vị trí của nó; đ a nội dung vào một BLOB tạm th i hoặc xóa nó. - Truy cập nguồn dữ liệu bằng cách m , đọc, ghi, cắt xén hay đóng lại. Khi đ ợc l u trữ trong một CSDL, dữ liệu multimedia có thể đ ợc truy vấn bằng cách sử dụng các cột chữ hoặc số khác nhau hoặc các thuộc tính đối t ợng của bảng để tìm một hàng có chứa dữ liệu mong muốn. Dữ liệu đa ph ơng tiện có thể đ ợc truy vấn theo các siêu dữ liệu đ ợc trích xuất, theo các cột trong bảng khác và theo nội dung chẳng hạn nh truy xuất dựa vào nội dung hình ảnh. 13 Võ Tấn Khoa, Phan Thế Duy 5. Kết luận Cho đến th i điểm hiện tại, chúng ta ch a khai thác đ ợc hết các dữ liệu đa ph ơng tiện vì đặc tính dung l ợng lớn và khó trích xuất đặc tr ng từ các dạng dữ liệu này; quá trình đánh chỉ mục gây khó khăn; thao tác đồng th i trên khối dữ liệu rất lớn, tốn nhiều tài nguyên và th i gian. th i điểm này, nếu l u trữ multimedia trong CSDL quan hệ sẽ gây ra vấn đề giảm tốc độ xử lý, không thể thao tác nhiều và chi tiết trên bộ dữ liệu đa ph ơng tiện của CSDL đó. Tuy nhiên, chúng ta có thể sử dụng mô hình CSDL quan hệ đối t ợng hoặc mô hình CSDL h ớng đối t ợng để thao tác l u trữ, truy vấn dễ dàng hơn phần nào khi làm việc với dữ liệu đa ph ơng tiện. Hệ quản trị CSDL Oracle với tính năng interMedia là sản phẩm điển hình trong vấn đề l u trữ và xử lý hiệu quả các dạng dữ liệu multimedia với khối l ợng lớn. Oracle Multimedia có thể l u trữ bất kỳ kiểu định dạng đa ph ơng tiện nào, tuy nhiên nó chỉ có thể xử lý các thông tin media (trên hình ảnh), trích xuất metadata trên các kiểu định dạng mà đư đ ợc qui định tr ớc b i Oracle. Tài liệu tham khảo [1] Marcelle Kratochvil, Managing Multimedia and Unstructured Data in the Oracle Database, Packt Publishing (March 21, 2013), ISBN-13: 978-1849686921 [2] Multimedia Databases: An Object Relational Approach, by Lynne Dunckley, 2002. [3] Oracle 10g Developing Media Rich Applications, by Lynne Dunckley, 2006. [4] Oracle Multimedia Documentation: http://oracle.com/technetwork/products/multimedia/documentation/multimedia-155068.html [5] Oracle Database Library: https://web.stanford.edu/dept/itss/docs/oracle/10g/appdev.101/b10829/toc.htm 14