1. Trang chủ
  2. » Luận Văn - Báo Cáo

Thuật toán nhận diện ADABOOST Môn Trí Tuệ Nhân Tạo

43 320 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 43
Dung lượng 4,72 MB

Nội dung

Trí tuệ nhân tạo là một trong những môn khoa học nghiên cứu, tìm hiểu những yếu tố trí tuệ quy trình tạo ra thực thể thông minh ứng dụng thực tiễn, có vai trò quan trọng trên nhiều lĩnh vực nhằm phục vụ cho đời sống con người. Ngày nay, cùng với sự phát triển khoa học kỹ thuật, AI đã có những thành tựu đáng kể. Mặc dù không dự báo được tất cả , nhưng AI thực sự tuyệt vời cho sự văn minh của nhân loại.

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

   

THUẬT GIẢI ADABOOST - SƠ LƯỢC CÔNG NGHỆ NHẬN DẠNG KHUÔN MẶT

Trang 2

LỜI NÓI ĐẦU

rí tuệ nhân tạo là một trong những môn khoa học nghiên cứu, tìm hiểu những yếu

tố trí tuệ quy trình tạo ra thực thể thông minh ứng dụng thực tiễn, có vai trò quantrọng trên nhiều lĩnh vực nhằm phục vụ cho đời sống con người

T

Ngày nay, cùng với sự phát triển khoa học kỹ thuật, AI đã có những thành tựu đáng kể.Mặc dù không dự báo được tất cả , nhưng AI thực sự tuyệt vời cho sự văn minh của nhânloại

Và hôm nay, trong học kỳ này bộ môn Trí tuệ nhân tạo với những kiến thức bổ ích vànhiều đề tài thú vị thật sự mở cho sinh viên chúng em một thời đại công nghệ cao có tiềmnăng tuyệt đỉnh

Chính vì vậy, chúng em đã chọn đề tài “Sơ lược công nghệ nhận dạng khuôn mặt và thuậtgiải Adaboot ” Các thành viên của nhóm đã cố gắng học, tìm tài liệu, lắng nghe sự chỉbảo tận tình của thầy trong các buổi học Do sự hiểu biết kiến thức chưa sâu về bộ môn,chắc chắn đề tài của nhóm vẫn còn nhiều thiết sót Vì vậy, mong thầy xem xét lượng thứ,

và đóng góp ý kiến để chúng em ý thức hơn và rút kinh nghiệm cho các đề tài sau này.Cuối cùng, chúng em chân thành cám ơn thầy đã tạo cơ hội cho nhóm thực hiện đề tài

Trang 3

NHẬN XÉT CỦA GIÁO VIÊN BỘ MÔN

Trang 4

PHẦN 1 : BÀI TOÁN NHẬN DẠNG

I Giới thiệu về bài toán nhận dạng mặt người 5

II Những khó khăn trong bài toán xác định nhận dạng 5

III Ứng dụng trong thực tiễn 6

IV Phạm vi đề tài 9

PHẦN 2 : SƠ LƯỢC CÁC PHƯƠNG PHÁP NHẬN DẠNG I Hướng tiếp cận dựa trên tri thức 10

II Hướng tiếp cận dựa trên đặc trưng không thay đổi 10

III Hướng tiếp cận dựa trên so sánh khớp mẫu 11

IV Hướng tiếp cận dựa trên diện mạo 11

PHẦN 3 : CƠ SƠ LÝ LUẬN THUẬT GIẢI ADABOOST I Giới thiệu về Adaboots 12

II Booting nền tảng của Adaboots 12

III Adaboots 14

IV Các đặc trưng Haar - Like 21

V. Cascade of Classifiers 24

VI Cascade of boosting classifiers 26

PHẦN 4 : CÀI ĐẶT- THỬ NGHIỆM I Sơ lược về OpenCV 29

II Tổng quan về một hệ thống phát hiện mặt người trong ảnh 32

III Phân tích – thiết kế hệ thống phát hiện mặt người 33

PHẦN 5: DEMO CHƯƠNG TRÌNH 34

PHẦN 6: ĐÁNH GIÁ ƯU KHUYẾN ĐIỂM I Ưu điểm 39

