1. Trang chủ >
  2. Luận Văn - Báo Cáo >
  3. Công nghệ thông tin >

2 Phương pháp sử dụng đặc trƣng Haar kết hợp Adaboost

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.87 MB, 67 trang )


Là một cải tiến của tiếp cận boosting, Adaboost sử dụng thêm khái

niệm trọng số (weight) để đánh dấu các mẫu khó nhận dạng. Trong quá

trình huấn luyện, cứ mỗi weak classifier đƣợc xây dựng, thuật toán sẽ tiến

hành cập nhật lại trọng số để chuẩn bị cho việc xây dựng weak classifier kế

tiếp: Tăng trọng số của các mẫu bị nhận dạng sai và giảm trọng số của các

mẫu đƣợc nhận dạng đúng bởi weak classifier vừa xây dựng. Bằng cách

này, các weak classifier sau có thể tập trung vào các mẫu mà các weak

classifiers trƣớc nó chƣa làm tốt. Sau cùng, các weak classifiers sẽ đƣợc kết

hợp tuỳ theo mức độ “tốt” của chúng để tạo dựng nên strong classifier.

Có thể hình dung một cách trực quan nhƣ sau: Để biết một ảnh có

phải là bàn tay hay không, ta hỏi T ngƣời (tƣơng đƣơng với T weak

classifiers xây dựng từ T vòng lặp của boosting), đánh giá của mỗi ngƣời

(tƣơng đƣơng với một weak classifier) chỉ cần tốt hơn ngẫu nhiên một chút

(tỉ lệ sai dƣới 50%). Sau đó, ta sẽ đánh trọng số cho đánh giá của từng

ngƣời (thể hiện qua hệ số α), ngƣời nào có khả năng đánh giá tốt các mẫu

khó thì mức độ quan trọng của ngƣời đó trong kết luận cuối cùng sẽ cao

hơn những ngƣời chỉ đánh giá tốt đƣợc các mẫu dễ. Việc cập nhật lại trọng

số của các mẫu sau mỗi vòng boosting chính là để đánh giá độ khó của các

mẫu (mẫu càng có nhiều ngƣời đánh giá sai là mẫu càng khó).

Các weak classifiers h k (x) đƣợc biểu diễn nhƣ sau:

𝑕𝑘 𝑥 =



1, 𝑝 𝑘 𝑓 𝑘 𝑥 < 𝑝 𝑘 𝜃 𝑘

0, 𝑜𝑡𝑕𝑒𝑟𝑤𝑖𝑠𝑒



Trong đó:

• x = (x1, x2,..., Xn): vector đặc trƣng của mẫu.

• θ: ngƣỡng

• f k : hàm lƣợng giá vector đặc trƣng của mẫu

• p k : hệ số quyết định chiều của bất phƣơng trình



Hình 2.7: Kết hợp các bộ phân loại yếu thành bộ phân loại mạnh

29



Thuật toán Adaboost:

1. Cho một tập gồm n mẫu có đánh dấu (x1,y1), (x2,y2),… (xn,yn) với xk

∈ (xk1, xk2,…, xkm) là vector đặc trƣng và yk ∈ (-1, 1) là nhãn của mẫu

(1 ứng với object, -1 ứng với background).

2. Khởi tạo trọng số ban đầu cho tất cả các mẫu: với m là số mẫu đúng

(ứng với object và y = 1) và l là số mẫu sai (ứng với background và y

= -1).



3. Xây dựng T weak classifiers

Lặp t = 1,…, T

 Với mỗi đặc trƣng trong vector đặc trƣng, xây dựng một weak

classifier hj với ngƣỡng θj và lỗi εj.



 Chọn ra hj với εj nhỏ nhất, ta đƣợc ht:

 Cập nhật lại trọng số:



 Trong đó:



: Hệ số dùng để đƣa



về đoạn [0,1] (normalization factor)



4. Strong classifier đƣợc xây dựng:



30



2.2.2 Đặc trƣng Haar

Đặc trƣng Haar là một loại đặc trƣng thƣờng đƣợc dùng cho bài toán

nhận dạng trên ảnh. Đặc trƣng Haar đƣợc xây dựng từ các hình chữ nhật

nhằm mục đích tính độ chênh lệch giữa giá trị các điểm ảnh trong các vùng

