You are on page 1of 28

ĐẠI HỌC QUỐC GIA TP.

HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA


_________________________________________________________

ĐỀ TÀI 13

NÊU CƠ SỞ LÝ THUYẾT CỦA PHÂN TÍCH THÀNH PHẦN


CHÍNH (PCA)

ỨNG DỤNG CỦA PHÂN TÍCH PCA VÀO NHẬN DẠNG


KHUÔN MẶT
Giảng Viên Hướng Dẫn: Nguyễn Trọng

Lớp L04 – Nhóm 7

1. Trần Tuấn Khôi MSSV: 2311705


2. Hồ Tấn Đạt MSSV: 2310638
3. Nguyễn Văn Trí Dũng MSSV: 2310567
4. Lê Nhựt Phúc MSSV: 2312684
5. Trần Quốc Thịnh MSSV: 2313315
6. Lê Minh Quân MSSV: 2312824
7. Nguyễn Văn Tài MSSV: 2313009

BÁO CÁO ĐỀ TÀI


TP. HỒ CHÍ MINH – THÁNG 12/2023
i

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH

TRƯỜNG ĐẠI HỌC BÁCH KHOA

ĐỀ TÀI 13

NÊU CƠ SỞ LÝ THUYẾT CỦA PHÂN TÍCH THÀNH PHẦN


CHÍNH (PCA)

ỨNG DỤNG CỦA PHÂN TÍCH PCA VÀO NHẬN DẠNG


KHUÔN MẶT
Giảng Viên Hướng Dẫn: Nguyễn Trọng

Lớp L04 – Nhóm 7

1. Trần Tuấn Khôi MSSV: 2311705


2. Hồ Tấn Đạt MSSV: 2310638
3. Nguyễn Văn Trí Dũng MSSV: 2310567
4. Lê Nhựt Phúc MSSV: 2312684
5. Trần Quốc Thịnh MSSV: 2313315
6. Lê Minh Quân MSSV: 2312824
7. Nguyễn Văn Tài MSSV: 2313009

BÁO CÁO ĐỀ TÀI


TP. HỒ CHÍ MINH – THÁNG 12/2023

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
ii

LỜI NÓI ĐẦU


Principal Component Analysis (PCA) hay Phân Tích Thành Phần Chính có rất
nhiều ứng dụng trong trong các lĩnh vực: y học, viễn thám, xử lý dữ liệu hình ảnh,
âm thanh, dữ liệu văn bản,…, và nhận diện khuôn mặt cũng không phải là một
ngoại lệ. Trong một thế giới không ngừng phát triển qua từng ngày, lĩnh vực công
nghệ thông tin ngày càng hiện đại, tân tiến hơn, mang lại vô số lợi ích, sự tiện lợi
cho con người, nhưng bên cạnh những lợi ích đó thì nó cũng tiềm ẩn nhiều rủi ro,
lỗ hổng tiếp tay cho những hành vi xấu, phạm tội. Điển hình là những đường link
độc hại khơi gợi sự tò mò những người dùng trên Facebook, một khi đã bấm vào
thì những “hacker” sẽ lợi dụng những lỗ hổng trên nền tảng Facebook để có được
mật khẩu và xâm nhập vào tài khoản của họ, thế nên ngày nay những thông tin cá
nhân mang tính dữ liệu như mật khẩu, mã số căn cước công dân có thể bị lộ, đánh
cắp dễ dàng nếu người dùng bất cẩn. Trong quá trình nghiên cứu thực hiện đề tài,
nhóm thấy được ý tưởng về việc nhận diện khuôn mặt trong khâu điểm danh chống
gian lận (vấn đề hiện nay có một số sinh viên nhờ người thi hộ, điểm danh giúp,...
nhằm những mục đích cá nhân nhất thời) và điều đó cũng phần nào ảnh hưởng đến
chất lượng học tập của cá nhân mở rộng ra ảnh hưởng đến cả chất lượng đào tạo
của nhà trường. Chỉ qua một số những minh chứng trên nhóm chúng em cũng
không nhìn việc đó diễn ra mà lại để nó trở thành thói quen của một số bạn hiện
nay và đặc biệt muốn các bạn ấy có ý thức hơn với tương lai của mình. Đó là lý do
mà nhóm chúng em quyết định chọn đề tài này và phát triển nó lên một nấc thang
mới.

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
iii

