You are on page 1of 20

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO
HỆ CƠ SỞ DỮ LIỆU ĐA PHƯƠNG TIỆN

ĐỀ TÀI
Xây dựng hệ CSDL lưu trữ và tìm kiếm ảnh nhân vật
hoạt hình

GIẢNG VIÊN: NGUYỄN ĐÌNH HÓA

LỚP HỌC PHẦN: D18-026

NHÓM BTL: 04

SINH VIÊN THỰC HIỆN:

NGUYỄN QUANG ĐỒNG B16DCCN162


MAI THANH SƠN B16DCCN514
ĐOÀN VIỆT DŨNG B16DCCN096

Hà Nội, ngày 02/05/2022

1
MỤC LỤC
1. Trình bày về dữ liệu (Kết quả sưu tầm).................................................................................................... 3
Đặc trưng các ảnh ........................................................................................................................................... 6
2. Hãy tìm hiểu các kỹ thuật xử lý và tìm kiếm ảnh hiện hành. ................................................................. 8
Elasticsearch và quá trình phân tích dữ liệu ................................................................................................ 8
Ưu điểm và nhược điểm của Elasticsearch ................................................................................................. 12
3. XÂY DỰNG HỆ THỐNG NHẬN DẠNG VÀ TÌM KIẾM ẢNH NHÂN VẬT HOẠT HÌNH ........................ 14
4. Trình bày các thuộc tính được sử dụng để nhận dạng ảnh nhân vật hoạt hình trong hệ thống, cùng
các kỹ thuật để trích rút các thuộc tính đó. ............................................................................................ 15
5. Trình bày cách lưu trữ và quản lý các thuộc tính ảnh nhân vật hoạt hình và cách nhận dạng, tìm
kiếm các ảnh trong CSDL dựa trên các thuộc tính đó. ......................................................................... 19
1. Trình bày về dữ liệu (Kết quả sưu tầm)

• Tổng số ảnh: 150

• Kích cỡ ảnh: 450x285

• Số nhân vật hoạt hình: 15

• Số lượng nhân vật hoạt hình trong mỗi phim :

o Jujutsu Kaisen : 1

o Dragon Ball : 1

o Bleach : 1

o Naruto : 3

o Conan : 1
o Hunter X Hunter : 1

o One Piece : 1

o Fairy Tail : 1

o Dr.Stone : 1

o Haikyuu!! : 1

o Toriko : 1

o Shokugeki no Soma : 1

• Số ảnh của mỗi nhân vật hoạt hình:


STT Tên nhân vật Số ảnh Tên Phim

1 Gojo Satoru 10 Jujutsu Kaisen

2 Son Goku 10 Dragon Ball

3 Kurosaki Ichigo 10 Bleach

4 Uchiha Itachi 10 Naruto

5 Kid ( Kuroba Kaito) 10 Conan

6 Zoldyck Killua 10 Hunter X Hunter

7 Levi Ackerman 10 Attack on Titan

8 Monkey D.Luffy 10 One Piece

9 Uzumaki Naruto 10 Naruto

10 Natsu Dragneel 10 Fairy Tail

11 Uchiha Sasuke 10 Naruto

12 Senku Ishigami 10 Dr.Stone

13 Souma Yukihira 10 Shokugeki no Soma

14 Tobio Kageyama 10 Haikyuu!!

15 Toriko 10 Toriko

Link: https://drive.google.com/drive/folders/13RQBFJcABu6fJPTRLJrwtlRuwrwEWlTN
Đặc điểm:
Đặc trưng các ảnh
- Về đối tượng:Nhân vật hoạt hình.
+ Hình dạng: hình dáng tư thế, chân dung , cận mặt của nhân vật
+ Màu sắc: Ảnh nhân vật hoạt hình thì có 1 vài màu sắc chủ đạo và là màu cơ bản và tách
biệt rõ ràng về màu sắc trên đối tượng
- Nền:
Ảnh của các nhân vật hoạt hình đã được tách nền, chỉ còn để lại chủ thể là các nhân vật
hoạt hình
- Kết cấu ảnh:
Giống nhau : Mỗi bức ảnh đều có 1 đối tượng là 1 nhân vật hoạt hình
Về hình dáng và màu sắc của nhân vật kết cấu trong mỗi bức ảnh có thể giống nhau.