II Khuyết điểm 39

III Hướng phát triển tương lai 40

Kết luận – Tài liệu tham khảo – Phụ lục 42

Trang 5

PHẦN 1 : BÀI TOÁN NHẬN DẠNG

I Giới thiệu về bài toán nhận dạng mặt người

Hệ thống mặt người là một hệ thống nhận vào một ảnh hoặc một đoạn video ( một chuỗicác ảnh ) Qua xử lý tính toán hệ thống xác định được vị trí mặt người trong ảnh ( nếu có) và xác định là người nào trong số những người hệ thống đã được biết ( trong quá trinhhọc ) hoặc là người lạ

II Những khó khăn trong bài toán xác định nhận dạng

Trong nhiều năm qua, có rất nhiều công trình nghiên cứu về bài toán nhận dạng mặtngười Các nghiên cứu đi từ bài toán đơn giản, từ việc nhận dạng một mặt người trongảnh đen trắng cho đến mở rộng cho ảnh mầu và có nhiều mặt người trong ảnh Đến naycác bài toán xác định mặt người đã mở rộng với nhiều miền nghiên cứu như nhận dạngkhuôn mặt, định vị khuôn mặt, theo dõi mặt người hay nhận dạng cảm xúc mặt người… Phát hiện mặt người trong ảnh là phần đầu tiên của một hệ thống nhận dạng mặtngười Các hệ thống nhận dạng khuôn mặt được bắt đầu xây dựng từ những năm 1970,tuy nhiên do còn hạn chế về các luật xác định mặt người nên chỉ được áp dụng trong một

số ứng dụng như nhận dạng thẻ căn cước Nó chỉ được phát triển mạnh mẽ từ những năm

1990 khi có những tiến bộ trong công nghệ video và ngày nay thì các ứng dụng của xác

Trang 6

Tuy nhiên hiện nay bài toán nhận dạng vẫn gặp những khó khăn nhất định

Tư thế, góc chụp: Ảnh chụp khuôn mặt có thể thay đổi rất nhiều bởi vì góc chụp giữa

camera và khuôn mặt Chẳng hạn như: chụp thẳng, chụp xéo bên trái 450 hay xéo bênphải 450, chụp từ trên xuống, chụp từ dưới lên, v.v ) Với các tư thế khác nhau, các thànhphần trên khuôn mặt như mắt, mũi, miệng có thể bị khuất một phần hoặc thậm chí khuấthết

Sự xuất hiện hoặc thiếu một số thành phần của khuôn mặt: Các đặc trưng như: râu

mép, râu hàm, mắt kính, v.v có thể xuất hiện hoặc không Vấn đềnày làm cho bài toáncàng trở nên khó hơn rất nhiều

Sự biểu cảm của khuôn mặt: Biểu cảm của khuôn mặt người có thể làm ảnh hưởng

đáng kể lên các thông số của khuôn mặt Chẳng hạn, cùng một khuôn mặt một người,nhưng có thể sẽ rất khác khi họ cười hoặc sợ hãi,v.v

Sự che khuất: Khuôn mặt có thể bị che khuất bởi các đối tượng khác hoặc các khuôn

mặt khác

Hướng của ảnh: Các ảnh của khuôn mặt có thể biến đổi rất nhiều với các góc quay khác

nhau của trục camera Chẳng hạn chụp với trục máy ảnh nghiêng làm cho khuôn mặt bịnghiêng so với trục của ảnh

Điều kiện của ảnh: Ảnh được chụp trong các điều kiện khác nhau về: chiếu sáng, về tính

chất camera (máy kỹ thuật số, máy hồng ngoại,v.v ) ảnh hưởng rất nhiều đến chất lượngảnh khuôn mặt

III Ứng dụng trong thực tiễn

Các hệ thống camera sẽ xác định đâu là con người và theo dõi xem con người đó có làm

gì phạm pháp không, ví dụ như lấy trộm đồ, xâm nhập bất hợp pháp vào một khu vực nàođó

Trang 7

• Tìm kiếm và tổ chức dữ liệu liên quan đến con người thông qua khuôn mặt ngườitrên nhiều hệ cơ sở dữ liệu lưu trữ thật lớn, như internet, các hãng truyền hình, ….