LỜI CẢM ƠN
Trên con đường dẫn tới sự thành công chắc chắn sẽ có những khó khăn nhất
thời, những vấp ngã và đó cũng chính là những thách thức mà chúng em cũng nên
nhìn vào nó và tiếp tục bước đi trên con đường ấy, và để vượt qua nó chúng em
cũng phải nhờ một phần trợ giúp to lớn của các thầy cô bộ môn trên môi trường đại
học nói chung và Trường Đại Học Bách Khoa nói riêng và đặc biệt nhất là thầy
Nguyễn Trọng (người thầy môn đại số tuyến tính lớp L04) người đã nhiệt tình giúp
đỡ chúng em hoàn thành được bài tiểu luận này. Nếu không có sự trợ giúp nhiệt
tình của các thầy cô thì bài tiểu luận này của chúng em cũng khó có thể hoàn thành
một cách trọn vẹn được. Chính vì thế em thay mặt các bạn trong nhóm gửi đến thầy
cô lời tri ân sâu sắc nhất và cũng như lời cảm ơn chân thành nhất!

Khi bước vào môi trường đại học mới mẻ, chúng em còn rất bỡ ngỡ và cũng
ngạc nhiên trước góc độ, quy mô của môi trường mới này, và cũng vì thế trong quá
trình học hỏi và tìm tòi số liệu thu hoạch cho bài tiểu luận này có thể chúng e sẽ
không tránh khỏi những sai sót, lỗi chẳng qua chúng em không nên có do kinh
nghiệm vốn ít ỏi của mình, chúng em rất mong quý thầy cô sẽ bỏ qua cũng như
góp ý để chúng em có thể từ đó làm cơ sở cho các bài tiểu luận sau ngày càng
hoàn thiện hơn. Nhóm chúng em xin chân thành tiếp thu các ý kiến thầy cô đưa ra
để hoàn thành bài tiểu luận một cách tốt nhất, nhóm e cảm ơn các lời góp ý của
quý thầy cô!

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
iv

NHẬN XÉT CỦA GIẢNG VIÊN

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
v

MỤC LỤC
TRANG LÓT........................................................................................................i

LỜI NÓI ĐẦU.....................................................................................................ii

LỜI CẢM ƠN.....................................................................................................iii

NHẬN XÉT CỦA GIẢNG VIÊN.......................................................................iv

MỤC LỤC............................................................................................................v

CHƯƠNG I: THUẬT TOÁN PCA.................................................................- 1 -

1.1. GIỚI THIỆU VỀ PCA:.........................................................................- 1 -

1.2. ĐẶC TÍNH:..........................................................................................- 2 -

1.3. CÁC CƠ SỞ TOÁN HỌC SỬ DỤNG TRONG PCA:.........................- 3 -

1.3.1. Kỳ Vọng (Mean, Expected Value):................................................- 3 -

1.3.2. Độ lệch chuẩn (Standard Deviation):............................................- 3 -

1.3.3. Phương sai (Variance):...................................................................- 3 -

1.3.4. Hiệp phương sai (Covariance):......................................................- 4 -

1.3.5. Ma trận hiệp phương sai (covariance matrix):...............................- 4 -

1.3.6. Trị riêng, vector riêng:...................................................................- 5 -

1.4. CÁC BƯỚC PHÂN TÍCH THÀNH PHẦN CHÍNH:..........................- 5 -

1.5. KẾT LUẬN:.........................................................................................- 6 -

CHƯƠNG II: ỨNG DỤNG PCA VÀO NHẬN DIỆN KHUÔN MẶT..........- 7 -

2.1. MỤC TIÊU CHÍNH:............................................................................- 7 -

2.2. SƠ ĐỒ KHỐI HOẠT ĐỘNG CỦA CHƯƠNG TRÌNH NHẬN DIỆN