kề nhau.

Giá trị của đặc trƣng đƣợc tính bằng tổng giá trị các điểm ảnh trong

vùng màu trắng trừ đi tổng các điểm ảnh trong các vùng màu đen.



Hình 2.8: Vài đặc trƣng Haar cơ bản

Một điểm mạnh của đặc trƣng Haar là có thể biểu diễn đƣợc các

thông tin về mối liên hệ giữa các vùng trong một bức ảnh. Ví dụ:



Hình 2.9: Áp dụng đặc trƣng Haar vào ảnh

Viola và Jones đã đƣa ra khái niệm ảnh tích phân ( Integral Image )

để tính nhanh các đặc trƣng Haar.



31



Lienhart kế thừa (gọi Integral Image là SAT Summed Area Table) và

đƣa ra thêm khái niệm RSAT – Rotated Summed Area Table để tính toán

nhanh cho các đặc trƣng xoay 1 góc 45º.

Một vài đặc trƣng:



Hình 2.10: Đặc trƣng cạnh (edge features):



Hình 2.11: Đặc trƣng đƣờng (line features):



Hình 2.12: Đặc trƣng xung quanh tâm (center-surround features):

 Với SAT:



Hình 2.13: Mô tả về SAT

Ảnh tích phân tại các điểm (x, y):

𝑖(𝑥 ′ , 𝑦 ′ )



𝑆𝐴𝑇 𝑥, 𝑦 =

𝑥 ′ ≤𝑥,𝑦 ′ ≤𝑦



Cách tính nhanh các phần tử của bảng SAT:

SAT(x, y) = SAT (x, y-1) + SAT(x-1, y) + I(x, y) – SAT(x-1, y-1)

Với SAT(-1, y) = SAT(x, -1) = SAT(-1, -1) = 0;

Cách tính nhanh các đặc trƣng hình chữ nhật:

32



SUM( D ) = 4 + 1 – 2 – 3

 Với RSAT:



A



B



1



D



2



C

3



4



RSAT(x,y)



(b)



(a)



Hình 2.14: Mô tả về RSAT

Ảnh tích phân tại các điểm (x, y):

𝐼(𝑥 ′ , 𝑦 ′ )



𝑅𝑆𝐴𝑇 𝑥, 𝑦 =

𝑦′ ≤𝑦 ,𝑦′ ≤𝑦−|𝑥−𝑥′ |



Cách tính nhanh các phần tử của bảng RSAT:

RSAT(x, y) = RSAT (x-1, y-1) + SAT(x+1, y-1)

- RSAT(x, y-2)+I(x, y) + I(x, y-1)

33



Tổng pixel của một vùng bất kỳ trên ảnh vẫn đƣợc tính theo cách sau:

D = A + B + C + D – (A+B) – (A+C) + A

Nhƣ vậy tổng các điểm ảnh trong một hình chữ nhật (kể cả trƣờng hợp

xoay 45º) bất kì đều có thể đƣợc tính nhanh dựa trên integral image tại 4

đỉnh của nó:

Sum (D ) = 4 - 2 – 3 + 1

2.2.3 Hệ thống xác định vị trí khuôn mặt trong ảnh



Hình 2.15: Mô hình hệ thống xác định vị trí khuôn mặt trong ảnh

Nhƣ trong hình 2.16 từ ảnh gốc ban đầu, ta sẽ đƣợc tính Integral

Image, là mảng 2 chiều với phần tử (x, y) sẽ đƣợc tính bằng tổng của các

phần tử (x', y') với x' < x và y' < y, mục đích là để tính nhanh tổng của các

giá trị mức xám của một vùng hình chữ nhật bất kỳ trên ảnh gốc. Các vùng

ảnh con này sẽ đƣợc đƣa qua các hàm Haar cơ bản để ƣớc lƣợng đặc trƣng,

kết quả ƣớc lƣợng sẽ đƣợc đƣa qua bộ điều chỉnh AdaBoost để loại bỏ

nhanh các đặc trƣng không có khả năng là đặc trƣng của khuôn mặt ngƣời.

Chỉ có một tập nhỏ các đặc trƣng mà bộ điều chỉnh AdaBoost cho là có khả

năng là đặc trƣng của khuôn mặt ngƣời mới đƣợc chuyển sang cho bộ

