Nhận d愃⌀ng dựa trên xét tổng thể khuôn mặt Appearance based face b Nhận dạng dựa trên các đặc trưng khuôn mặt: Đây là phương pháp nhận d愃⌀ng khuôn mặt dựa trên việc xác định các đặc tr
Trang 1TRƯỜNG ĐẠI HỌC BÁCH KHOA THÀNH PHỐ HỒ CHÍ MINH
Trang 2LỜI CẢM ƠN
Để thực hiện đề tài này, chúng em xin gửi lời cảm ơn sâu sắc đến thầy Hải Phú
đ愃̀ giúp đỡ, truyền đ愃⌀t cho chúng em như뀃ng kiến thư뀁c cơ bản và cchúng em c漃Ā thể thực hiện tốt đề tài
Do thời gian và kiến thư뀁c còn nhiều h愃⌀n chế, đề tài của em sẽ không tránh khỏi như뀃ng sai s漃Āt, em mong th
Xin chân thành cảm ơn!
Trang 3MỤC LỤC:
CHƯƠNG 1 GIỚI THIỆU 4
1.1 TỔNG QUAN 4
1.2 GIỚI THIỆU ĐỀ TÀI 4
1.3) Phân chia công việc 5
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 6
2.1 Ngôn ngư뀃 lập trình, thư viện và công cụ hỗ trợ 6
2.1.1 Python 6
2.1.2 OpenCV 6
2.1.3 Các thư viện được sử dụng 6
2.2.1 Tiền xử lý 7
2.2.2 Đối tượng nhận d愃⌀ng 7
2.2.3 Các đặc trưng Haar-like 8
2.2.4 Cách áp dụng đặc trưng Haar-like để phát hiện khuôn mặt trong ảnh 9
2.2.5 Số lượng đặc trưng Haar-like 10
2.3 Nhận diện khuôn mặt opencv 10
2.3.1 Trích xuất tính năng 11
2.3.2 So sánh khuôn mặt 13
CHƯƠNG 3: QUY TRÌNH THỰC HIỆN 15
3.1 Phát hiện khuôn mặt sử dụng bộ phân t 3.1.1 Cài đặt các phụ thuộc 15
3.1.2 Áp dụng các t 3.1.3 Kết quả 16
3.2 Lấy dư뀃 liệu khuôn mặt tư뀀 webcam 17
3.2.1 Cài đặt các phụ thuộc 17
3.2.2 chụp ảnh tư뀀 webcam và lưu vào dataset 18
3.3 Huấn luyện tập dư뀃 liệu 18
3.3.1 đọc dư뀃 liệu tư뀀 id 18
3.3.2 Huấn luyện tập dư뀃 liệu sử dụng hàm training recognizer 19
3.4 Nhận diện khuôn mặt trong luồng video 19
3.4.1 Lấy dư뀃 liệu tư뀀 tập dư뀃 liệu đ愃̀ training 19
3.4.2 Đọc camera và nhận diện khuôn mặt trong luồng video 20
CHƯƠNG 4: KẾT QUẢ THỰC HIỆN 21
CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 23
5.1 T漃Ām tắt và kết luận 23
5.2 Hướng phát triển 23
TÀI LIỆU THAM KHẢO 24
PHỤ LỤC 24
Trang 4CHƯƠNG 1 GIỚI THIỆU 1.1 TỔNG QUAN
Hiện nay, cùng với sự phát triển của x愃̀ hội, vấn đề an ninh bảo mật đang được yêu cđược ra đời với độ tin cậy ngày càng cao Một trong các bài toán nhận d愃⌀ng con người rất được quan tâm hiện nay là nhận d愃⌀ng khuôn mặt
Bài toán nhận d愃⌀ng khuôn mặt phục vụ m愃⌀nh mẽ trong nhiều lĩnh vực của đời sống đặt biệt ở như뀃ng lĩnh vực công nghệ cao yêu c
Vì vậy bài toán nhận d愃⌀ng khuôn mặt vẫn còn là bài toán n漃Āng hổi và càng ngày người
ta luôn tìm cách hoàn thiện n漃Ā để mang l愃⌀i kết quả nhận d愃⌀ng tốt nhất
1.2 GIỚI THIỆU ĐỀ TÀI
Giới thiệu chung về các phương pháp nhận dạng mặt người:
a) Các phương pháp nhận dạng mặt người:
Phương pháp nhận d愃⌀ng hiện nay c漃Ā 2 lo愃⌀i:
Nhận d愃⌀ng dựa trên các đặc trưng của các phbased face recognition)
Nhận d愃⌀ng dựa trên xét tổng thể khuôn mặt (Appearance based face
b) Nhận dạng dựa trên các đặc trưng khuôn mặt:
Đây là phương pháp nhận d愃⌀ng khuôn mặt dựa trên việc xác định các đặc trưng hình học của các chi tiết trên một khuôn mặt (như vị trí, diện tích, hình d愃⌀ng của mắt, mũi, miệng,…), và mối quan hệ giư뀃a chúng (như khoảng cách của hai mắt, khoảng cách của hai lông mày,…)
Ưu điểm của phương pháp này là n漃Ā gnhận biết khuôn mặt Hơn nư뀃a với việc xác định đặc tính và các mối quan hệ, phương pháp này c漃Ā thể cho kết quả tốt trong các trường hợp ảnh c漃Ā nhiều nhiễu như bị
nghiêng, bị xoay hoặc ánh sáng thay đổi
Trang 5Nhược điểm của phương pháp này là cài đặt thuật toán phư뀁c t愃⌀p do việc xác định mối quan hệ giư뀃a các đặc tính đòi hỏi các thuật toán phư뀁c t愃⌀p Mặt khác, với các ảnh kích thước bé thì các đặc tính sẽ kh漃Ā phân biệt do đ漃Ā kh漃Ā tính toán được các đặc trưng trên khuôn mặt.
c) Nhận dạng dựa trên xét toàn diện khuôn mặt:
Nhận d愃⌀ng đựa trên toàn diện khuôn mặt, c漃Ā nghĩa mình sẽ không đi xét đến tư뀀ng thành phkhông gian cụ thể và mình tìm như뀃ng đặc trưng, như뀃ng đặc điểm chính trên không gian đ漃Ā
Nội dung chính của hướng tiếp cận này là xem mỗi ảnh c漃Ā kích thước RxC là một vector trong không gian RxC chiều Ta sẽ xây dựng một không gian mới c漃Ā chiều nhỏ hơn sao cho khi biểu diễn trong không gian đ漃Ā các đặc điểm chính của một khuôn mặt không bị mất đi Trong không gian đ漃Ā, các ảnh của cùng một người sẽ được tập trung l愃⌀i thành một nh漃Ām g
Hai phương pháp thường được sử dụng là trong hướng tiếp cận này:
PCA (Principle Components Analysis)
LDA (Linear Discriminant Analysis)
Vâng, với hướng tiếp cận này chúng ta c漃Ā thể hình dung tương đối dễ chịu hơn phải không Chúng ta không cđ漃Ā phương pháp tiếp cận này tương đối dễ cài đặt hơn và cũng khá hiệu quả trong việc nhận d愃⌀ng
Nhược điểm thì tất nhiên sẽ không khỏi tránh khỏi Tùy theo phương pháp chúng tasư뀃 dụng PCA hay LDA mà đánh giá nhược điểm trong hướng tiếp cận này
1.3) Phân chia công việc trong nhóm
Hoàng Trung Kiên Demo, kiểm duyệt, viết
Trang 6CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Ngôn ngữ lập trình, thư viện và công cụ hỗ trợ
2.1.1 Python
Python được thiết kế với ưu điểm m愃⌀nh là dễ đọc, dễ học, dễ nhớ Theo thời gian, Python ddụng được online trên các nền tảng web hiện nay Ở chủ đề này, nh漃Ām chọn lựa ngônngư뀃 lập trình Python dùng để lập trình cho việc nhận diện biển số xe vì các ưu điểm
mà ngôn ngư뀃 này mang l愃⌀i
2.1.2 OpenCV
OpenCV (Open Computer Vision) là một thư viện m愃̀ nguồn mở hàng đ
xử lý về thị giác máy tính, machine learning, xử lý ảnh OpenCV đươc viết bằng C/C++, vì vậy c漃Ā tốc độ tính toán rất nhanh, c漃Ā thể sử dụng với các ư뀁ng dụng liên quan đến thời gian thực Opencv c漃Ā các interface cho C/C++, Python Java vì vậy
hỗ trợ được cho Window, Linux, MacOs lẫn Android, iOS OpenCV OpenCV c漃Ā nhiều ư뀁ng dụng trong nhận d愃⌀ng và xử lí ảnh
2.1.3 Các thư viện được sử dụng.
- Thư viện numpy: là một thư viện toán học rât phổ biến và m愃⌀nh mẽ của Python NumPy được trang bị các hàm số đ愃̀ được tối ưu, cho phép làm việc hiệu quả với ma trận và mảng, đặc biệt là dư뀃 liệu ma trận và mảng lớn với tốc độ xử lý nhanh hơn nhiều l
- Thư viện os: module os trong Python cung cấp các chư뀁c năng được sử dụng để tương tác với hệ điều hành và cũng c漃Ā được thông tin liên quan về n漃Ā OS đi theo các Module tiện ích tiêu chuẩn của Python Module này cung cấp một cách linh động sử dụng chư뀁c năng phụ thuộc vào hệ điều hành
- Thư viện sqlite: là cơ sở dư뀃 liệu Back -end, b愃⌀n c漃Ā thể sử dụng Python để xây dựng
một trang web hoặc t愃⌀o các công cụ c漃Ā yêu cdụng rộng r愃̀i trong các trường khác, chẳng h愃⌀n như HTML5 và các thiết bị đđộng Python sqlite3 Trong thư viện tiêu chuẩn cung cấp giao diện của cơ sở dư뀃 liệu
2.2 Phát hiện khuôn mặt bằng bộ phân tầng haar
C漃Ā rất nhiều phương pháp để giải quyết bài toán xác định khuôn mặt người trên ảnh 2D dựa trên các hướng tiếp cận khác nhau Phương pháp Haar-like – Adaboost(viết tắt
Trang 7dựa theo hướng tiếp cận trên diện m愃⌀o.
Hướng tiếp cận trên diện m愃⌀o tư뀁c là hệ thống nhận d愃⌀ng khuôn mặt sẽ được học các mẫu của khuôn mặt tư뀀 một tập ảnh mẫu Sau khi quá trình học hay quá trình huấn luyện này (training) thực hiện xong, hệ thống sẽ rút ra được như뀃ng tham số để phục vụcho quá trình nhận d愃⌀ng.Vì vậy tiếp cận trên diện m愃⌀o còn được biết đến với tên gọi tiếp cận theo phương pháp học máy Bài báo cáo tập trung chủ yếu vào quá trình nhận d愃⌀ng(sau khi đ愃̀ thực hiện quá trình học)
Về tổng quan, phương pháp HA được xây dựng dựa trên sự kết hợp, lắp ghép của 4 thành ph
- Các đặc trưng Haar-like: các đặc trưng được đặt vào các vùng ảnh để tính toán các giá trị của đặc trưng, tư뀀 như뀃ng giá trị đặc trưng này đưa vào bộ phân lo愃⌀i Adaboost ta sẽ xác định được ảnh c漃Ā khuôn mặt hay không
- Ảnh tích hợp(Integral Image): thực ra đây là một công cụ giúp việc tính toán các giá trị đặc trưng Haar-like nhanh hơn
- Adaboost(Adaptive Boost): bộ phân lo愃⌀i (bộ lọc) ho愃⌀t động dựa trên nguyên tắc kết hợp các bộ phân lo愃⌀i yếu để t愃⌀o lên bộ phân lo愃⌀i m愃⌀nh Adaboost sử dụng giá trị đặc trưng Haar-like để phân lo愃⌀i ảnh là mặt hay không phải mặt
- Cascade of Classifiers: bộ phân lo愃⌀i tAdaboost, c漃Ā tác dụng tăng tốc độ phân lo愃⌀i
Như vậy bài toán xác định mặt người trong ảnh cũng chính là bài toán phân lo愃⌀iảnh thành hai lớp mặt hoặc không phải mặt
2.2.1 Tiền xử lý
Một lưu ý nhỏ là phương pháp HA thực hiện trên ảnh xám (gray image) Mỗi điểmảnh(pixel) sẽ c漃Ā giá trị mư뀁c xám tư뀀 0 đến 255(không gian màu 8 bit) Như vậyphương pháp HA sẽ không khai thác như뀃ng đặc điểm về màu sắc khuôn mặt để nhậnd愃⌀ng song vẫn rất hiệu quả Ảnh màu sẽ được chuyển về ảnh xám để nhận d愃⌀ng, việcchuyển đổi này khá đơn giản, thực hiện bằng một hàm chuyển đổi và sử dụng chỉ vớimột câu lệnh trong Opencv nên báo cáo chưa đề cập tới
Sau khi chuyển thành ảnh xám, ảnh l愃⌀i tiếp tục được chuyển thành “ảnh tích hợp”(sẽ trình bày ở phtrưng Haar-like sẽ làm việc trực tiếp trên ảnh tích hợp
2.2.2 Đối tượng nhận dạng.
Trên ảnh, vùng khuôn mặt là tập hợp các điểm ảnh c漃Ā nhưng mối quan hệ khác biệt so với các vùng ảnh khác, như뀃ng mối quan hệ này t愃⌀o lên các đặc trưng riêng của khuôn mặt Tất cả khuôn mặt người đều c漃Ā chung như뀃ng đặc điểm sau khi đ愃̀ chuyển qua ảnh xám, ví dụ như:
- Vùng hai mắt sẽ tối hơn vùng má và vùng chán, tư뀁c mư뀁c xám của vùng này cao hơn vượt trội so với hai vùng còn l愃⌀i
- Vùng giư뀃a sống mũi cũng tối hơn vùng hai bên mũi
- …
Trang 8Và còn rất nhiều như뀃ng đặc điểm khác của khuôn mặt và các đặc trưng Haar like dựa vào các đặc điểm này để nhận d愃⌀ng.
Về tổng quát, các đặc trưng Haar like không chỉ được sử dụng để nhận d愃⌀ng khuôn mặt mà c漃Ā thể dùng để nhận d愃⌀ng bất kì một đối tượng nào trên ảnh( thân người, tay, chân, ô tô, đồ vật,….) Bởi vì cũng giống như khuôn mặt, mỗi đối tượng c漃Ā như뀃ng đặc điểm riêng biệt đặc trưng bởi các vùng điểm ảnh, công việc của đặc trưng Haar-like là tính toán các giá trị tương quan giư뀃a các vùng ảnh đ漃Ā
Đây chỉ là bước ban đtiết cách phân lo愃⌀i của bộ Adaboost và Cascade of Classifiers sẽ trình bày ở mục sau
o Đặc trưng tâm – xung quanh:
Giá trị của một đặc trưng Haar-like là sự khác biệt giư뀃a tổng các giá trị xám củacác pixel trong vùng “đen” với tổng các giá trị xám của các pixel trong vùng “trắng”:
f(x) = Tổng vùng đen (pixel) - Tổng vùng trắng (pixel) (1)
Vậy khi được đặt lên một vùng ảnh, đặc trưng Haar-like sẽ tính toán và đưa ra
giá trị đặc trưng h(x) của vùng ảnh đ漃Ā.
2.2.4 Cách áp dụng đặc trưng Haar-like để phát hiện khuôn mặt trong ảnh.
Trang 9Như đ愃̀ trình bày ở bài báo cáo 1, để phát hiện khuôn mặt, hệ thống sẽ cho một cửa sổ con(sub-window) c漃Ā kích thước cố định quét lên toàn bộ ảnh đ
sẽ c漃Ā rất nhiều ảnh con ư뀁ng với tư뀀ng cửa sổ con, các đặc trưng Haar-like sẽ được đặc lên các cửa sổ con này để tư뀀 đ漃Ā tính ra giá trị của đặc trưng Sau đ漃Ā các giá trị này được bộ phân lo愃⌀i xác nhận xem khung hình đ漃Ā c漃Ā phải khuôn mặt hay không
Hình dưới là một ví dụ: khung màu xanh là cửa sổ con, một đặc trưng Haar-likevới kích thước và vị trí đặt như trong hình vẽ
Ứng với mỗi một đặc trưng như trên, một bộ phân lớp yếu(weak classifier)
hk(x) được định nghĩa như sau:
(2)
Trong đ漃Ā:
X : cửa sổ con c
: ngưỡng
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
Ta hiểu công thư뀁c trên đơn giản như sau: khi giá trị của đặc trưng Haar-like k:fk
t愃⌀i cửa sổ con x vượt qua một ngưỡng thì bộ phân lớp hk(x) sẽ kết luận cửa sổ con x là
khuôn mặt(hk(x)=1), còn fk không vượt qua ngưỡng đ漃Ā thì không là khuôn mặt
Ngưỡng là giá trị đ愃̀ rút ra sau qua trình huấn luyện bộ phân lớp, sẽ trình bày sau
Đương nhiên sẽ c漃Ā như뀃ng vị trí khác trên ảnh đk vượt
Trang 10ngưỡng và bộ phân lớp yếu hk(x) kết luận đấy là khuôn mặt, nhưng ta không chỉ dùng một đặc trưng Haar-like mà dùng rất nhiều đặc trưng ở như뀃ng vị trí và kích thước khácnhau trong cửa sổ con làm giảm đi sự trùng hợp ngẫu nhiên.
2.2.5 Số lượng đặc trưng Haar-like
Việc xác định một cửa sổ con c漃Ā phải là mặt hay không phải sử dụng rất nhiều đặc trưng Haar-like Ứng với mỗi một kích thước, kiểu đặc trưng và vị trí đặt trong cửa
sổ con cho ta một đặc trưng ư뀁ng với một bộ phân lớp yếu x Vì vậy tập hợp đ
lượng các đặc trưng trong một cửa sổ con là rất lớn Theo như sự tính toán của hai tác giả, với một cửa sổ con ở kích thước cơ bản 2424 pixel số lượng đHaar-like là hơn 160000.C漃Ā hai vấn đề đặt ra ở đây:
Thư뀁 nhất là giá trị của mỗi một đặc trưng Haar-like được tính bằng tổng giá trị các điểm ảnh vùng đen trư뀀 đi tổng các điểm ảnh vùng trắng, như vậy là với số lượng lớn các đặc trưng sẽ t愃⌀o ra một khối lượng tính toán khổng lồ Điều này là không phù hợp để đáp ư뀁ng thời gian thực vì thời gian xử lý rất lâu
Thư뀁 hai là trong số hàng trăm nghìn đặc trưng đ漃Ā thì không phải đặc trưng nào cũng c漃Ā ích cho công việc phân lo愃⌀i Nếu chúng ta không tìm cách lo愃⌀i bổ như뀃ng đặc trưng không c漃Ā ích để tập trung vào như뀃ng đặc trưng c漃Ā hiệu quả cao thì cũng sẽ mất thời gian xử lý một cách vô ích
Như뀃ng ph
2.3 Nhận diện khuôn mặt opencv
Cách nhận dạng khuôn mặt của OpenCV hoạt động:
Trang 11Hình 1: Tổng quan về đường ống nhận d愃⌀ng khuôn mặt OpenCV Bước quan trọng là
một công cụ trích xuất tính năng CNN để t愃⌀o ra các hình ảnh nhúng trên khuôn mặt 128-d
Để xây dựng quy trình nhận d愃⌀ng khuôn mặt OpenCV của chúng tôi, chúng tôi sẽ áp dụng học sâu theo hai bước chính:
1 Để áp dụng tính năng nhận diện khuôn mặt , phát hiện sự hiện diện và vị trí của
một khuôn mặt trong hình ảnh, nhưng không xác định được khuôn mặt đ漃Ā
2 Để trích xuất các vectơ đặc trưng 128-d (được gọi là "nhúng") định lượng tư뀀ng
khuôn mặt trong một hình ảnh
2.3.1 Trích xuất tính năng
Bây giờ chúng ta đ愃̀ cắt khuôn mặt ra khỏi hình ảnh, chúng ta trích xuất các tính năng tư뀀 n漃Ā Ở đây chúng ta sẽ sử dụng phương pháp nhúng khuôn mặt để tách các đặc điểm ra khỏi khuôn mặt Một m愃⌀ng nơ-ron lấy hình ảnh khuôn mặt của một người làm đcủa khuôn mặt Trong học máy, vectơ này được gọi là nhúng và do đ漃Ā chúng tôi gọivectơ này là nhúng khuôn mặt Bây giờ điều này giúp ích như thế nào trong việc nhận d愃⌀ng khuôn mặt của như뀃ng người khác nhau?
Trong khi huấn luyện m愃⌀ng nơ-ron, m愃⌀ng sẽ học cách xuất ra các vectơ tương tự cho các khuôn mặt trông giống nhau Ví dụ: nếu c漃Ā nhiều hình ảnh khuôn mặt trongkhoảng thời gian khác nhau, tất nhiên, một số đặc điểm trên khuôn mặt c漃Ā thể thay đổi nhưng không nhiều Vì vậy, trong trường hợp này các vectơ liên kết với các mặt
là tương tự nhau hay n漃Āi ngắn gọn là chúng rất g
vectơ H愃̀y xem sơ đồ dưới đây để biết sơ bộ:
Trang 12Bây giờ sau khi huấn luyện m愃⌀ng, m愃⌀ng học cách xuất ra các vectơ g(tương tự) cho các khuôn mặt của cùng một người (trông giống nhau) Các vectơ trên bây giờ biến đổi thành:
Chúng tôi sẽ không đào t愃⌀o một m愃⌀ng như vậy ở đây vì c
và sư뀁c m愃⌀nh tính toán để đào t愃⌀o các m愃⌀ng như vậy Chúng tôi sẽ sử dụng một m愃⌀ng được huấn luyện trước do Davis King đào t愃⌀o trên tập dư뀃 liệu gồm ~ 3 triệu hình ảnh M愃⌀ng xuất ra một vectơ gồm 128 số đ愃⌀i diện cho các đặc điểm quan trọngnhất của một khuôn mặt
Trang 132.3.2 So sánh khuôn mặt
Bây giờ chúng ta đ愃̀ nhúng khuôn mặt cho mọi khuôn mặt trong dư뀃 liệu của chúng ta được lưu trong một tệp, bước tiếp theo là nhận d愃⌀ng một hình ảnh t mới không c漃Ā trong dư뀃 liệu của chúng ta Vì vậy, bước đkhuôn mặt cho hình ảnh bằng cùng một m愃⌀ng mà chúng ta đ愃̀ sử dụng ở trên và sauđ漃Ā so sánh cách nhúng này với ph
c漃Ā Chúng tôi nhận ra khuôn mặt nếu cách nhúng được t愃⌀o gvới bất kỳ cách nhúng nào khác như được hiển thị bên dưới:
Trang 14Vì vậy, chúng tôi chuyển qua hai hình ảnh, một trong như뀃ng hình ảnh là của
Vladimir Putin và hình ảnh khác của George W Bush Trong ví dụ của chúng tôi ở trên, chúng tôi đ愃̀ không lưu các nhúng cho Putin nhưng chúng tôi lưu các nhúng của Bush Vì vậy, khi chúng tôi so sánh hai phương pháp nhúng mới với các
phương pháp hiện c漃Ā, vectơ cho Bush gkhác của Bush trong khi các phương pháp nhúng khuôn mặt của Putin không gvới bất kỳ phương pháp nhúng nào khác và do đ漃Ā chương trình không thể nhận ra ông ấy
CHƯƠNG 3: QUY TRÌNH THỰC HIỆN
3.1 Phát hiện khuôn mặt sử dụng bộ phân tầng Haar
3.1.1 Cài đặt các phụ thuộc
Trước tiên, chúng ta cphân lo愃⌀i t
3.1.2 Áp dụng các tầng Haar