KHUÔN MẶT: ......................................................................................................- 7 -

2.3. ỨNG DỤNG:........................................................................................- 7 -

2.4. ƯU ĐIỂM VÀ NHƯỢC ĐIỂM:...........................................................- 8 -

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
vi

2.4.1. Ưu điểm:........................................................................................- 8 -

2.4.2. Nhược điểm:..................................................................................- 8 -

CHƯƠNG III: KẾT LUẬN.............................................................................- 9 -

Danh mục tài liệu tham khảo...........................................................................- 9 -

PHỤ LỤC......................................................................................................- 11 -

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
1

CHƯƠNG I: THUẬT TOÁN PCA


1.1. GIỚI THIỆU VỀ PCA:

PCA (Principal Component Analysis) hay Phân Tích Thành Phần Chính là một
thuật toán ngành máy học (Machine Learning) được sử dụng rộng rãi trong phân tích
dữ liệu khám phá và để tạo mô hình dự đoán. Nó là thuật toán chuyển đổi những tập
dữ liệu có chiều cao hơn thành những tập dữ liệu có chiều thấp hơn trong khi vẫn giữ
lại những thông tin quan trọng của dữ liệu gốc. Những tập dữ liệu chiều thấp hơn được
gọi là thành phần chính, và là sự kết hợp tuyến tính giữa những điểm dữ liệu gốc.
Thuật toán PCA dựa trên một ý tưởng đơn giản nhưng mạnh mẽ: tìm ra các thành phần
chính (principal components) của dữ liệu, tức là các vector độc lập tuyến tính mà khi
chiếu dữ liệu lên chúng thì dữ liệu có sự biến thiên (variance) lớn nhất. Các thành phần
chính này sẽ tạo nên một không gian mới, trong đó mỗi chiều của không gian mới là
một thành phần chính của dữ liệu gốc. Các thành phần chính được sắp xếp theo thứ tự
giảm dần của mức độ biến thiên của dữ liệu trên chúng, tức là thành phần chính đầu
tiên là vector mà khi chiếu dữ liệu lên nó thì dữ liệu có variance lớn nhất, thành phần
chính thứ hai là vector mà khi chiếu dữ liệu lên nó thì dữ liệu có variance lớn thứ hai,
và cứ thế. Do đó, để giảm chiều dữ liệu, ta chỉ cần chọn ra một số lượng nhỏ các thành
phần chính đầu tiên, sao cho tổng variance của dữ liệu trên chúng đạt được một
ngưỡng nào đó (ví dụ 95% hoặc 99%). Sau đó, ta chiếu dữ liệu gốc lên các thành phần
chính này để được dữ liệu mới có số chiều nhỏ hơn.

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
2

Mô Phỏng Thuật toán PCA (Nguồn: Giới thiệu Principal Component


Analysis (viblo.asia))

1.2. ĐẶC TÍNH:

 Giúp giảm chiều dữ liệu nhưng vẫn giữ lại được những đặc trưng chính.
 Thay vì giữ lại các trục tọa độ của không gian cũ, PCA xây dựng một không
gian mới ít chiều hơn, nhưng lại có khả năng biểu diễn dữ liệu tốt tương
đương không gian cũ, đảm bảo độ biến thiên của dữ liệu trên mỗi chiều mới.
 Trong không gian mới, các liên kết tiềm ẩn của dữ liệu có thể được
khám phá, mà nếu đặt trong không gian cũ thì sẽ khó phát hiện hơn.

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
3

 Đảm bảo các trục tọa độ trong không gian mới luôn trực giao đôi một
với nhau, mặc dù trong không gian ban đầu các trục có thể không trực
giao.

1.3. CÁC CƠ SỞ TOÁN HỌC SỬ DỤNG TRONG PCA:

1.3.1. Kỳ Vọng (Mean, Expected Value):

 Là giá trị trung bình “mong muốn”, biển diễn giá trị trung bình của một biến.

 Biểu thức toán học:

 Với X là ngẫu nhiên rời rạc:


μ=mx =E { X }=∑ pi x i
 i

 Tính chất:
 E { aX + bY }=aE { X } +bE { Y }