quyết định kết quả. Bộ quyết định sẽ tổng hợp kết quả là khuôn mặt ngƣời

nếu kết quả của các bộ phân loại yếu trả về là khuôn mặt ngƣời.

34



Mỗi bộ phân loại yếu sẽ quyết định kết quả cho một đặc trƣng Haarlike, đƣợc xác định ngƣỡng đủ nhỏ sao cho có thể vƣợt đƣợc tất cả các bộ

dữ liệu mẫu trong tập dữ liệu huấn luyện (số lƣợng ảnh khuôn mặt trong

tập huấn luyện có thể rất lớn). Trong quá trình xác định khuôn mặt ngƣời,

mỗi vùng ảnh con sẽ đƣợc kiểm tra với các đặc trƣng trong chuỗi các đặc

trƣng Haar-like, nếu có một đặc trƣng Haar-like nào cho ra kết quả là

khuôn mặt ngƣời thì các đặc trƣng khác không cần xét nữa. Thứ tự xét các

đặc trƣng trong chuỗi các đặc trƣng Haar-like sẽ đƣợc dựa vào trọng số

(weight) của đặc trƣng đó do AdaBoost quyết định dựa vào số lần và thứ tự

xuất hiện của các đặc trƣng Haar-like [33].

2.3 Dựa trên đặc trƣng không thay đổi

Đây là hƣớng tiếp cận theo kiểu bottom-up. Các tác giả cố gắng tìm

các đặc trƣng không thay đổi của khuôn mặt để phát hiện mặt ngƣời. Dựa

trên nhận xét thực tế, con ngƣời dễ dàng nhận biết các khuôn mặt và các

đối tƣợng trong các tƣ thế khác nhau và điều kiện ánh sáng khác nhau, thì

phải tồn tại các thuộc tính hay đặc trƣng không thay đổi.

Có nhiều nghiên cứu đầu tiên xác định các đặc trƣng khuôn mặt rồi

chỉ ra có khuôn mặt trong ảnh hay không. Các đặc trƣng nhƣ: Lông mày,

mắt, mũi, miệng, và đƣờng viền của tóc đƣợc trích bằng phƣơng pháp xác

định cạnh. Trên cơ sở các đặc trƣng này, xây dựng một mô hình thống kê

để mô tả quan hệ của các đặc trƣng này và xác định sự tồn tại của khuôn

mặt trong ảnh. Một vấn đề của các thuật toán theo hƣớng tiếp cận đặc trƣng

cần phải điều chỉnh cho phù hợp điều kiện ánh sáng, nhiễu, và bị che khuất.

Đôi khi bóng của khuôn mặt sẽ tạo thêm cạnh mới, mà cạnh này lại rõ hơn

cạnh thật sự của khuôn mặt, vì thế nếu dùng cạnh để xác định sẽ gặp

khó khăn.

2.3.1 Các đặc trƣng khuôn mặt

Sirohey đƣa một phƣơng pháp phát hiện mặt từ một ảnh có hình nền

phức tạp [28]. Phƣơng pháp dựa trên cạnh, dùng phƣơng pháp Candy [14]

và heuristics để loại bỏ các cạnh để còn lại duy nhất một đƣờng bao xung

quanh khuôn mặt. Một hình ellipse dùng để bao khuôn mặt, tách biệt vùng

đầu và hình nền. Tỷ lệ chính xác của thuật toán là 80%.

Cũng dùng phƣơng pháp cạnh nhƣ Sirohey, Chetverikov và Lerch

dùng một phƣơng pháp dựa trên blob và streak (hình dạng giọt nƣớc và sọc

35



xen kẽ), để xác định theo hƣớng các cạnh. Hai ông dùng hai blob tối và ba

blob sáng để mô tả hai mắt, hai bên gò má, và mũi. Mô hình này dùng các

treak để mô tả hình dáng ngoài của khuôn mặt, lông mày, và môi. Dùng

ảnh có độ phân giải thấp theo biến đổi Laplace để phát hiện mặt thông qua

blob. Graf đƣa ra một phƣơng pháp xác định đặc trƣng rồi phát hiện mặt

trong ảnh xám [11]. Dùng bộ lọc để làm nổi các biên, các phép toán hình

thái học (morphology) đƣợc dùng để làm nổi bật các vùng có cƣờng độ cao