Ví dụ
Về màu sắc: Một số nhân vật hoạt hình có màu sắc phân bố khá giống nhau

Khác nhau:
Hình dáng đặc trưng và màu sắc đặc trưng của mỗi nhân vật hoạt hình khác nhau
Ví dụ
Kid có màu tóc đen và luôn mắc vest trong khi Senku có màu tóc trắng

Màu sắc chủ đạo của bức ảnh (màu sắc đặc trưng của nhân vật hoạt hình),
Ví dụ :

Khác nhau ở kết cấu của bức ảnh ( độ tương phản, entropy, độ đồng nhất, tổng trung bình
xác suất của các mức xám, …)

→ Do các nhân vật có những đặc trưng về màu sắc riêng nên ma trận màu, véc-tơ màu
của các nhân vật cũng sẽ khác nhau→ Bọn em sử dụng thuộc tính màu sắc cho bài toán
này
2. Hãy tìm hiểu các kỹ thuật xử lý và tìm kiếm ảnh hiện hành.

Elasticsearch và quá trình phân tích dữ liệu


Elasticsearch
Như chúng ta đã biết thì Elasticsearch là một open-source search engine rất nổi tiếng hỗ
trợ cho việc tìm kiếm cho hệ thống của bạn. Được xây dựng trên apache lucene (một thư
viện mã nguồn mở để xây dựng các search engine), Elasticsearch hoạt động độc lập như
một server đồng thời giao tiếp thông qua RESTful do vậy, bất kể hệ thống bạn viết bằng
ngôn ngữ gì Elasticsearch đều có thể sử dụng được.
Sử dụng Elasticsearch
Elasicsearch có khả năng mở rộng rất mạnh mẽ, bạn có thể cài đặt để nó lưu dữ liệu dưới
dạng phân tán thành nhiều server và khi có một server down thì Elasictsearch có thể tự
động khôi phục dữ liệu của server đó, xem thêm các khái niệm về cluster, node,
shards... , chính vì thế bạn có thể sử dụng Elasticsearch như một database. Tuy
nhiên Elasticsearch chỉ mạnh mẽ ở việc truy suất và tìm kiếm dữ liệu, còn việc thêm mới
/ sửa / xóa dữ liệu thì kém xa các database khác như Mysql, Postgres nên khuyến khích
chỉ sử dụng Elasticsearch để lưu trữ các dữ liệu cần search và kết hợp với một database
khác để lưu trữ dữ liệu.

Về nguyên tắc sử dụng thì hệ thống của bạn sẽ gửi các dữ liệu cần search lên server
Elasicsearch thông qua http request, các dữ liệu này sẽ được lưu dưới dạng các
documents, đồng thời dữ liệu sẽ được đánh index giống các database khác để tăng tốc độ
tìm kiếm, nhưng khác với các database khác, Elasticsearch , sử dụng một cấu trúc được
gọi là inverted index - khác với Btree của Mysql, dữ liệu sẽ được tách ra thành các token
và được lưu lại,
Analysis là gì?
Analysis là một quá trình được tự động thực hiện để phân tích dữ liệu trước khi lưu vào
inverted index trong Elasticsearch sử dụng các analyzer. Ví dụ khi phân tích một đoạn
text, quá trính này sẽ thực hiện các bước sau:

• Character filtering—Chuyển đổi các ký tự sử dụng character filter


• Breaking text into tokens—Tách đoạn text thành tập hợp các token
• Token filtering—Biến đổi các token sử dụng token filter
• Token indexing—Và cuối cùng là lưu các token đó vào inverted index

Trước khi đi vào chi tiết của từng bước, hình dưới đây sẽ mô tả tổng quan quá trình phân
tích của đoạn text có nội dung "share your experience with NoSql & big data
technologies" sử dụng một analyser gồm một chararacter filter, một tokenizer, và 3
token filters
Bước 1: Character filtering