1.3.2. Độ lệch chuẩn (Standard Deviation):

 Đo mức độ phân tán của mẫu số liệu thống kê có cùng đơn vị đo, nó cho thấy

sự biến thiên của giá trị trong một thời điểm phản ánh xu thế của sự thay đổi.
 Biểu thức toán học:

 σ =s=E { X ( t ) −mx (t) }

 Tính chất:
 σ ( c ) =0

 σ ( X + c )=σ ( X )

 σ ( cX )=|c|σ ( X )

 σ ( X + Y )=√ var ( X )+ var ( Y ) +2 cov ( X , Y )

1.3.3. Phương sai (Variance):

 Đặc trưng cho độ phân tán của các số liệu trong tập dữ liệu so với giá trị
trung bình, nó hàm ý các giá trị của biến đó thường ở cách giá trị kỳ vọng
bao xa.
 Biểu thức toán học:

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
4

 var ( X )=σ 2=s2=E {( X ( t )−m x ( t ))2 }

 Tính chất:
 var ( X )=E { X 2 }−( E { X } )
2

 var ( aX +b ) =a2 var ( X )


 var ( aX +bY )=a2 var ( X ) +b 2 var ( X ) +2 ab cov ( X , Y )

1.3.4. Hiệp phương sai (Covariance):

 Đo lường mối sự biến thiên cùng nhau của hai biến ngẫu nhiên. Hiệp phương
sai dương có nghĩa là chúng di chuyển cùng nhau trong khi hiệp phương sai
âm có nghĩa là chúng di chuyển ngược lại.
 Biểu thức toán học:
 cov ( X , Y )=E {( X ( t )−m x ( t ))(Y ( t )−m y ( t ) ) }

 Tính chất:
 cov ( X , Y )=var ( X )

 cov ( X , Y )=cov ( Y , X )

 cov ( aX , bY )=abcov ( X ,Y )

1
 Trường hợp đặc biệt: p1= p2=…= p n=
n
n
1
 μ=g=X = ∑x
n i=1 i


n

 ∑ ( x i−X )2
i=1
s=σ=
n−1
n


∑ ( xi −X )2
σ 2= i =1
n−1
n


∑ ( xi −μ x )( y i−μ y )
cov ( X , Y )= i=1
n−1

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
5

1.3.5. Ma trận hiệp phương sai (covariance matrix):

 Ma trận hiệp phương sai của tập hợp m biến ngẫu nhiên là một ma trận vuông
hạng (m x m), có kích thước bằng số đặc trưng của dữ liệu, trong đó các phần
tử nằm trên đường chéo (từ trái sang phải, từ trên xuống dưới) lần lượt là
phương sai tương ứng của các biến này. Hiệp phương sai là một đại lượng thể
hiện mối quan hệ tuyến tính giữa hai đặc trưng, nếu hai đặc trưng càng có mối
quan hệ tuyến tính mạnh thì hiệp phương sai càng lớn về trị tuyệt đối, và ngược
lại. Ma trận hiệp phương sai có thể được tính bằng công thức sau:

1 T
 Σ= X X
n−1
o Trong đó, X là ma trận dữ liệu đã được chuẩn hóa, có kích thước là n×d,
với n là số điểm dữ liệu và d là số đặc trưng, và XT là ma trận chuyển vị
của X.

 X là vector cột, mỗi thành phần X i là biến ngẫu nhiên có phương sai xác định
và E { X i }=μi.
  Xây dựng ma trận hiệp phương sai với si , j là hiệp phương sai:
 si , j=cov ( X i , X j )=E {(X i−μi)( X j −μ j ) }

1.3.6. Trị riêng, vector riêng:

 Cho A ∈C mxm là ma trận vuông.


 Vector u ∈C m gọi là vector riêng ứng với trị riêng λ ϵ C nếu:
 A [u]=λ [u]

 Tính chất:
o Trị riêng là nghiệm của phương trình đặc trưng:

 det ( A−λI ) =0

o Một trị riêng có thể có nhiều vector riêng.