Ví dụ: tìm các đoạn video có tổng thống Bush phát biểu, tìm các phim có diễn viên

Lý Liên Kiệt đóng, tìm các trận đá bóng có Ronaldo đá, …

• Kiểm tra trạng thái người lái xe có ngủ gật, mất tập trung hay không, và hỗ trợ

Trang 8

• Tương lai sẽ phát triển các loại thẻ thông minh có tích hợp sẵn đặc trưng củangười dùng trên đó, khi bất cứ người dùng khác dùng để truy cập hay xử lý tại các

hệ thống sẽ được yêu cầu kiểm tra các đặc trưng khuôn mặt so với thẻ để biết nay

có phải là chủ thẻ hay không

• Hãng máy chụp hình Canon đã ứng dụng bài toán xác định khuôn mặt người vàomáy chụp hình thế hệ mới để cho kết quả hình ảnh đẹp hơn, nhất là khuôn mặtngười

IV Tổng quan kiến trúc một hệ thống nhận dạng mặt người

Một hệ thống nhận dạng mặt người thông thường bao gồm bốn bước xử lý

sau: phát hiện khuôn mặt (face detection), phân đoạn khuôn mặt (face alignment hay segmentation), rút trích đặc trưng (feature extraction), và phân lớp khuôn mặt (face

classification)

Trang 9

Phát hiện khuôn mặt dò tìm và định vị những vị trí khuông mặt xuất hiện trong ảnh hoặc

trên các frame video Phân đoạn khuôn mặt sẽ xác định vị trí mắt mũi, miệng, và các thành phần khác của khuôn mặt và chuyển kết quả này cho bước rút trích đặc trưng Từ

những thông tin về các thành phần trên khuôn mặt, chúng ta có thể dễ dàng tính đượcvéc-tơ đặc trưng trong bước rút trích đặc trưng Những véc-tơ đặc trưng này sẽ là dữ liệu

đầu vào cho một mô hình đã được huấn luyện trước để phân loại khuôn mặt Bên cạnh những bước chính nêu trên, chúng ta còn có thể áp dụng thêm một số bước khác như tiền

xử lý, hậu xử lý nhằm làm tăng độ chính xác cho hệ thống Do một số thông số như: tư

thế khuôn mặt, độ sáng, điều kiện ánh sáng, v.v…, phát hiện khuôn mặt được đánh giá là

bước khó khăn và quan trọng nhất so với các bước còn lại của hệ thống Trong đề tài này,

tập trung chủ yếu vào bước phát hiện khuôn mặt.

V Phạm vi đề tài

Trong đề tài này, nhóm tập trung vào việc xác định khuôn mặt trong ảnh dựa trênnền tảng Cở sở lý luận thuật giải Adaboots ( Phần 3) xin đưa ra những giả định và ràngbuộc sau để giảm độ phức tạp của bài toán để phần xây dựng ứng dụng đạt kết quả tốt :

• Các khuôn mặt được chụp thẳng hoặc góc nghiêng không đáng kể (bé hơn 10o)

• Phông nền của ảnh không quá phức tạp

• Ảnh được chụp trong điều kiện ánh sáng bình thường

PHẦN 2 : SƠ LƯỢC CÁC PHƯƠNG PHÁP NHẬN DẠNG

Có rất nhiều hướng tiếp cận trước đây đã thực hiện liên quan đến vấn đề phát hiện mặtngười Theo Ming-Hsuan Yang [1], có thể phân loại thành bốn hướng tiếp cận chính: dựatrên tri thức (knowledge-based), đặc trưng bất biến (feature invariant), đối sánh mẫu(template matching), và dựa vào diện mạo (appearance-based) phương pháp này thườngdùng một mô hình máy học nên còn được gọi là phương pháp dựa trên máy học (machinelearning-based)

Các phương pháp dựa trên tri thức: Hướng tiếp cân này chủ yếu dựa trên những luật

Trang 10

giữa các thành phần trên khuôn mặt Có một số nghiên cứu từ rất sớm đã áp dụng phươngpháp này như của Kanade 1973 [18], G Yang 1994 [11], và Kotropoulos 1997 [14].