Đây là bước đầu tiên của quá trình analysis, ở bước này, các ký tự sẽ được chuyển đổi
thành dữ liệu cho phù hợp với yêu cầu search của bạn sử dụng các Character filters , quá trình
nãy sẽ giúp bạn xử lý cho các trường hợp như muốn loại bỏ các thẻ/ký tự của HTML trong
đoạn text, chuyển các ký tự thành từ có nghĩa như “I love u 2” thành “I love you too”. Ở ví
dụ trên charater filter đã chuyển đổi ký tự "&" thành từ "and", vì vậy khi bạn tìm kiếm với từ
khóa "and" thì dữ liệu chứa ký tự "&" sẽ được liệt kê ra, một điều khó có thể thực hiện khi
search với các câu lệnh sql

Bước 2: Breaking into tokens

Sau khi đoạn text đã được xử lý chuyển đổi các ký tự xong, nó sẽ được phân tách
thành các tokens độc lập sử dụng các tokenizers. Elasitcsearch cung cấp rất nhiều tokenizers
để phục vụ cho yêu cầu bài toán của bạn, ví dụ như whitespace tokenizer sẽ tách đoạn text
thành các tokens dựa váo các khoảng trắng whitespace: "artic region" sẽ output ra 2
token artic, region, hoặc letter tokenizer sẽ tách đoạn text thành các token dựa vào
whitespace và các ký tự đặc biệt: "sun-asterisk company" sẽ có output là 3 tokens sun,
asterisk, company

Bước 3: Token filtering

Sau khi đoạn text được tách và cho ra output là các tokens, các tokens này sau đó sẽ
được đưa vào một hoặc nhiều các Token filters, tại đây các tokens sẽ được xóa bợt, thêm
hoặc chỉnh sửa tùy vào loại token filter. Các token này sẽ hữu ích trong trường hợp bạn muốn
chuyển các token về dạng lowercase và ngược lại, hoặc có thể thêm token mới "tools" như ở
ví dụ trên. Một analyzer có thể có không hoặc nhiều token filters

Bước 4: Token indexing

Sau khi các token đã đi qua 0 hoặc nhiều token filters chúng đã được gửi tới Lucene để
được lập đánh index. Một analyzer sẽ bao gồm không hoặc nhiều character filters, một
tokenizer, và không hoặc nhiều token filters
Tùy thuộc vào loại query bạn sử dụng, analyzer này cũng có thể được áp dụng cho tìm kiếm
văn bản trước khi search được thực hiện. Đặc biệt, các query chứa các truy vấn match và
match_phrase thực hiện analysis trước khi thực hiện tìm kiếm, để xử lý dữ liệu trước, nhờ
vậy thì kết quả tìm kiếm trả về sẽ chính xác hơn và việc tìm kiếm cũng nhanh hơn.
Ưu điểm và nhược điểm của Elasticsearch

Ưu điểm của Elasticsearch


• Làm một công cụ được phát triển dựa trên nền tảng Apache Lucene xử lý dữ liệu mạnh
mẽ gần với thời gian thực – near-real time
• Không chỉ tìm kiếm dữ liệu, Elasticsearch còn hỗ trợ phân tích dữ liệu
• Khả năng mở rộng rất mạnh mẽ và tuyệt vời
• Hỗ trợ nhiều ngôn ngữ lập trình khác nhau cho các lập trình viên trở nên thoải mái hơn
• Hỗ trợ Structured Query DSL để cung cấp các đặc tả cho những truy vấn phức tạp một
cách rõ ràng và cụ thể bằng JSON.
• Có thể tìm kiếm bằng nhiều loại ngôn ngữ khác nhau.
Nhược điểm của Elasticsearch
Không phải là một công cụ toàn năng, vì thế, Elasticsearch cũng có một số nhược điểm
đáng chú ý. Khi sử dụng, bạn nên chú ý một số điểm như:

• Elasticsearch được thiết kế cho mục đích tìm kiếm là chính. Do đó, đối với những
nhiệm vụ, chức năng khác, Elasticsearch sẽ đáp ứng kém hơn so với những phần mềm,
công cụ chuyên dụng khác.
• Đối với một số truy vấn nặng, độ trễ của Elasticsearch sẽ tăng rất nhiều lần.
• Để khai thác được chức năng của Elasticsearch một cách tối ưu nhất, bạn sẽ cần:
• Có rất nhiều kiến thức chuyên môn
• Thông thạo ngôn ngữ lập trình Java
• Một trong những điểm đáng lưu tâm khác: Elasticsearch không có khái niệm
database transaction. Vì thế, tính toàn vẹn của dữ liệu sẽ không được đảm bảo và bạn
không nên sử dụng vào database chính của mình.
Nếu ứng dụng, hệ thống của bạn cần phải thường xuyên cập nhật dữ liệu, Elasticsearch
sẽ bộc lộ nhược điểm gây tốn kém tài nguyên cho việc index dữ liệu