o Mỗi vector chỉ ứng với một trị riêng duy nhất.
o Mọi trị riêng của A ≠ 0 thì A khả nghịch.

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
6

o Nếu λ là trị riêng của A thì λ k là trị riêng của A k.

1.4. CÁC BƯỚC PHÂN TÍCH THÀNH PHẦN CHÍNH:

 Chuẩn hóa dữ liệu: PCA giả định rằng dữ liệu tập trung xung quanh dữ liệu
gốc, vì vậy ta cần phải chuẩn hóa dữ liệu bằng cách trừ đi giá trị trung bình
từ mỗi điểm dữ liệu và chia cho độ lệch chuẩn. Kết quả là dữ liệu có giá trị
trung bình bằng 0 và độ lệch chuẩn bằng 1 cho mỗi đặc trưng.
 Tính toán ma trận hiệp phương sai: Ta tính toán ma trận hiệp phương sai của
dữ liệu đã được chuẩn hóa.
 Tính các trị riêng (eigenvalues) và vector riêng (eigenvectors) của ma trận
hiệp phương sai. Đây là bước quan trọng nhất của thuật toán PCA, vì các
vector riêng chính là các thành phần chính của dữ liệu, và các trị riêng thể
hiện mức độ biến thiên của dữ liệu trên các vector riêng đó. Kết quả là ta sẽ
có d cặp trị riêng và vector riêng, mỗi cặp tương ứng với một chiều của
không gian mới.
 Chọn các thành phần chính: Ta tính tỷ lệ giữa trị riêng của mỗi vector riêng
và tổng trị riêng, và chọn ra các vector riêng có tỷ lệ lớn nhất. Tổng lũy thừa
của các tỷ lệ này sẽ là tỷ lệ giải thích của thuật toán PCA, thể hiện phần trăm
thông tin của dữ liệu gốc được giữ lại bởi các thành phần chính
 Chuyển hóa dữ liệu: Đây là bước cuối cùng của thuật toán PCA, bao gồm
việc chiếu dữ liệu gốc lên k thành phần chính để nhận được dữ liệu chiều
thấp hơn, và trực quan hóa dữ liệu mới này bằng các biểu đồ hoặc hình ảnh.
Việc trực quan hóa dữ liệu mới sẽ giúp ta nhận ra các mẫu (patterns), các
nhóm (clusters), hoặc các ngoại lệ (outliers) của dữ liệu.

1.5. KẾT LUẬN:

 Thuật toán PCA là một kỹ thuật thống kê hiệu quả để giảm chiều dữ liệu,
trong khi vẫn giữ lại được phần lớn thông tin quan trọng của dữ liệu gốc.
Thuật toán PCA dựa trên việc tìm ra các thành phần chính của dữ liệu, tức là
các vector độc lập tuyến tính mà khi chiếu dữ liệu lên chúng thì dữ liệu có sự
biến thiên lớn nhất. Thuật toán PCA có nhiều ứng dụng trong các lĩnh vực

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
7

như máy học, khai phá dữ liệu, phân tích dữ liệu, hình ảnh, thị giác máy tính,
và nhiều lĩnh vực khác.

CHƯƠNG II: ỨNG DỤNG PCA VÀO NHẬN DIỆN


KHUÔN MẶT
2.1. MỤC TIÊU CHÍNH:

Như đã được nhắc đến, PCA là một phương pháp giảm chiều dữ liệu để thu
được dữ liệu có chiều thấp hơn trong khi vẫn giữ được những đặc điểm chính, những
biến thể của dữ liệu gốc. Nên khi PCA được áp dụng vào nhận diện khuôn mặt, mục
tiêu chính sẽ là tìm ra những đặc điểm chính khuôn mặt của một người, kể cả khi giảm
số lượng pixel trong ảnh thì hệ thống vẫn sẽ nhận diện ra được khuôn mặt nhờ vào
những đặc điểm đó.

2.2. SƠ ĐỒ KHỐI HOẠT ĐỘNG CỦA CHƯƠNG TRÌNH NHẬN


DIỆN KHUÔN MẶT:

Phát hiện Trích xuất Nhận diện Xác minh/