và hình dáng chắc chắn (nhƣ mắt). Thông qua histogram để tìm các đỉnh

nổi bật để xác định các ngƣỡng chuyển ảnh xám thành hai ảnh nhị phân.

Các thành phần dính nhau đều xuất hiện trong hai ảnh nhị phân thì đƣợc

xem là vùng của ứng cử viên khuôn mặt rồi phân loại xem có phải là khuôn

mặt không. Phƣơng pháp đƣợc kiểm tra trên các ảnh chỉ có đầu và vai của

ngƣời. Tuy nhiên còn vấn đề, làm sao sử dụng các phép toán morphology

và làm sao phát hiện mặt trên các vùng ứng viên.

Leung trình bày một mô hình xác suất để phát hiện mặt ở trong ảnh

có hình nền phức tạp trên cơ sở một bộ xác định đặc trƣng cục bộ và so

khớp đồ thị ngẫu nhiên [32]. Ý chính là xem bài toán phát hiện mặt nhƣ là

bài toán tìm kiếm với mục tiêu là tìm thứ tự các đặc trƣng chắc chắn của

khuôn mặt để tạo thành giống nhất một mẫu khuôn mặt. Dùng năm đặc

trƣng (hai mắt, hai lỗ mũi, phần nối giữa mũi và miệng) để mô tả một

khuôn mặt. Luôn tính quan hệ khoảng cách với các đặc trƣng cặp (nhƣ mắt

trái, mắt phải), dùng phân bố Gauss để mô hình hoá. Một mẫu khuôn mặt

đƣợc đƣa ra thông qua trung bình tƣơng ứng cho một tập đa hƣớng, đa tỷ lệ

của bộ lọc đạo hàm Gauss. Từ một ảnh, các đặc trƣng ứng viên đƣợc xác

định bằng cách so khớp từng điểm ảnh khi lọc tƣơng ứng với vector mẫu

(tƣơng tự mối tƣơng quan), chọn hai ứng viên đặc trƣng đứng đầu để tìm

kiếm cho các đặc trƣng khác của khuôn mặt. Giống nhƣ xây dựng một đồ

thị quan hệ mỗi node của đồ thị tƣơng ứng nhƣ các đặc trƣng của một

khuôn mặt, đƣa xác suất vào để xác định. Tỷ lệ xác định chính xác là 86%.

Bên cạnh tính khoảng cách liên quan để mô tả quan hệ giữa các đặc

trƣng nhƣ Leung [32]. Kendall [6] dùng lý thuyết xác suất thống kê về hình

dáng. Dùng hàm mật độ xác suất (Probility Density Function - PDF) qua N

điểm đặc trƣng, tƣơng ứng (xi, yi) là đặc trƣng thứ i với giả sử dựa vào

phân bố Gauss có 2N-chiều. Các tác giả áp dụng phƣơng thức cực đại khả

năng (Maximum- Likelihood - ML) để xác định vị trí khuôn mặt. Một

thuận lợi của phƣơng pháp này là các khuôn mặt bị che khuất vẫn có thể

36



xác định đƣợc. Nhƣng phƣơng pháp không xác định đƣợc đa khuôn mặt

trong ảnh.

Yow và Cipolla [17] trình bày một phƣơng thức dựa vào đặc trƣng,

dùng số lƣợng lớn các dấu hiệu từ ảnh và cả dấu hiệu về ngữ cảnh. Đầu tiên

dùng bộ lọc đạo hàm Gauss thứ hai, xác định các điểm mấu chốt ở tại cực

đại địa phƣơng trong bộ lọc, rồi chỉ ra nơi có thể là đặc trƣng. Giai đoạn

hai, kiểm tra các cạnh xung quanh điểm mấu chốt và nhóm chúng lại thành

các vùng. Tiêu chuẩn để nhóm các cạnh là gần và tƣơng tự hƣớng và cƣờng

độ. Đo lƣờng các đặc tính vùng nhƣ: chiều dài cạnh, cƣờng độ cạnh, và

biến thiên cƣờng độ đƣợc lƣu trong một vector đặc trƣng. Từ dữ liệu đặc

trƣng khuôn mặt đã đƣợc huấn luyện, sẽ tính đƣợc giá trị trung bình và ma