3. XÂY DỰNG HỆ THỐNG NHẬN DẠNG VÀ TÌM KIẾM ẢNH NHÂN VẬT
HOẠT HÌNH
3.1 Sơ đồ khối của hệ thống và quy trình thực hiện yêu cầu
3.1.1 Sơ đồ khối

3.2 Quy trình thực hiện


a. Luồng dữ liệu
+ Tạo kho dữ liệu ảnh nhân vật hoạt hình

+ Trích xuất đặc trưng của từng bức ảnh trong kho dữ liệu ảnh nhân vật hoạt hình

+ Lưu các đặc trưng được trích xuất thành các vector

b. Luồng truy vấn


+ Nhập ảnh cần tìm kiếm

+ Trích xuất đặc trưng của ảnh đó và lưu vào một vector

c. Luồng so sánh
+ So sánh độ tương đồng hoặc khoảng cách giữa vector của ảnh cần truy vấn với các
vector được trích xuất ra từ kho dữ liệu

+ Sắp xếp kết quả

+ Hiển thị kết quả

4. Trình bày các thuộc tính được sử dụng để nhận dạng ảnh nhân vật hoạt hình trong
hệ thống, cùng các kỹ thuật để trích rút các thuộc tính đó.
- Thuộc tính được sử dụng là màu sắc
- Các bước để trích rút thuộc tính là:
+ Bước 1: Tiền xử lý
+ Bước 2: Trích rút đặc trưng và lập chỉ mục hình ảnh
4.1 Tiền xử lý
- Như đã trình bày ở trên, thay vì sử dụng mô hình màu RGB sẽ sử dụng mô hình
màu HSV để tăng độ chính xác cho bài toán nhận diện ảnh dựa trên màu sắc. Vậy
nên, chuyển đổi ảnh RGB sang HSV.
- Ban đầu ảnh thuộc hệ RGB. Nhóm thực hiện chuyển đổi tuyến tính từ RGB sang
HSV theo công thức dưới đây:

R’= R/255, G’ = G/255, B’ = B/255