Ảnh
khuôn mặt đặc trưng khuôn mặt Đối chiếu

Cụ thể hơn:

1. Khi nhận được một bức ảnh, hệ thống sẽ xử lí xác định khuôn mặt cần để
nhận diện.
2. Hệ thống sẽ phân tích và trích xuất những đặc trưng chính trong khuôn
mặt người đó như nốt ruồi, chân mày, đôi mắt,…
3. Hệ thống sẽ so sánh độ tương tự của ảnh mặt cần xác minh và ảnh mặt
trong cơ sở dữ liệu để đưa ra kết quả.

2.3. ỨNG DỤNG:

 Chấm công trong công việc.


 Nhận dạng, phát hiện tội phạm nhanh chóng.

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
8

 Bảo mật các thiết bị điện tử cá nhân bằng khuôn mặt (smartphone).
 Thẻ căn cước công dân, tài khoản định danh (Face Indentification).
 Bảo mật các giao dịch rút tiền ở cây ATM.
 Giảm bớt tai nạn giao thông nhờ phát hiện và phát đi cảnh báo khi người
lái có dấu hiệu ngủ gật, mất tập trung.
 Giảm thời gian tìm kiếm các dữ liệu liên quan tới khuôn mặt con người
trên không gian dữ liệu lớn (internet).
 Phát triển robot trong các lĩnh vực y tế, quân sự....

2.4. ƯU ĐIỂM VÀ NHƯỢC ĐIỂM:

2.4.1. Ưu điểm:

 Được ứng dụng rộng rãi trong nhiều lĩnh vực.


 Dễ thực hiện trên dữ liệu lớn.
 Đơn giản hóa dữ liệu: Bằng cách chuyển sang một không gian đặc trưng
có chiều thấp hơn. Giúp giảm số chiều ảnh khuôn mặt nhằm tiết kiệm
thời gian và chi phí tính toán.
 Giúp tăng khả năng phân biệt giữa các khuôn mặt khác nhau bằng cách
tối đa hóa sự khác biệt giữa các vector đặc trưng. PCA cũng có thể loại
bỏ các thành phần không liên quan hoặc nhiễu trong dữ liệu ảnh.
 Có thể kết hợp các phương pháp với PCA nhằm tối đa hiệu quả mang lại:
Support Vector machine, SVD (phân tích suy biến), …

2.4.2. Nhược điểm:

 Trong các trường hợp sau, PCA có khả năng nhận dạng sai do:
o PCA có thể bỏ qua một số thông tin quan trọng của khuôn mặt khi
giảm số chiều của dữ liệu, từ đó làm giảm độ chính xác của việc
nhận dạng.
o Khác nhau về điều kiện ánh sáng (khuôn mặt quá tối hoặc quá
sáng).
o Sự thay đổi hướng khuôn mặt (nghiêng đầu, ngước đầu…).

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
9

o Biểu cảm (cười to, nheo mắt, há miệng…).


o Khó phân biệt các khuôn mặt có sự tương đồng cao về hình dạng,
kích thước và màu sắc, hoặc các khuôn mặt có sự khác biệt nhỏ
về đặc điểm như cặp song sinh,…
o Do các yếu tố khác (tóc, kính, râu, quá trình lão hóa, nhiễu, chất
lượng hình ảnh thấp,…) cũng gây cản trở cho việc nhận dạng.

CHƯƠNG III: KẾT LUẬN


 Vì biết được khả năng, ưu điểm và nhược điểm của từng thành viên nên
chúng em có thể bàn luận, sắp xếp công việc phù hợp cho các thành viên
để hoàn thành đề tài một cách tốt nhất.
 Qua việc thực hiện đề tài đã giúp chúng em có thêm kinh nghiệm về giải
toán trên phần mềm Python, phát triển những kĩ năng mềm như kĩ năng
quản lý, làm việc nhóm.
 Đề tài cũng giúp chúng em có tinh thần học tập, cản thiện tư duy, mở
rộng hiểu biết
 Về phần ứng dụng của thuật toán trong Python:
o Ưu điểm: được ứng dụng rộng rãi, đảm bảo tính bảo mật, tiết
kiệm được thời gian, chi phí, nguồn nhân lực.
o Nhược điểm: Việc thiết kế đoạn code mất khá nhiều thời gian,
công sức, và đặc biệt khó khăn cho những người chưa có một
lượng kiến thức nhất định về lập trình. Việc thiết kế đoạn code
cũng yêu cầu người thiết kế phải tỉ mỉ, chính xác. Ngoài ra, vẫn
có những nhược điểm đã nhắc ở trên và sai sót của phần mềm mà
ta không thể tránh khỏi.

Danh mục tài liệu tham khảo


[1] Phép phân tích thành phần chính, Wikipedia tiếng Việt.

[2] Principal Component Analysis (PCA) in Python Tutorial, DataCamp.

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
10

[3] Casey Cheng, Principal Component Analysis (PCA) Explained Visually with
Zero Math, Towards Data Science.

[4] StatQuest, Principal Component Analysis (PCA), Step-by-Step, YouTube.

[5] Principal Component Analysis (PCA) - tuyệt chiêu giảm chiều dữ liệu, Mì
AI (miai.vn).

[6] Công thức tính kỳ vọng và phương sai, limosa.vn.

[7] Nguyễn Thành, Phương sai là gì, lamchutaichinh.vn.

[8] Bài 27: Principal Component Analysis, machinelearningcoban.com.

[9] Tuan Remy, Thuat toan pca full 24-5-2017, slideshare.net.

[10] Phan Ngoc, Giới thiệu Principal Component Analysis, viblo.asia.

[11] Hiệp phương sai (Covariance) là gì? Công thức tính hiệp phương sai,
vietnambiz.vn.

[12] Standard deviation of population and sample, khanacademy.org.

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
11

PHỤ LỤC

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
12

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
13

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
14

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
15

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
16

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
17

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
18

Các file trong chương trình và tác dụng


Thư mục images: chứa các thư mục là mã số sinh viên trong đó chứa ảnh của sinh
viên đó:

Thư mục

images_face: chứa các thư mục là MSSV


trong đó chứa khuôn mặt được cắt ra từ images thông qua file Face.py.

Thư mục test: chứa các video (.mp4) dùng để chạy chuẩn đoán khuôn mặt.

Thư mục HaarCascade: chứa cái file giúp trích xuất đặc điểm trên khuôn mặt.

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
19

File model-FaceTraining.h5: Khuôn mẫu được tạo ra từ Train.py dùng đối chiếu và
chọn ra đối tượng xuất hiện trong video (.mp4).

File Face.py:
#Thêm các thư viện
import cv2
import os

face_detector =
cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_alt.xml')

#định thức tách khuôn mặt các ảnh lấy từ đường dẫn image_path và lưu ảnh
vào thư mục images_face
def getFaces(image_path):
img = cv2.imread(image_path)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(img_gray, 1.1, 6)
for (x, y, w, h) in faces:
img_face = cv2.resize( img_gray[y: y + h, x: x + w],(64,64))
cv2.imwrite(img_path.replace('images', 'images_face').split('.jpg')
[0] +'.jpg', img_face)

#tạo thư mục images_face


if not os.path.exists('images_face'):
os.makedirs('images_face')

#gọi định thức GetFace


image_path = 'images'
for whatelse in os.listdir(image_path):
whatelse_path = os.path.join(image_path, whatelse)
for sub_whatelse in os.listdir(whatelse_path):
img_path = os.path.join(whatelse_path, sub_whatelse)
if not os.path.isdir(whatelse_path.replace('images',
'images_face')):
os.mkdir(whatelse_path.replace('images', 'images_face'))
if img_path.endswith('.jpg'):
getFaces(img_path)

cv2.destroyAllWindows()

File Train.py:
#Thêm các thư viện
import numpy as np
import os
from PIL import Image

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
20

from keras.models import Sequential


from keras.layers import MaxPooling2D
from keras.layers import Conv2D
from keras.layers import Activation
from keras.layers import Flatten
from keras.layers import Dense