Hướng tiếp cận dựa trên các đặc trưng bất biến: Hướng tiếp cận này cố gắng tìm kiếm

những đặc trưng độc lập – những đặc trưng không phụ thuộc vào tư thế khuôn mặt, điềukiện chiếu sáng, và các khó khăn khác Các đặc trưng như thế được gọi là bất biến vàđược sử dụng để phát hiện khuôn mặt Những công trình sử dụng hướng tiếp cận này cóthể kể như: K C Yow và R Cipolla 1997 [12], T K Leung 1995 [13]

Phương pháp đối sánh mẫu: Trong hướng tiếp cận này, một mẫu khuôn mặt chuẩn

được định nghĩa bằng tay trước hoặc được tham số hóa bằng một hàm số Mẫu này được

sử dụng để phát hiện khuôn mặt bằng cách quét nó qua ảnh và tính toán giá trị tươngđồng cho mỗi vị trí Việc xuất hiện một khuôn mặt tại một vị trí nào đó trong ảnh phụthuộc vào giá trị tương đồng của điểm đó so với mẫu chuẩn I Craw 1992 [17] đã ápdụng một mẫu cứng trong khi A Lanitis 1995 [15] sử dụng một mẫu có thể biến dạngtrong bước phát hiện khuôn mặt

Phương pháp dựa trên máy học: Ngược với phương pháp đối sánh mẫu sử dụng các

mẫu được các chuyên gia định nghĩa trước, phương pháp này sử dụng những mẫu đượcrút trích qua một quá trình học Nói cách khác, các thuật toán dựa trên máy học dùng các

kỹ thuật phân tích thống kê và máy học để xấp xĩ một hàm phân lớp tuyến tính Có nhiều

mô hình máy học được áp dụng trong hướng tiếp cận này: Eigenface (M Turk và A.Pentland 1991 [16]), Mô hình dựa trên phân phối (K K Sung and T Poggio 1998 [6]),Mạng Nơ-ron (H Rowley 1998 [7]), Support Vector Machine (E Osuna et al 1997 [10]),Phân lớp Bayes (H Schneiderman và T Kanade 1998 [8]), Mô hình Markov ẩn (A

Trang 11

Rajagopalan et al 1998 [9]), và các mô hình tăng cường (AdaBoost của P Viola và M.Jones 2001 [4][5]; FloatBoost do Stan Z Li và Zhen Qiu Zhang 2004 [2][3]).

PHẦN 3 : CƠ SƠ LÝ LUẬN THUẬT GIẢI ADABOOST

I Giới thiệu về Adaboots

Ensemble Learning là phương pháp nhằm giải quyết việc nhiều người học cùng giảiquyết một vấn đề Khả năng tổng quát của một hệ ensemble thường tốt hơn đáng kể sovới một người học nên phương pháp ensemble rất hấp dẫn Thuật toán Adaboost được đềxuất bởi Yoav Freund và Robert Schapire là một trong những phương pháp ensemblequan trọng nhất vì nó có nền tảng lý thuyết tốt, độ chính xác phân lớp rất cao, rất đơngiản, ứng dụng rộng rãi và rất thành công

Học theo adaboost là một cách trong hướng tiếp cận dựa trên diện mạo, Viola vàJones dùng AdaBoost kết hợp cascade để xác định khuôn mặt người [17] với các đặctrưng dạng Haar wavelet-like Tốc độ xử lý khá nhanh và tỷ lệ chính xác hơn 80% trênảnh xám

Thuật toán học máy Adaboost được phát triển thuật toán boosting, do đó sẽ trìnhbầy một chút về thuật toán boosting trước khi trình bầy về adaboost

II Booting nền tảng của Adaboots

Trang 12

Về lịch sử, boosting bắt nguồn từ câu hỏi nổi tiếng được đưa ra bời Kearns vào năm

1989 : “Liệu có thể tạo ra một strong classifier từ một tập các bộ phân loại yếu?” Năm