Cmax = max ( R ', G ', B ')
Cmin = min ( R ', G ', B ')
∆= Cmax – Cmin

Tính Hue:

Tính Saturation:
Tính Value:

4.2 Trích rút đặc trưng và lập chỉ mục hình ảnh

Thực hiện tính toán biểu đồ màu dạng xác suất cho ảnh đầu vào:

- Chọn số lượng bin cho biểu đồ màu (khi ta chia miền giá trị thành các phần,mỗi
phần là 1 bin)
+ Nếu chọn ít bin, thì biểu đồ sẽ có ít thành phần hơn và không thể phân
biệt giữa hình ảnh với sự phân bố màu sắc khác nhau đáng kể.

+ Còn nếu chọn quá nhiều bin, biểu đồ sẽ có nhiều thành phần và hình ảnh
có nội dung khác nhau mặc dù ở thực tế chúng là giống nhau.
 Chọn 8 bins trên kênh Hue, 12 bins trên kênh Saturation, 3 bins trên kênh Value
=> Vectơ đặc trưng có 3 x 12 x 8 = 288 phần tử.
- Chia vùng ảnh: Nhận thấy khu vực trung tâm của hình ảnh là khu vực quan trọng
nhất của nhiếp ảnh. Chúng ta thường tập trung các bức ảnh của mình vào đối
tượng để làm cho bức ảnh trở nên thẩm mỹ nhất có thể. Vậy nên, chia hình ảnh
thành 5 vùng: góc trên trái, góc trên phải, góc dưới phải, góc dưới trái và trung tâm
của hình ảnh.
- Sử dụng mặt nạ cho từng vùng ảnh vừa được chia. Mặt nạ che đi những phần không
muốn tính toán. Tại các điểm ảnh có giá trị 255 (màu trắng) thì mới được đưa vào
tính toán biểu đồ, các điểm ảnh có giá trị 0 (màu đen) thì bỏ qua.

- Trích xuất biểu đồ màu theo thứ tự 1, 2, 3, 4, 5 như cách chia ở trên bằng cách: sử
dụng hình ảnh muốn trích xuất đặc trưng làm đối số đầu tiên, mặt nạ đại diện cho
vùng muốn mô tả làm đối số thứ 2. Biểu đồ trả về là biểu đồ biểu diễn cho vùng
hiện tại và bình thường hóa biểu đồ màu và lưu vào danh sách vectơ đặc trưng.
+ Bình thường hóa biểu đồ màu: Chuyển biểu đồ màu từ dạng tần xuất
sang xác xuất. Để mỗi biểu đồ được biểu thị bằng tỷ lệ phần trăm tương
đối cho một bin cụ thể chứ không phải số nguyên cho mỗi bin. Và các
hình ảnh có nội dung tương tự nhưng kích thước khác nhau đáng kể vẫn
sẽ là tương tự nhưmột khi chúng ta áp dụng chức năng tương tự.
 Vectơ đặc trưng biểu diễn cho mỗi vùng trong 5 vùng hình ảnh đã chia.
Mỗi phần được biểu thị bằng 1 biểu đồ với 8 x 12 x 3 = 288 phần tử (tương
ứng với vector đặc trưng cho từng vùng với 288 chiều). Nối 5 vector đặc
trưng trên lại với nhau ta thu được vectơ đặc trưng của hình ảnh với 288 x
5 = 1440 chiều.
 Vậy mỗi hình ảnh biểu diễn bằng 1 vector đặc trưng 1440 chiều.
- Từ vectơ đặc trưng, nhóm xây dựng chỉ mục phục vụ cho nhận diện ảnh gồm
có id_image và vectơ đặc trưng.
5. Trình bày cách lưu trữ và quản lý các thuộc tính ảnh nhân vật hoạt hình và cách
nhận dạng, tìm kiếm các ảnh trong CSDL dựa trên các thuộc tính đó.
5.1 Lưu trữ và quản lý các thuộc tính
- Sau khi trích xuất đặc trưng thì dữ liệu của mỗi bức ảnh sẽ được lưu vào một
vector và các vector này được lưu và xuất ra files csv
5.2 Truy vấn ảnh
5.2.1 Bước 1: Nhập ảnh đầu vào mà cần truy vấn
5.2.2 Bước 2: Trích xuất xuất đặc trưng về màu sắc của bức ảnh đó
5.2.3 Bước 3: Lưu cái đặc trưng vừa được trích xuất vào một vector
5.2.4 Bước 4: So sánh độ tương đồng giữa 2 vector đặc trưng ảnh truy vấn và ảnh
trong CSDL

- Để kiểm tra độ tương đồng giữa ảnh truy vấn và các ảnh sẵn có trong CSDL
thì nhóm tính bình phương khoảng cách giữa vectơ đặc trưng của ảnh truy vấn
và ảnh trong CSDL.

Trong đó: 𝑎𝑖, 𝑏𝑖 lần lượt là từng giá trị của vectơ đặc trưng A ,
Beps = 1e-10 để tránh việc chia cho 0
n số chiều của vector đặc trưng (trong bài n = 1440)
Giải thích: Công thức dựa trên thống kê kiểm tra chi bình phương của Pearson
được sử dụng để so sánh phân phối xác suất rời rạc. Do đang so sánh biểu đồ
màu theo phân phối xác suất xác định nên hàm chi bình phương sẽ cho kết
quả tốt hơn cả
+ Khi khoảng cách bằng 0 thì 2 ảnh được coi là giống hệt nhau
+ Khi khoảng cách càng lớn hơn 0 thì độ tương tự càng ít và 2 ảnh ít giống
nhau hơn
- Sắp xếp kết quả theo thứ tự tăng dần (hình ảnh càng giống với ảnh truy vấn ở
đầu danh sách)
Bước 5: Đưa ra những bức ảnh có khoảng cách là thấp nhất (khoảng cách giữa 2 vector)

You might also like