#trích dẫn link thư mục ảnh test và ảnh train


train_data = 'images_face'
test_data = 'images'

#gắn nhãn nhận biết đối tượng


dict = {'2311705': [1, 0, 0, 0, 0],
'2312684': [0, 1, 0, 0, 0],
'2313009': [0, 0, 1, 0, 0],
'2312824': [0, 0, 0, 1, 0],
'2310638': [0, 0, 0, 0, 1]}

#định thức lấy dữ liệu từ đường dẫn dirData lưu vào lstData
def getData(dirtData, lstData):
for whatever in os.listdir(dirtData):
whatever_path = os.path.join(dirtData, whatever)
lst_filename_path = []
for filename in os.listdir(whatever_path):
filename_path = os.path.join(whatever_path, filename)
label = filename_path.split("\\")[1]
img = np.array(Image.open(filename_path))
lst_filename_path.append((img, dict[label]))
lstData.extend(lst_filename_path)
return lstData

#nhập dữ liệu Xtrain từ đường dẫn train_data


Xtrain = []
Xtrain = getData(train_data, Xtrain)
for i in range(1,5):np.random.shuffle(Xtrain)

#Model nhận diện khuôn mặt


Model = Sequential()
shape = (64,64, 1)
Model.add(Conv2D(32,(3,3),padding="same",input_shape=shape))
Model.add(Activation("relu"))
Model.add(Conv2D(32,(3,3), padding="same"))
Model.add(Activation("relu"))
Model.add(MaxPooling2D(pool_size=(2,2)))
Model.add(Conv2D(64,(3,3), padding="same"))
Model.add(Activation("relu"))
Model.add(MaxPooling2D(pool_size=(2,2)))
Model.add(Flatten())
Model.add(Dense(512))
Model.add(Activation("relu"))
Model.add(Dense(5))
Model.add(Activation("softmax"))
Model.summary()
Model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])

#Training và lưu Model


print("start training")

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt
21

Model.fit(np.array([x[0] for i, x in enumerate(Xtrain)]), np.array([x[1]


for i, x in enumerate(Xtrain)]),4, epochs=20)
Model.save('model-FaceTraining.h5')

File DetectFace.py:
#thêm thư viện
import random
import cv2
import keras
import numpy as np

#Khởi chạy Model đã lưu ở Train.py


face_detector =
cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_alt.xml')
models = keras.models.load_model('model-FaceTraining.h5')

# gán các đại lượng liên quan với các các đối tượng
lstResult_NAME = ['KHOI', 'PHUC', 'TAI', 'QUAN', 'DAT']
lstResult_MSSV = ['2311705', '2312684', '2313009', '2312824', '2310638']

#nhận diện khuôn mặt xuất hiện trong video .mp4


cam = cv2.VideoCapture('test/TAI.mp4')
speed = 12
turn = 2
while True:
turn += 1
OK, frame = cam.read()
if (turn % speed == 0)or(turn % speed == 1):
faces = (face_detector.detectMultiScale(frame, 1.2, 7))
for (x, y, w, h) in faces:
Pic = cv2.resize(frame[y: y+h, x: x+w], (64, 64))
Pic_gray = cv2.cvtColor(Pic, cv2.COLOR_BGR2GRAY)
result = np.argmax(models.predict(Pic_gray.reshape(-1, 64, 64,
1)))
clr1= random.randint(0,250)
clr2 = random.randint(0, 250)
cv2.rectangle(frame, (x,y), (x+w, y+h), (clr1, clr2,0 ), 5)
cv2.putText(frame, lstResult_NAME[(result)], (x, y+h+40),
cv2.FONT_HERSHEY_PLAIN, 3, (clr1, clr2, 0),4)
cv2.putText(frame, lstResult_MSSV[(result)], (x, y + h + 90),
cv2.FONT_HERSHEY_PLAIN, 3, (clr1, clr2, 0), 4)
cv2.imshow('FRAME',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cam.release()
cv2.destroyAllWindows()

Tên đề tài: Nêu cơ sở lý thuyết của PCA và ứng dụng PCA vào nhận diện khuôn mặt

You might also like