1990, Robert Schapire đưa ra thuật toán boosting đầu tiên, tiếp đến năm 1993 thì nó đượcDrucker, Schapire và Simard kiểm nghiệm trong trong các chương trình nhận dạng (

OCR application ) Freund đã tiếp tục các nghiên cứu của Schaprire, và đến năm 1995 thì

ông cùng với Schapire phát triển boosting thành adaboost

Như vậy, nguyên lý cơ bản của boosting là sự kết hợp các weak classifiers thành một strong classifier Trong đó, weak classifier là các bộ phân loại đơn giản chỉ cần có độ

chính xác trên 50% Bằng cách này, chúng ta nói bộ phân loại đã được “boost”

Để hiểu cách hoạt động của thuật toán boosting, ta xét một bài toán phân loại 2 lớp

(mẫu cần nhận dạng chỉ thuộc một trong hai lớp) với D là tập huấn luyện gồm có n mẫu Trước tiên, chúng ta sẽ chọn ngẫu nhiên ra n1 mẫu từ tập D (n1<n) để tạo tập D1 Sau đó, chúng ta sẽ xây dựng weak classifier đầu tiên C1 từ tập D1 Tiếp theo, chúng ta xây dựng tập D2 để huấn luyện bộ phân loại C2 D2 sẽ được xây dựng sao cho một nửa số mẫu của

nó được phân loại đúng bởi C1 và nửa còn lại bị phân loại sai bởi C1 Bằng cách này, D2 chứa đựng những thông tin bổ sung cho C1 Bây giờ chúng ta sẽ xây huấn luyện C2 từ

D2

Tiếp theo, chúng ta sẽ xây dựng tập D3 từ những mẫu không được phân loại tốt bởi

sự kết hợp giữa C1 và C2: những mẫu còn lại trong D mà C1 và C2 cho kết quả khác nhau Như vậy, D3 sẽ gồm những mẫu mà C1 và C2 hoạt động không hiệu quả Sau cùng, chúng ta sẽ huấn luyện bộ phân loại C3 từ D3.

Bây giờ chúng ta đã có một strong classifier: sự kết hợp C1, C2 và C3 Khi tiến hành nhận dạng một mẫu X, kết quả sẽ được quyết định bởi sự thỏa thuận của 3 bộ C1,

C2 và C3: Nếu cả C1 và C2 đều phân X vào cùng một lớp thì lớp này chính là kết quả

phân loại của X; ngược lại, nếu C1 và C2 phân X vào 2 lớp khác nhau, C3 sẽ quyết định

X thuộc về lớp nào

Trang 13

Hình 7: Boosting

III Adaboots

Adaboost ( Adaptive Boost) là một thuật toán học mạnh, đẩy nhanh việc tạo ra một bộphân loại mạnh (strong classifier) bằng cách chọn các đặc trưng tốt trong một họ các bộphân loại yếu( weak classifer – bộ phân loaii yếu) và kết hợp chúng lại tuyến tính bằngcác trọng số Điều này thật sự cải thiện dần độ chính xác nhờ áp dụng hiệu quả một chuỗicác bộ phân loại yếu

Trang 14

Thuật toán học này ban đầu duy trì một phân bố chuẩn (tương đồng nhau) các trọng sốlên mỗi một mẫu huấn luyện Trong bước lặp đầu tiên, thuật toán huấn luyện một bộ phânloại yếu bằng cách dùng một đặc trưng Haar – like đã thực hiện tốt nhất việc phát hiệncác mẫu thử huấn luyện Trong lần lặp thứ hai, các mẫu thử dùng huấn luyện nhưng bịphân loại nhầm bởi bộ phân loại yếu đầu tiên được nhận trọng số cao hơn sao cho đặctrưng Haar – like được chọn lần này phải tập trung khả năng tính toán cho các mẫu thử bịphân loại nhầm này Sự lặp lại tiếp tục thực hiện và kết quả cuối cùng sẽ là một chuỗicascade các kết hợp tuyến tính của các bộ phận phân loại yếu, tạo ra một bộ phân loạimạnh, giúp tạo độ chính xác mong muốn Thuật toán học Adaboost sau 3 lần lặp đượcminh họa như sau.

Trang 15