trận hiệp phƣơng sai của mỗi đặc trƣng khuôn mặt. Một vùng là ứng viên

khuôn mặt khi khoảng cách Mahalanobis giữa các vector đặc trƣng đều

dƣới một ngƣỡng. Rồi thông qua mạng Bayes để xác định ứng viên có phải

là khuôn mặt không. Tỷ lệ chính xác là 85%, tuy nhiên mức độ sai là 28%,

và chỉ hiệu quả với hình khuôn mặt có kích thƣớc 60x60 điểm ảnh. Phƣơng

pháp này đƣợc dùng thêm với mô hình đƣờng viền linh hoạt.

Takacs và Wechsler trình bày một phƣơng pháp dựa trên tích đặc

trƣng võng mạc và cử động theo dao động nhỏ của mắt. Thuật toán hoạt

động trên bản đồ hay vùng của các mấu chốt, mô hình hoá lƣới võng mạc.

Đầu tiên tính toán ƣớc lƣợng thô vùng khuôn mặt trên cơ sở bộ lọc. Giai

đoạn thứ hai tinh chế trên độ phân giải mịn hơn. Tỷ lệ sai là 4.69%.

Han phát triển một kỹ thuật trên cơ sở morphology để trích các đoạn

giống mắt (eyeanalogue) để phát hiện mặt ngƣời. Ông nói rằng mắt và lông

mày là đặc trƣng nổi bật nhất và ổn định nhất của khuôn mặt con ngƣời, và

nó rất hữu dụng để phát hiện mặt ngƣời. Ông định nghĩa các đoạn giống

mắt nhƣ là các cạnh trên đƣờng viền của mắt. Đầu tiên, các phép toán

morphology nhƣ đóng, cắt bỏ sai khác, và phân ngƣỡng để trích các điểm

ảnh có giá trị cƣờng độ thay đổi đáng kể. Các điểm ảnh này sẽ trở thành các

điểm ảnh giống mắt. Sau đó một tiến trình gán nhãn để sinh các đoạn giống

mắt. Các đoạn này đƣợc dùng để chỉ dẫn tìm kiếm các vùng tiềm năng có

thể là khuôn mặt qua kết hợp các đặc tính hình học của mắt, mũi, lông mày,

và miệng. Các vùng này sẽ đƣợc một mạng neural xem xét có phải là

khuôn mặt không, giống [9]. Theo tác giả tỷ lệ chính xác là 94%.



37



Amit đƣa ra phƣơng thức phát hiện mặt dựa trên hình dáng và áp

dụng cho các khuôn mặt chụp thẳng. Có hai giai đoạn để phát hiện mặt

ngƣời: tập trung và phân loại chi tiết. Làm có thứ tự các mảnh cạnh, các

mảnh này đƣợc trích từ bộ xác định cạnh đơn giản thông qua sự khác biệt

cƣờng độ là quá trình tập trung. Khi có các ứng viên từ quá trình trên, dùng

thuật toán CART để xây dựng một cây phân loại từ các ảnh để huấn luyện,

để xem xét ứng viên nào là khuôn mặt ngƣời.

Jin dùng cấu trúc hình học của khuôn mặt ngƣời để tìm ứng viên

khuôn mặt trong ảnh xám và hình nền không phức tạp. Mỗi ảnh chỉ có một

khuôn mặt ngƣời, nhƣng tƣ thế điều kiện ánh sáng, không cố định. Tỷ lệ

chính xác khoảng 94.25% và thời gian khá nhanh.

Chan và Lewis [30] dùng kỹ thuật lọc để loại bớt tác động của ánh

sáng, sau đó phân đoạn để tìm vị trí các ứng viên là con mắt. Từ các ứng

viên này xây dựng mạng neural nhƣ Rowley [10] để phát hiện mặt ngƣời.

Phƣơng pháp này có thể xác định nhiều khuôn mặt trong một ảnh, các

khuôn mặt này có thể có các tƣ thế, vị trí, tỷ lệ khác nhau. Tỷ lệ chính xác

là 53%.

Kruppa [12] dùng sắc màu của da ngƣời để tìm ứng viên, nhƣng ông

không xử lý cho từng điểm ảnh theo cách thông thƣờng, mà ông dùng mô

hình màu da ngƣời trên từng phần nhỏ rồi xử lý phân đoạn trên đó. Sau khi