Viola và Jones dùng Adaboost kết hợp các bộ phận phân loại yếu sử dụng các đặc trưngHaar - like theo mô hình phân tầng ( cascade ) như sau :

Trang 16

Các weak classifiers hk(x) là các bộ phân loại yếu, được biểu diễn như sau:

Trong đó:

X : mẫu hay cửa sổ con cần xét ( X = (x1,x2,…,xn) là vector đặc trưng của mẫu)

Ok: ngưỡng (O = teta)

fk: giá trị của đặc trưng Haar-like

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

Công thức trên có thể diễn giải như sau: Nếu giá trị đặc trưng của mẫu cho bởi hàmđánh giá của bộ phân loại vượt qua một ngưỡng cho trước thì mẫu đấy là khuôn mặt ( gọi

là object : đối tượng cần nhận dạng ), ngược lại thì mẫu là background ( không phải là đối

tượng )

Trang 17

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 =

: Hệ số dùng để đưa về đoạn [0,1] (normalization factor)

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

Trang 18

Sơ đồ khối:

Quá trình huấn luyện bộ phân loại được thực hiện bằng một vòng lặp mà ở mỗibước lặp, thuật toán sẽ chọn ra weak classifier ht thực hiện việc phân loại với lỗi εt nhỏnhất (do đó sẽ là bộ phân loại tốt nhất) để bổ sung vào strong classifier Mỗi khi chọnđược 1 bộ phân loại ht, Adaboost sẽ tính giá trị αt theo công thức ở trên αt cũng đượcchọn trên nguyên tắc làm giảm thiểu giá trị lỗi εt

Hệ số αt nói lên mức độ quan trọng của ht:

• Trong công thức của bộ phân loại H(x):

Bắt đầu huấn luyện

Khởi tạo tập đặc trưng ban đầu

Xác định các đặc trưng trong từng mẫu, xây dựng các

bộ phân loại yếu tương ứng

Đặc trưng haar-like

Tính toán giá trị lỗi cho mỗi đặc trưng

False alarm ≤ max false alarm

Tập các mẫu và trọng số Tập các mẫu

Trang 19

Ta thấy tất cả các bộ phân loại ht đều có đóng góp vào kết quả của bộ phân loạiH(x), và mức độ đóng góp của chúng phụ thuộc vào giá trị αt tương ứng: ht với

αt càng lớn thì nó càng có vài trò quan trọng trong H(x)

Vòng lặp xây dựng strong classifier sẽ dừng lại sau T lần lặp Trong thực tế cài đặt(thư viện OpenCV của Intel), người ta ít sử dụng giá trị T vì không có công thức nào đảmbảo tính được giá trị T tối ưu cho quá trình huấn luyện Thay vào đó, người ta sử dụng giá

trị max false positive hay max false alarm (tỉ lệ nhận dạng sai tối đa các mẫu

background) Tỉ lệ này của bộ phân loại cần xây dựng không được phép vượt quá giá trị

này Khi đó, qua các lần lặp, false alarm của strong classifier Ht(x) xây dựng được (tại lần

lặp thứ t) sẽ giảm dần, và vòng lặp kết thúc khi tỉ lệ này thấp hơn max false alarm.

Quá trình học huấn luyện nhận dạng theo từng chuỗi cascade và giai đoạn stage được thểhiện như hình dưới đây, trong đó đối tượng cần phát hiện là đường cong đặc, kín màuxanh da trời ( được đặt tên là Target Concept)

Trang 20

Các cửa sổ con là tích cực ( phù hợp, dò đúng đối tượng) nếu được cho qua tại từng bộphân lớp của chuỗi casacade đã được huấn luyện Nếu không, một ngõ ra trên chuỗi sẽloại bất kỳ cửa sổ không phù hợp ngay lập tức

Trang 21

IV Các đặc trưng Haar - Like

Viola và Jones dùng 4 đặc trưng cơ bản [20] để xác định khuôn mặt người Mỗi đặctrưng Haar–like là sự kết hợp của hai hay ba hình chữ nhật "trắng" hay "đen" như tronghình sau:

Hình 8: 4 đặt trưng Haar-like cơ bản

Ngày đăng: 14/07/2018, 18:10

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w