có ứng viên khuôn mặt, ông dùng một số đặc tính về hình dáng để phát

hiện mặt ngƣời. Tỷ lệ chính xác là 85%.

Park dùng Gaze để tìm ứng viên góc mắt, miệng và tâm mắt [19].

Ông xây dựng SVM đã đƣợc học trƣớc đó để xác định các vị trí ứng viên

có phải là góc mắt, miệng, và tâm mắt hay không để theo vết con

mắt ngƣời.

Sato [13] dùng quan hệ đƣờng viền ở cằm của khuôn mặt. Tác giả

chia làm hai trƣờng hợp: thon dài và tròn để xem xét. Tác giả dùng GA để

xem xét mối tƣơng quan của đƣờng cong, hình dáng khuôn mặt để phát

hiện mặt.

Chai và Ngan xây dựng phƣơng pháp phát hiện mặt ngƣời dựa trên

đặc trƣng về: quan hệ hình học, mật độ, độ chói trong ảnh màu chỉ có đầu

và vai của ứng viên để xác định. Kim [16] cũng phân đoạn để tìm ứng viên



38



khuôn mặt, nhƣng xác thực khuôn mặt thông qua các cấu trúc các đặc trƣng

mắt, mũi, miệng, và đƣờng viền của ứng viên.

Jang [21] dùng phân bố màu da để phân đoạn tìm ứng viên rồi dùng

các đặc trƣng hình học để phát hiện mặt. Christian và Jonh xây dựng một

loại đặc trƣng mới, đó là đặc trƣng về độ cong của các đƣờng trên khuôn

mặt để giải quyết vấn đề điều kiện ánh sáng. Từ đặc trƣng cong này, hai

ông quay lại phƣơng pháp PCA để phát hiện mặt.

Juan và Narciso xây dựng một không gian màu mới YCg’Cr’ để lọc

các vùng là ứng viên khuôn mặt dựa trên sắc thái của màu da ngƣời. Sau

khi có ứng viên, hai ông dùng các quan hệ về hình dáng khuôn mặt, mức độ

cân đối của các thành phần khuôn mặt để phát hiện mặt ngƣời. Tƣơng tự,

Chang và Hwang cũng dùng một phƣơng thức dùng không gian mầu

Ycg’Cr’, tỷ lệ chính xác hơn 80% trong ảnh xám.

Dae và Nam xem xét các đặc trƣng không thay đổi khi thay đổi tƣ

thế của khuôn mặt bằng cách xem xét các quan hệ hình học. Sau đó ƣớc

lƣợng các tƣ thế của khuôn mặt rồi xây dựng dữ liệu để xác định thông qua

PCA. Tỷ lệ chính xác là 76%.

Jin xây dựng một bộ lọc để xác định ứng viên khuôn mặt ngƣời theo

màu da ngƣời. Từ ứng viên này tác giả phát hiện mặt ngƣời theo hình dáng

khuôn mặt và các quan hệ đặc trƣng về thành phần khuôn mặt, với mắt phải

đƣợc chọn làm gốc toạ độ để xét quan hệ. Tỷ lệ chính xác cho khuôn mặt

chụp thẳng trên 80%.

2.3.2 Kết cấu

Khuôn mặt con ngƣời có những kết cấu riêng biệt mà có thể dùng để

phân loại so với các đối tƣợng khác. Augusteijn và Skufca cho rằng hình

dạng của khuôn mặt dùng làm kết cấu phân loại, gọi là kết cấu giống khuôn

mặt (face-like texture). Tính kết cấu qua các đặc trƣng thống kê thứ tự thứ

hai (SGLD) trên vùng có kích thƣớc 16x16 điểm ảnh. Có ba loại đặc trƣng

đƣợc xem xét: màu da, tóc, và những thứ khác. Hai ông dùng mạng neural

về mối tƣơng quan cascade cho phân loại có giám sát các kết cấu và một

ánh xạ đặc trƣng tự tổ chức Kohonen để gom nhóm các lớp kết cấu khác

nhau. Hai tác giả đề xuất dùng phƣơng pháp bầu cử khi không quyết định

đƣợc kết cấu đƣa vào là kết cấu của da hay kết cấu của tóc.



39



Xem Thêm
Tải bản đầy đủ (.pdf) (67 trang)

×